diff --git a/app/chain/transfer.py b/app/chain/transfer.py index bdd962a8..2f5a00ac 100755 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -312,7 +312,7 @@ class JobManager: def count(self, media: MediaInfo, season: Optional[int] = None) -> int: """ - 获取某项任务总数 + 获取某项任务成功总数 """ __mediaid__ = self.__get_media_id(media=media, season=season) with job_lock: @@ -323,7 +323,7 @@ class JobManager: def size(self, media: MediaInfo, season: Optional[int] = None) -> int: """ - 获取某项任务总大小 + 获取某项任务成功文件总大小 """ __mediaid__ = self.__get_media_id(media=media, season=season) with job_lock: @@ -390,6 +390,44 @@ class TransferChain(ChainBase, metaclass=Singleton): """ 整理完成后处理 """ + + def __do_finished(): + """ + 完成时发送消息、刮削事件、移除任务等 + """ + # 更新文件数量 + 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 + # 更新文件清单 + transferinfo.file_list_new = self._success_target_files.pop(transferinfo.target_diritem.path, []) + # 发送通知,实时手动整理时不发 + if transferinfo.need_notify and (task.background or not task.manual): + 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}" + self.send_transfer_message(meta=task.meta, + mediainfo=task.mediainfo, + transferinfo=transferinfo, + season_episode=se_str, + username=task.username) + # 刮削事件 + if transferinfo.need_scrape: + self.eventmanager.send_event(EventType.MetadataScrape, { + 'meta': task.meta, + 'mediainfo': task.mediainfo, + 'fileitem': transferinfo.target_diritem, + 'file_list': transferinfo.file_list_new, + 'overwrite': False + }) + # 移除已完成的任务 + self.jobview.remove_job(task) + transferhis = TransferHistoryOper() if not transferinfo.success: # 转移失败 @@ -415,6 +453,10 @@ class TransferChain(ChainBase, metaclass=Singleton): )) # 整理失败 self.jobview.fail_task(task) + with task_lock: + # 整理完成且有成功的任务时 + if self.jobview.is_finished(task): + __do_finished() return False, transferinfo.message # 转移成功 @@ -470,39 +512,7 @@ class TransferChain(ChainBase, metaclass=Singleton): storagechain.delete_media_file(t.fileitem, delete_self=False) # 整理完成且有成功的任务时 if self.jobview.is_finished(task): - # 更新文件数量 - 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 - # 更新文件清单 - transferinfo.file_list_new = self._success_target_files.pop(transferinfo.target_diritem.path, []) - # 发送通知,实时手动整理时不发 - if transferinfo.need_notify and (task.background or not task.manual): - 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}" - self.send_transfer_message(meta=task.meta, - mediainfo=task.mediainfo, - transferinfo=transferinfo, - season_episode=se_str, - username=task.username) - # 刮削事件 - if transferinfo.need_scrape: - self.eventmanager.send_event(EventType.MetadataScrape, { - 'meta': task.meta, - 'mediainfo': task.mediainfo, - 'fileitem': transferinfo.target_diritem, - 'file_list': transferinfo.file_list_new, - 'overwrite': False - }) - - # 移除已完成的任务 - self.jobview.remove_job(task) + __do_finished() return True, ""