feat 电视剧无法识别集时发送消息

This commit is contained in:
jxxghp 2023-09-02 21:38:01 +08:00
parent 59b947fa65
commit 52e89747b7
3 changed files with 40 additions and 27 deletions

View File

@ -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:
"""

View File

@ -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()

View File

@ -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,