diff --git a/app/chain/__init__.py b/app/chain/__init__.py index 280c922d..7338ac33 100644 --- a/app/chain/__init__.py +++ b/app/chain/__init__.py @@ -16,7 +16,6 @@ from app.core.context import MediaInfo, TorrentInfo from app.core.event import EventManager from app.core.meta import MetaBase from app.core.module import ModuleManager -from app.helper.format import FormatParser from app.log import logger from app.schemas import TransferInfo, TransferTorrent, ExistMediaInfo, DownloadingTorrent, CommingMessage, Notification, \ WebhookEventInfo @@ -273,9 +272,7 @@ class ChainBase(metaclass=ABCMeta): return self.run_module("list_torrents", status=status, hashs=hashs) def transfer(self, path: Path, meta: MetaBase, mediainfo: MediaInfo, - transfer_type: str, - target: Path = None, - formater: FormatParser = None) -> Optional[TransferInfo]: + transfer_type: str, target: Path = None) -> Optional[TransferInfo]: """ 文件转移 :param path: 文件路径 @@ -283,12 +280,10 @@ class ChainBase(metaclass=ABCMeta): :param mediainfo: 识别的媒体信息 :param transfer_type: 转移模式 :param target: 转移目标路径 - :param formater: 自定义剧集识别格式 :return: {path, target_path, message} """ return self.run_module("transfer", path=path, meta=meta, mediainfo=mediainfo, - transfer_type=transfer_type, target=target, - formater=formater) + transfer_type=transfer_type, target=target) def transfer_completed(self, hashs: Union[str, list], path: Path = None) -> None: """ diff --git a/app/chain/transfer.py b/app/chain/transfer.py index 77884450..3b4cbd18 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -178,6 +178,16 @@ class TransferChain(ChainBase): err_msgs.append(f"{file_path} 无法识别有效信息") continue + # 自定义识别 + if formaterHandler: + # 开始集、结束集、PART + begin_ep, end_ep, part = formaterHandler.split_episode(file_path.stem) + if begin_ep is not None: + file_meta.begin_episode = begin_ep + file_meta.part = part + if end_ep is not None: + file_meta.end_episode = end_ep + if not mediainfo: # 识别媒体信息 file_mediainfo = self.recognize_media(meta=file_meta) @@ -202,6 +212,28 @@ class TransferChain(ChainBase): logger.info(f"{file_path.name} 识别为:{file_mediainfo.type.value} {file_mediainfo.title_year}") + # 电视剧没有集无法转移 + if file_mediainfo.type == MediaType.TV and not file_meta.episode: + # 转移失败 + logger.warn(f"{file_path.name} 入库失败:未识别到集数") + err_msgs.append(f"{file_path.name} 未识别到集数") + # 新增转移失败历史记录 + self.transferhis.add_fail( + src_path=file_path, + mode=settings.TRANSFER_TYPE, + download_hash=download_hash, + meta=file_meta, + mediainfo=file_mediainfo + ) + # 发送消息 + self.post_message(Notification( + mtype=NotificationType.Manual, + title=f"{file_path.name} 入库失败!", + text=f"原因:未识别到集数", + image=file_mediainfo.get_message_image() + )) + continue + # 更新媒体图片 self.obtain_images(mediainfo=file_mediainfo) @@ -215,8 +247,7 @@ class TransferChain(ChainBase): mediainfo=file_mediainfo, path=file_path, transfer_type=transfer_type, - target=target, - formater=formaterHandler) + target=target) if not transferinfo: logger.error("文件转移模块运行失败") return False, "文件转移模块运行失败" @@ -235,6 +266,7 @@ class TransferChain(ChainBase): ) # 发送消息 self.post_message(Notification( + mtype=NotificationType.Manual, title=f"{file_mediainfo.title_year} {file_meta.season_episode} 入库失败!", text=f"原因:{transferinfo.message or '未知'}", image=file_mediainfo.get_message_image() diff --git a/app/modules/filetransfer/__init__.py b/app/modules/filetransfer/__init__.py index bb4e6b84..64b0e26a 100644 --- a/app/modules/filetransfer/__init__.py +++ b/app/modules/filetransfer/__init__.py @@ -9,7 +9,6 @@ from app.core.config import settings from app.core.context import MediaInfo from app.core.meta import MetaBase from app.core.metainfo import MetaInfo -from app.helper.format import FormatParser from app.log import logger from app.modules import _ModuleBase from app.schemas import TransferInfo @@ -31,8 +30,7 @@ class FileTransferModule(_ModuleBase): pass def transfer(self, path: Path, meta: MetaBase, mediainfo: MediaInfo, - transfer_type: str, target: Path = None, - formater: FormatParser = None) -> TransferInfo: + transfer_type: str, target: Path = None) -> TransferInfo: """ 文件转移 :param path: 文件路径 @@ -40,7 +38,6 @@ class FileTransferModule(_ModuleBase): :param mediainfo: 识别的媒体信息 :param transfer_type: 转移方式 :param target: 目标路径 - :param formater: 集识别格式 :return: {path, target_path, message} """ # 获取目标路径 @@ -54,8 +51,7 @@ class FileTransferModule(_ModuleBase): in_meta=meta, mediainfo=mediainfo, transfer_type=transfer_type, - target_dir=target, - formater=formater) + target_dir=target) @staticmethod def __transfer_command(file_item: Path, target_file: Path, transfer_type: str) -> int: @@ -321,7 +317,6 @@ class FileTransferModule(_ModuleBase): mediainfo: MediaInfo, transfer_type: str, target_dir: Path, - formater: FormatParser = None, ) -> TransferInfo: """ 识别并转移一个文件或者一个目录下的所有文件 @@ -330,7 +325,6 @@ class FileTransferModule(_ModuleBase): :param mediainfo: 媒体信息 :param target_dir: 目的文件夹,非空的转移到该文件夹,为空时则按类型转移到配置文件中的媒体库文件夹 :param transfer_type: 文件转移方式 - :param formater: 识别的剧集格式 :return: TransferInfo、错误信息 """ # 检查目录路径 @@ -396,24 +390,16 @@ class FileTransferModule(_ModuleBase): # 转移单个文件 # 文件结束季为空 in_meta.end_season = None + # 文件总季数为1 if in_meta.total_season: in_meta.total_season = 1 + # 文件不可能有多集 if in_meta.total_episode > 2: in_meta.total_episode = 1 in_meta.end_episode = None - # 自定义识别集数、PART - if formater: - # 开始集、结束集、PART - begin_ep, end_ep, part = formater.split_episode(in_path.stem) - if begin_ep is not None: - in_meta.begin_episode = begin_ep - in_meta.part = part - if end_ep is not None: - in_meta.end_episode = end_ep - # 目的文件名 new_file = self.get_rename_path( path=target_dir,