diff --git a/pikpakFs.py b/pikpakFs.py index c57c1b3..2c43e85 100644 --- a/pikpakFs.py +++ b/pikpakFs.py @@ -8,6 +8,12 @@ import logging from enum import Enum import asyncio +class DownloadTaskStatus(Enum): + pending = "pending" + downloading = "downloading" + done = "done" + error = "error" + stopped = "stopped" class PKTaskStatus(Enum): pending_offline_download = "pending" @@ -16,6 +22,7 @@ class PKTaskStatus(Enum): downloading = "downloading" done = "done" error = "error" + stopped = "stopped" class PkTask: id = 0 @@ -33,6 +40,13 @@ class PkTask: self.url = None self.pkTaskId = None +class DownloadTask: + def __init__(self, nodeId : str, pkTaskId : str, status : DownloadTaskStatus = DownloadTaskStatus.pending): + self.status = status + self.recoverStatus = status + self.pkTaskId = pkTaskId + self.nodeId = nodeId + class PathWalker(): def __init__(self, pathStr : str, sep : str = "/"): self.__pathSpots : list[str] = [] @@ -135,26 +149,23 @@ class PKFs: waitTime = waitTime * 1.5 async def _task_worker(self, task : PkTask): - while task.status != PKTaskStatus.done and task.status != PKTaskStatus.error: + while task.status not in {PKTaskStatus.done, PKTaskStatus.error, PKTaskStatus.stopped}: try: if task.status == PKTaskStatus.pending_offline_download: - await self._task_pending(task) - continue - - if task.status == PKTaskStatus.offline_downloading: + await self._task_pending(task) + elif task.status == PKTaskStatus.offline_downloading: await self._task_offline_downloading(task) - continue - - if task.status == PKTaskStatus.pending_download: + elif task.status == PKTaskStatus.pending_download: task.status = PKTaskStatus.done - pass - - break + else: + break except Exception as e: - logging.error(f"task failed, exception occured: {e}") - task.recoverStatus = task.status + logging.error(f"task failed, exception occurred: {e}") + task.recoverStatus = task.status task.status = PKTaskStatus.error + + def RunTask(self, task : PkTask): self.tasks.append(task) if task.runningTask is None or task.runningTask.done(): diff --git a/readme.md b/readme.md index 8281d2e..841322f 100644 --- a/readme.md +++ b/readme.md @@ -6,9 +6,12 @@ Todo: - [x] 实现自定义根路径 - [x] 异步输出频率过高会导致卡死,似乎会多创建一个线程 -- [ ] 实现Task队列管理 -- [ ] 自动刷新文件系统缓存 -- [ ] 分析以下方法的返回值:offline_file_info、offline_list +- [x] 实现Task队列管理 +- [x] 自动刷新文件系统缓存 +- [x] 分析以下方法的返回值:offline_file_info、offline_list +- [ ] 实现本地下载队列(多文件,文件夹) +- [ ] 实现任务暂停、继续、恢复 +- [ ] 持久化数据 ### 记录