From f7357b8a71c6c7b4c2a916d6876bc3b016f5e23b Mon Sep 17 00:00:00 2001 From: thsrite Date: Wed, 23 Oct 2024 12:57:51 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat=20=E7=9B=AE=E5=BD=95=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E6=98=AF=E5=90=A6=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/chain/transfer.py | 26 ++++++++++++++++++-------- app/monitor.py | 27 ++++++++++++++------------- app/schemas/system.py | 2 ++ 3 files changed, 34 insertions(+), 21 deletions(-) diff --git a/app/chain/transfer.py b/app/chain/transfer.py index 80420eed..b23c5605 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -205,6 +205,15 @@ class TransferChain(ChainBase): logger.warn(f"{fileitem.path} 没有找到可整理的媒体文件") return False, f"{fileitem.name} 没有找到可整理的媒体文件" + # 检查目录是否发送通知 + transfer_dirinfo = None + for dir_info in self.directoryhelper.get_download_dirs(): + if not dir_info.download_path: + continue + if fileitem.path.is_relative_to(Path(dir_info.download_path)): + transfer_dirinfo = dir_info + break + # 处理所有待整理目录或文件,默认一个整理路径或文件只有一个媒体信息 for trans_item in trans_items: # 汇总季集清单 @@ -240,7 +249,7 @@ class TransferChain(ChainBase): if not file_items: logger.warn(f"{fileitem.path} 没有找到可整理的媒体文件") return False, f"{fileitem.name} 没有找到可整理的媒体文件" - + logger.info(f"正在整理 {len(file_items)} 个文件...") # 整理所有文件 @@ -453,13 +462,14 @@ class TransferChain(ChainBase): transfer_meta = metas[mkey] transfer_info = transfers[mkey] # 发送通知 - se_str = None - if media.type == MediaType.TV: - se_str = f"{transfer_meta.season} {StringUtils.format_ep(season_episodes[mkey])}" - self.send_transfer_message(meta=transfer_meta, - mediainfo=media, - transferinfo=transfer_info, - season_episode=se_str) + if transfer_dirinfo and transfer_dirinfo.notify: + se_str = None + if media.type == MediaType.TV: + se_str = f"{transfer_meta.season} {StringUtils.format_ep(season_episodes[mkey])}" + self.send_transfer_message(meta=transfer_meta, + mediainfo=media, + transferinfo=transfer_info, + season_episode=se_str) # 刮削事件 if scrape or transfer_info.need_scrape: self.eventmanager.send_event(EventType.MetadataScrape, { diff --git a/app/monitor.py b/app/monitor.py index bee6f0c8..9f402f37 100644 --- a/app/monitor.py +++ b/app/monitor.py @@ -447,18 +447,18 @@ class Monitor(metaclass=Singleton): link=settings.MP_DOMAIN('#/history') )) return - else: - # 转移成功 - logger.info(f"{event_path.name} 入库成功:{transferinfo.target_diritem.path}") - # 新增转移成功历史记录 - self.transferhis.add_success( - fileitem=file_item, - mode=dir_info.transfer_type, - download_hash=download_hash, - meta=file_meta, - mediainfo=mediainfo, - transferinfo=transferinfo - ) + + # 转移成功 + logger.info(f"{event_path.name} 入库成功:{transferinfo.target_diritem.path}") + # 新增转移成功历史记录 + self.transferhis.add_success( + fileitem=file_item, + mode=dir_info.transfer_type, + download_hash=download_hash, + meta=file_meta, + mediainfo=mediainfo, + transferinfo=transferinfo + ) # TODO 汇总刮削 if dir_info.scraping: @@ -475,7 +475,8 @@ class Monitor(metaclass=Singleton): }) # 发送消息汇总 - self.__collect_msg_medias(mediainfo=mediainfo, file_meta=file_meta, transferinfo=transferinfo) + if dir_info.notify: + self.__collect_msg_medias(mediainfo=mediainfo, file_meta=file_meta, transferinfo=transferinfo) # 移动模式删除空目录 if dir_info.transfer_type in ["move"]: diff --git a/app/schemas/system.py b/app/schemas/system.py index 894466d7..e6caea34 100644 --- a/app/schemas/system.py +++ b/app/schemas/system.py @@ -131,3 +131,5 @@ class TransferDirectoryConf(BaseModel): library_type_folder: Optional[bool] = False # 媒体库类别子目录 library_category_folder: Optional[bool] = False + # 是否发送通知 + notify: Optional[bool] = True From 51f8fc07eb1f905ad5220ab5d437352314c457c5 Mon Sep 17 00:00:00 2001 From: thsrite Date: Wed, 23 Oct 2024 13:24:08 +0800 Subject: [PATCH 2/2] fix transfer notify --- app/chain/transfer.py | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/app/chain/transfer.py b/app/chain/transfer.py index b23c5605..b716a74b 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -138,7 +138,8 @@ class TransferChain(ChainBase): ), target_storage=transfer_dirinfo.library_storage, mediainfo=mediainfo, - download_hash=torrent.hash + download_hash=torrent.hash, + notify=transfer_dirinfo.notify ) # 设置下载任务状态 @@ -154,7 +155,7 @@ class TransferChain(ChainBase): target_path: Path = None, transfer_type: str = None, season: int = None, epformat: EpisodeFormat = None, min_filesize: int = 0, scrape: bool = None, - force: bool = False) -> Tuple[bool, str]: + force: bool = False, notify: bool = True) -> Tuple[bool, str]: """ 执行一个复杂目录的整理操作 :param fileitem: 文件项 @@ -205,15 +206,6 @@ class TransferChain(ChainBase): logger.warn(f"{fileitem.path} 没有找到可整理的媒体文件") return False, f"{fileitem.name} 没有找到可整理的媒体文件" - # 检查目录是否发送通知 - transfer_dirinfo = None - for dir_info in self.directoryhelper.get_download_dirs(): - if not dir_info.download_path: - continue - if fileitem.path.is_relative_to(Path(dir_info.download_path)): - transfer_dirinfo = dir_info - break - # 处理所有待整理目录或文件,默认一个整理路径或文件只有一个媒体信息 for trans_item in trans_items: # 汇总季集清单 @@ -462,7 +454,7 @@ class TransferChain(ChainBase): transfer_meta = metas[mkey] transfer_info = transfers[mkey] # 发送通知 - if transfer_dirinfo and transfer_dirinfo.notify: + if notify: se_str = None if media.type == MediaType.TV: se_str = f"{transfer_meta.season} {StringUtils.format_ep(season_episodes[mkey])}" @@ -627,10 +619,19 @@ class TransferChain(ChainBase): if history.src_fileitem: # 解析源文件对象 fileitem = FileItem(**history.src_fileitem) + # 检查目录是否发送通知 + transfer_dirinfo = None + for dir_info in self.directoryhelper.get_download_dirs(): + if not dir_info.download_path: + continue + if fileitem.path.is_relative_to(Path(dir_info.download_path)): + transfer_dirinfo = dir_info + break state, errmsg = self.__do_transfer(fileitem=fileitem, mediainfo=mediainfo, download_hash=history.download_hash, - force=True) + force=True, + notify=transfer_dirinfo.notify if transfer_dirinfo else False) if not state: return False, errmsg @@ -666,6 +667,15 @@ class TransferChain(ChainBase): """ logger.info(f"手动整理:{fileitem.path} ...") + # 检查目录是否发送通知 + transfer_dirinfo = None + for dir_info in self.directoryhelper.get_download_dirs(): + if not dir_info.download_path: + continue + if fileitem.path.is_relative_to(Path(dir_info.download_path)): + transfer_dirinfo = dir_info + break + if tmdbid or doubanid: # 有输入TMDBID时单个识别 # 识别媒体信息 @@ -691,7 +701,8 @@ class TransferChain(ChainBase): epformat=epformat, min_filesize=min_filesize, scrape=scrape, - force=force + force=force, + notify=transfer_dirinfo.notify if transfer_dirinfo else False ) if not state: return False, errmsg @@ -709,7 +720,8 @@ class TransferChain(ChainBase): epformat=epformat, min_filesize=min_filesize, scrape=scrape, - force=force) + force=force, + notify=transfer_dirinfo.notify if transfer_dirinfo else False) return state, errmsg def send_transfer_message(self, meta: MetaBase, mediainfo: MediaInfo,