This commit is contained in:
jxxghp
2023-08-30 23:59:27 +08:00
parent 854fafd880
commit f0666986f0
4 changed files with 41 additions and 24 deletions

View File

@ -16,9 +16,10 @@ 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, EpisodeFormat
WebhookEventInfo
from app.schemas.types import TorrentStatus, MediaType, MediaImageType, EventType
from app.utils.object import ObjectUtils
@ -274,7 +275,7 @@ class ChainBase(metaclass=ABCMeta):
def transfer(self, path: Path, meta: MetaBase, mediainfo: MediaInfo,
transfer_type: str,
target: Path = None,
epformat: EpisodeFormat = None) -> Optional[TransferInfo]:
formater: FormatParser = None) -> Optional[TransferInfo]:
"""
文件转移
:param path: 文件路径
@ -282,12 +283,12 @@ class ChainBase(metaclass=ABCMeta):
:param mediainfo: 识别的媒体信息
:param transfer_type: 转移模式
:param target: 转移目标路径
:param epformat: 自定义剧集识别格式
:param formater: 自定义剧集识别格式
:return: {path, target_path, message}
"""
return self.run_module("transfer", path=path, meta=meta, mediainfo=mediainfo,
transfer_type=transfer_type, target=target,
epformat=epformat)
formater=formater)
def transfer_completed(self, hashs: Union[str, list], path: Path = None) -> None:
"""

View File

@ -16,6 +16,7 @@ from app.db.downloadhistory_oper import DownloadHistoryOper
from app.db.models.downloadhistory import DownloadHistory
from app.db.models.transferhistory import TransferHistory
from app.db.transferhistory_oper import TransferHistoryOper
from app.helper.format import FormatParser
from app.helper.progress import ProgressHelper
from app.log import logger
from app.schemas import TransferInfo, TransferTorrent, Notification, EpisodeFormat
@ -122,12 +123,22 @@ class TransferChain(ChainBase):
# 汇总转移信息
transfers = {}
# 有集自定义格式
formaterHandler = FormatParser(eformat=epformat.format,
details=epformat.detail,
part=epformat.part,
offset=epformat.offset) if epformat else None
# 开始进度
self.progress.start(ProgressKey.FileTransfer)
# 总数
transfer_files = SystemUtils.list_files(directory=path,
extensions=settings.RMT_MEDIAEXT,
min_filesize=min_filesize)
if formaterHandler:
# 有集自定义格式,过滤文件
transfer_files = [f for f in transfer_files if formaterHandler.match(f.name)]
# 总数
total_num = len(transfer_files)
# 已处理数量
processed_num = 0
@ -147,6 +158,10 @@ class TransferChain(ChainBase):
else:
file_paths = [trans_path]
if formaterHandler:
# 有集自定义格式,过滤文件
file_paths = [f for f in file_paths if formaterHandler.match(f.name)]
# 转移所有文件
for file_path in file_paths:
# 回收站及隐藏的文件不处理
@ -209,7 +224,7 @@ class TransferChain(ChainBase):
path=file_path,
transfer_type=transfer_type,
target=target,
epformat=epformat)
formater=formaterHandler)
if not transferinfo:
logger.error("文件转移模块运行失败")
return False, "文件转移模块运行失败"
@ -245,6 +260,13 @@ class TransferChain(ChainBase):
metas[file_mediainfo.tmdb_id].begin_episode = file_meta.begin_episode
if (metas[file_mediainfo.tmdb_id].end_episode or 0) < (file_meta.end_episode or 0):
metas[file_mediainfo.tmdb_id].end_episode = file_meta.end_episode
metas[file_mediainfo.tmdb_id].total_episode += file_meta.total_episode
# 合并元数据季度
if (metas[file_mediainfo.tmdb_id].begin_season or 0) > (file_meta.begin_season or 0):
metas[file_mediainfo.tmdb_id].begin_season = file_meta.begin_season
if (metas[file_mediainfo.tmdb_id].end_season or 0) < (file_meta.end_season or 0):
metas[file_mediainfo.tmdb_id].end_season = file_meta.end_season
metas[file_mediainfo.tmdb_id].total_season += file_meta.total_season
# 合并转移
transfers[file_mediainfo.tmdb_id].file_count += transferinfo.file_count
transfers[file_mediainfo.tmdb_id].file_list.extend(transferinfo.file_list)
@ -281,7 +303,7 @@ class TransferChain(ChainBase):
self.scrape_metadata(path=transfers[tmdbid].target_path, mediainfo=media)
# 发送通知
self.send_transfer_message(meta=metas[tmdbid],
mediainfo=mediainfo,
mediainfo=media,
transferinfo=transfers[tmdbid])
# 结束进度
logger.info(f"{path} 转移完成,共 {total_num} 个文件,"

View File

@ -5,16 +5,16 @@ from typing import Optional, List, Tuple, Union
from jinja2 import Template
from app.core.context import MediaInfo
from app.core.metainfo import MetaInfo
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.modules.filetransfer.format_parser import FormatParser
from app.schemas import TransferInfo, EpisodeFormat
from app.utils.system import SystemUtils
from app.schemas import TransferInfo
from app.schemas.types import MediaType
from app.utils.system import SystemUtils
lock = Lock()
@ -32,7 +32,7 @@ class FileTransferModule(_ModuleBase):
def transfer(self, path: Path, meta: MetaBase, mediainfo: MediaInfo,
transfer_type: str, target: Path = None,
epformat: EpisodeFormat = None) -> TransferInfo:
formater: FormatParser = None) -> TransferInfo:
"""
文件转移
:param path: 文件路径
@ -40,7 +40,7 @@ class FileTransferModule(_ModuleBase):
:param mediainfo: 识别的媒体信息
:param transfer_type: 转移方式
:param target: 目标路径
:param epformat: 集识别格式
:param formater: 集识别格式
:return: {path, target_path, message}
"""
# 获取目标路径
@ -55,7 +55,7 @@ class FileTransferModule(_ModuleBase):
mediainfo=mediainfo,
transfer_type=transfer_type,
target_dir=target,
epformat=epformat)
formater=formater)
@staticmethod
def __transfer_command(file_item: Path, target_file: Path, transfer_type: str) -> int:
@ -321,7 +321,7 @@ class FileTransferModule(_ModuleBase):
mediainfo: MediaInfo,
transfer_type: str,
target_dir: Path,
epformat: EpisodeFormat = None,
formater: FormatParser = None,
) -> TransferInfo:
"""
识别并转移一个文件或者一个目录下的所有文件
@ -330,7 +330,7 @@ class FileTransferModule(_ModuleBase):
:param mediainfo: 媒体信息
:param target_dir: 目的文件夹,非空的转移到该文件夹,为空时则按类型转移到配置文件中的媒体库文件夹
:param transfer_type: 文件转移方式
:param epformat: 识别的剧集格式
:param formater: 识别的剧集格式
:return: TransferInfo、错误信息
"""
# 检查目录路径
@ -404,16 +404,10 @@ class FileTransferModule(_ModuleBase):
in_meta.total_episode = 1
in_meta.end_episode = None
# 有集自定义格式
formaterHandler = FormatParser(eformat=epformat.format,
details=epformat.detail,
part=epformat.part,
offset=epformat.offset) if epformat else None
# 自定义识别集数、PART
if formaterHandler:
if formater:
# 开始集、结束集、PART
begin_ep, end_ep, part = formaterHandler.split_episode(in_path.stem)
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