Fix task loss issue in do_transfer multi-threading batch adding

Co-authored-by: jxxghp <51039935+jxxghp@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-01-31 16:38:55 +00:00
co-authored by jxxghp
parent e04963c2dc
commit 270bcff8f3
+24 -13
View File
@@ -111,12 +111,13 @@ class JobManager:
""" """
return schemas.MetaInfo(**task.meta.to_dict()) return schemas.MetaInfo(**task.meta.to_dict())
def add_task(self, task: TransferTask, state: Optional[str] = "waiting"): def add_task(self, task: TransferTask, state: Optional[str] = "waiting") -> bool:
""" """
添加整理任务,自动分组到对应的作业中 添加整理任务,自动分组到对应的作业中
:return: True表示任务已添加,False表示任务已存在(重复)
""" """
if not any([task, task.meta, task.fileitem]): if not any([task, task.meta, task.fileitem]):
return return False
with job_lock: with job_lock:
__mediaid__ = self.__get_id(task) __mediaid__ = self.__get_id(task)
if __mediaid__ not in self._job_view: if __mediaid__ not in self._job_view:
@@ -134,7 +135,8 @@ class JobManager:
else: else:
# 不重复添加任务 # 不重复添加任务
if any([t.fileitem == task.fileitem for t in self._job_view[__mediaid__].tasks]): if any([t.fileitem == task.fileitem for t in self._job_view[__mediaid__].tasks]):
return logger.debug(f"任务 {task.fileitem.name} 已存在,跳过重复添加")
return False
self._job_view[__mediaid__].tasks.append( self._job_view[__mediaid__].tasks.append(
TransferJobTask( TransferJobTask(
fileitem=task.fileitem, fileitem=task.fileitem,
@@ -150,6 +152,7 @@ class JobManager:
self._season_episodes[__mediaid__] = list(set(self._season_episodes[__mediaid__])) self._season_episodes[__mediaid__] = list(set(self._season_episodes[__mediaid__]))
else: else:
self._season_episodes[__mediaid__] = task.meta.episode_list self._season_episodes[__mediaid__] = task.meta.episode_list
return True
def running_task(self, task: TransferTask): def running_task(self, task: TransferTask):
""" """
@@ -724,26 +727,30 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
return ret_status, ret_message return ret_status, ret_message
def put_to_queue(self, task: TransferTask): def put_to_queue(self, task: TransferTask) -> bool:
""" """
添加到待整理队列 添加到待整理队列
:param task: 任务信息 :param task: 任务信息
:return: True表示任务已添加到队列,False表示任务已存在(重复)
""" """
if not task: if not task:
return return False
# 维护整理任务视图 # 维护整理任务视图,如果任务已存在则不添加到队列
self.__put_to_jobview(task) if not self.__put_to_jobview(task):
return False
# 添加到队列 # 添加到队列
self._queue.put(TransferQueue( self._queue.put(TransferQueue(
task=task, task=task,
callback=self.__default_callback callback=self.__default_callback
)) ))
return True
def __put_to_jobview(self, task: TransferTask): def __put_to_jobview(self, task: TransferTask) -> bool:
""" """
添加到作业视图 添加到作业视图
:return: True表示任务已添加,False表示任务已存在(重复)
""" """
self.jobview.add_task(task) return self.jobview.add_task(task)
def remove_from_queue(self, fileitem: FileItem): def remove_from_queue(self, fileitem: FileItem):
""" """
@@ -1357,12 +1364,16 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
background=background background=background
) )
if background: if background:
self.put_to_queue(task=transfer_task) if self.put_to_queue(task=transfer_task):
logger.info(f"{file_path.name} 已添加到整理队列") logger.info(f"{file_path.name} 已添加到整理队列")
else:
logger.debug(f"{file_path.name} 已在整理队列中,跳过")
else: else:
# 加入列表 # 加入列表
self.__put_to_jobview(transfer_task) if self.__put_to_jobview(transfer_task):
transfer_tasks.append(transfer_task) transfer_tasks.append(transfer_task)
else:
logger.debug(f"{file_path.name} 已在整理列表中,跳过")
finally: finally:
file_items.clear() file_items.clear()
del file_items del file_items