From dfbe8a2c0e69788bc07e282395e3f673436784a9 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Mon, 30 Dec 2024 18:57:45 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E7=9B=AE=E5=BD=95=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E9=87=8D=E5=A4=8D=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/chain/transfer.py | 58 ++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/app/chain/transfer.py b/app/chain/transfer.py index e5245b75..d5f98280 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -34,6 +34,7 @@ from app.utils.string import StringUtils downloader_lock = threading.Lock() job_lock = threading.Lock() +task_lock = threading.Lock() class JobManager: @@ -460,31 +461,35 @@ class TransferChain(ChainBase, metaclass=Singleton): # 整理完成且有成功的任务时 if self.jobview.is_finished(task): - # 发送通知 - if transferinfo.need_notify: - se_str = None - if task.mediainfo.type == MediaType.TV: - season_episodes = self.jobview.season_episodes(task.mediainfo, task.meta.begin_season) - if season_episodes: - se_str = f"{task.meta.season} {StringUtils.format_ep(season_episodes)}" - else: - se_str = f"{task.meta.season}" - # 更新文件数量 - transferinfo.file_count = self.jobview.count(task.mediainfo, task.meta.begin_season) or 1 - # 更新文件大小 - transferinfo.total_size = self.jobview.size(task.mediainfo, - task.meta.begin_season) or task.fileitem.size - self.send_transfer_message(meta=task.meta, - mediainfo=task.mediainfo, - transferinfo=transferinfo, - season_episode=se_str) - # 刮削事件 - if transferinfo.need_scrape: - self.eventmanager.send_event(EventType.MetadataScrape, { - 'meta': task.meta, - 'mediainfo': task.mediainfo, - 'fileitem': transferinfo.target_diritem - }) + with task_lock: + # 发送通知 + if transferinfo.need_notify: + se_str = None + if task.mediainfo.type == MediaType.TV: + season_episodes = self.jobview.season_episodes(task.mediainfo, task.meta.begin_season) + if season_episodes: + se_str = f"{task.meta.season} {StringUtils.format_ep(season_episodes)}" + else: + se_str = f"{task.meta.season}" + # 更新文件数量 + transferinfo.file_count = self.jobview.count(task.mediainfo, task.meta.begin_season) or 1 + # 更新文件大小 + transferinfo.total_size = self.jobview.size(task.mediainfo, + task.meta.begin_season) or task.fileitem.size + self.send_transfer_message(meta=task.meta, + mediainfo=task.mediainfo, + transferinfo=transferinfo, + season_episode=se_str) + # 刮削事件 + if transferinfo.need_scrape: + self.eventmanager.send_event(EventType.MetadataScrape, { + 'meta': task.meta, + 'mediainfo': task.mediainfo, + 'fileitem': transferinfo.target_diritem + }) + + # 移除已完成的任务 + self.jobview.remove_job(task) return True, "" @@ -497,7 +502,8 @@ class TransferChain(ChainBase, metaclass=Singleton): if not task: return # 维护整理任务视图 - self.jobview.add_task(task) + with task_lock: + self.jobview.add_task(task) # 添加到队列 self._queue.put(TransferQueue( task=task,