add remove queue api

This commit is contained in:
jxxghp
2024-12-26 08:12:59 +08:00
parent abfc146335
commit 8c800836d5
2 changed files with 42 additions and 4 deletions

View File

@@ -56,6 +56,17 @@ def query_queue(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
return TransferChain().get_queue_tasks()
@router.delete("/queue", summary="从整理队列中删除任务", response_model=schemas.Response)
def remove_queue(fileitem: schemas.FileItem, _: schemas.TokenPayload = Depends(verify_token)) -> Any:
"""
查询整理队列
:param fileitem: 文件项
:param _: Token校验
"""
TransferChain().remove_from_queue(fileitem)
return schemas.Response(success=True)
@router.post("/manual", summary="手动转移", response_model=schemas.Response)
def manual_transfer(transer_item: ManualTransferItem,
background: bool = False,

View File

@@ -170,6 +170,25 @@ class JobManager:
set(self._season_episodes[__mediaid__]) - set(task.meta.episode_list)
)
def remove_task(self, fileitem: FileItem):
"""
移除整理任务
"""
with job_lock:
for mediaid, job in self._job_view.items():
for task in job["tasks"]:
if task["fileitem"].path == fileitem.path and task["fileitem"].storage == fileitem.storage:
job["tasks"].remove(task)
# 如果没有作业了,则移除作业
if not job["tasks"]:
self._job_view.pop(mediaid)
# 移除季集信息
if mediaid in self._season_episodes:
self._season_episodes[mediaid] = list(
set(self._season_episodes[mediaid]) - set(task["meta"].episode_list)
)
break
def remove_job(self, media: MediaInfo, season: int = None) -> Optional[Dict[str, Any]]:
"""
移除作业
@@ -180,10 +199,10 @@ class JobManager:
with job_lock:
# 移除作业
if __mediaid__ in self._job_view:
# 移除季集信息
if __mediaid__ in self._season_episodes:
self._season_episodes.pop(__mediaid__)
return self._job_view.pop(__mediaid__)
# 移除季集信息
if __mediaid__ in self._season_episodes:
self._season_episodes.pop(__mediaid__)
def is_finished(self, media: MediaInfo, season: int = None) -> bool:
"""
@@ -367,6 +386,14 @@ class TransferChain(ChainBase, metaclass=Singleton):
callback=callback or self.__default_callback
))
def remove_from_queue(self, fileitem: FileItem):
"""
从待整理队列移除
"""
if not fileitem:
return
self.jobview.remove_task(fileitem)
def __start_transfer(self):
"""
处理队列
@@ -728,7 +755,7 @@ class TransferChain(ChainBase, metaclass=Singleton):
file_items = [f for f in file_items if formaterHandler.match(f[0].name)]
# 过滤后缀和大小
file_items = [f for f in file_items if f[1] # 蓝光目录不过滤
file_items = [f for f in file_items if f[1] # 蓝光目录不过滤
or __is_allow_extensions(f[0].extension) and __is_allow_filesize(f[0].size, min_filesize)]
if not file_items:
logger.warn(f"{fileitem.path} 没有找到可整理的媒体文件")