This commit is contained in:
fengfeng 2024-10-31 20:02:49 +08:00
parent e970f765e9
commit 2865964468
2 changed files with 30 additions and 16 deletions

View File

@ -8,6 +8,12 @@ import logging
from enum import Enum from enum import Enum
import asyncio import asyncio
class DownloadTaskStatus(Enum):
pending = "pending"
downloading = "downloading"
done = "done"
error = "error"
stopped = "stopped"
class PKTaskStatus(Enum): class PKTaskStatus(Enum):
pending_offline_download = "pending" pending_offline_download = "pending"
@ -16,6 +22,7 @@ class PKTaskStatus(Enum):
downloading = "downloading" downloading = "downloading"
done = "done" done = "done"
error = "error" error = "error"
stopped = "stopped"
class PkTask: class PkTask:
id = 0 id = 0
@ -33,6 +40,13 @@ class PkTask:
self.url = None self.url = None
self.pkTaskId = 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(): class PathWalker():
def __init__(self, pathStr : str, sep : str = "/"): def __init__(self, pathStr : str, sep : str = "/"):
self.__pathSpots : list[str] = [] self.__pathSpots : list[str] = []
@ -135,26 +149,23 @@ class PKFs:
waitTime = waitTime * 1.5 waitTime = waitTime * 1.5
async def _task_worker(self, task : PkTask): 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: try:
if task.status == PKTaskStatus.pending_offline_download: if task.status == PKTaskStatus.pending_offline_download:
await self._task_pending(task) await self._task_pending(task)
continue elif task.status == PKTaskStatus.offline_downloading:
if task.status == PKTaskStatus.offline_downloading:
await self._task_offline_downloading(task) await self._task_offline_downloading(task)
continue elif task.status == PKTaskStatus.pending_download:
if task.status == PKTaskStatus.pending_download:
task.status = PKTaskStatus.done task.status = PKTaskStatus.done
pass else:
break break
except Exception as e: except Exception as e:
logging.error(f"task failed, exception occured: {e}") logging.error(f"task failed, exception occurred: {e}")
task.recoverStatus = task.status task.recoverStatus = task.status
task.status = PKTaskStatus.error task.status = PKTaskStatus.error
def RunTask(self, task : PkTask): def RunTask(self, task : PkTask):
self.tasks.append(task) self.tasks.append(task)
if task.runningTask is None or task.runningTask.done(): if task.runningTask is None or task.runningTask.done():

View File

@ -6,9 +6,12 @@ Todo:
- [x] 实现自定义根路径 - [x] 实现自定义根路径
- [x] 异步输出频率过高会导致卡死,似乎会多创建一个线程 - [x] 异步输出频率过高会导致卡死,似乎会多创建一个线程
- [ ] 实现Task队列管理 - [x] 实现Task队列管理
- [ ] 自动刷新文件系统缓存 - [x] 自动刷新文件系统缓存
- [ ] 分析以下方法的返回值offline_file_info、offline_list - [x] 分析以下方法的返回值offline_file_info、offline_list
- [ ] 实现本地下载队列(多文件,文件夹)
- [ ] 实现任务暂停、继续、恢复
- [ ] 持久化数据
### 记录 ### 记录