diff --git a/app/chain/transfer.py b/app/chain/transfer.py index 80420eed..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: 文件项 @@ -240,7 +241,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 +454,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 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, { @@ -617,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 @@ -656,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时单个识别 # 识别媒体信息 @@ -681,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 @@ -699,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, 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