fix
This commit is contained in:
@ -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:
|
||||
"""
|
||||
|
@ -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} 个文件,"
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user