From 8c800836d50ab7e2bdb87d0b4c28b951d2eb4416 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 26 Dec 2024 08:12:59 +0800 Subject: [PATCH] add remove queue api --- app/api/endpoints/transfer.py | 11 +++++++++++ app/chain/transfer.py | 35 +++++++++++++++++++++++++++++++---- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/app/api/endpoints/transfer.py b/app/api/endpoints/transfer.py index c9f07091..a07f9949 100644 --- a/app/api/endpoints/transfer.py +++ b/app/api/endpoints/transfer.py @@ -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, diff --git a/app/chain/transfer.py b/app/chain/transfer.py index 0c543583..d345b0fc 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -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} 没有找到可整理的媒体文件")