This commit is contained in:
jxxghp 2024-06-21 08:27:37 +08:00
parent 0133c6e60c
commit 8a98c65026
2 changed files with 267 additions and 248 deletions

View File

@ -46,7 +46,8 @@ def query_name(path: str, filetype: str,
@router.post("/manual", summary="手动转移", response_model=schemas.Response)
def manual_transfer(path: str = None,
def manual_transfer(storage: str = "local",
path: str = None,
logid: int = None,
target: str = None,
tmdbid: int = None,
@ -64,6 +65,7 @@ def manual_transfer(path: str = None,
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
"""
手动转移文件或历史记录支持自定义剧集识别格式
:param storage: 存储类型local/aliyun/u115
:param path: 转移路径或文件
:param logid: 转移历史记录ID
:param target: 目标路径
@ -119,6 +121,7 @@ def manual_transfer(path: str = None,
)
# 开始转移
state, errormsg = transfer.manual_transfer(
storage=storage,
in_path=in_path,
target=target,
tmdbid=tmdbid,

View File

@ -87,8 +87,8 @@ class TransferChain(ChainBase):
mediainfo = None
# 执行转移
self.do_transfer(path=torrent.path, mediainfo=mediainfo,
download_hash=torrent.hash)
self.do_transfer(storage="local", path=torrent.path,
mediainfo=mediainfo, download_hash=torrent.hash)
# 设置下载任务状态
self.transfer_completed(hashs=torrent.hash, path=torrent.path)
@ -96,14 +96,16 @@ class TransferChain(ChainBase):
logger.info("下载器文件转移执行完成")
return True
def do_transfer(self, path: Path, meta: MetaBase = None,
mediainfo: MediaInfo = None, download_hash: str = None,
def do_transfer(self, storage: str, path: Path,
meta: MetaBase = None, mediainfo: MediaInfo = None,
download_hash: str = None,
target: 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]:
"""
执行一个复杂目录的转移操作
:param storage: 存储器
:param path: 待转移目录或文件
:param meta: 元数据
:param mediainfo: 媒体信息
@ -120,20 +122,36 @@ class TransferChain(ChainBase):
if not transfer_type:
transfer_type = settings.TRANSFER_TYPE
# 获取待转移路径清单
trans_paths = self.__get_trans_paths(path)
if not trans_paths:
logger.warn(f"{path.name} 没有找到可转移的媒体文件")
return False, f"{path.name} 没有找到可转移的媒体文件"
# 有集自定义格式
# 自定义格式
formaterHandler = FormatParser(eformat=epformat.format,
details=epformat.detail,
part=epformat.part,
offset=epformat.offset) if epformat else None
# 整理屏蔽词
transfer_exclude_words = self.systemconfig.get(SystemConfigKey.TransferExcludeWords)
# 开始进度
self.progress.start(ProgressKey.FileTransfer)
# 汇总错误信息
err_msgs: List[str] = []
# 总文件数
total_num = 0
# 已处理数量
processed_num = 0
# 失败数量
fail_num = 0
# 跳过数量
skip_num = 0
# 本地存储
if storage == "local":
# 获取待转移路径清单
trans_paths = self.__get_trans_paths(path)
if not trans_paths:
logger.warn(f"{path.name} 没有找到可转移的媒体文件")
return False, f"{path.name} 没有找到可转移的媒体文件"
# 目录所有文件清单
transfer_files = SystemUtils.list_files(directory=path,
extensions=settings.RMT_MEDIAEXT,
@ -142,23 +160,12 @@ class TransferChain(ChainBase):
# 有集自定义格式,过滤文件
transfer_files = [f for f in transfer_files if formaterHandler.match(f.name)]
# 汇总错误信息
err_msgs: List[str] = []
# 总文件数
total_num = len(transfer_files)
# 已处理数量
processed_num = 0
# 失败数量
fail_num = 0
# 跳过数量
skip_num = 0
self.progress.update(value=0,
text=f"开始转移 {path},共 {total_num} 个文件 ...",
key=ProgressKey.FileTransfer)
# 整理屏蔽词
transfer_exclude_words = self.systemconfig.get(SystemConfigKey.TransferExcludeWords)
# 处理所有待转移目录或文件,默认一个转移路径或文件只有一个媒体信息
for trans_path in trans_paths:
# 汇总季集清单
@ -412,6 +419,9 @@ class TransferChain(ChainBase):
'mediainfo': media,
'transferinfo': transfer_info
})
else:
# TODO 网盘整理
pass
# 结束进度
logger.info(f"{path} 转移完成,共 {total_num} 个文件,"
@ -542,7 +552,8 @@ class TransferChain(ChainBase):
self.delete_files(Path(history.dest))
# 强制转移
state, errmsg = self.do_transfer(path=src_path,
state, errmsg = self.do_transfer(storage="local",
path=src_path,
mediainfo=mediainfo,
download_hash=history.download_hash,
force=True)
@ -551,7 +562,9 @@ class TransferChain(ChainBase):
return True, ""
def manual_transfer(self, in_path: Path,
def manual_transfer(self,
storage: str,
in_path: Path,
target: Path = None,
tmdbid: int = None,
doubanid: str = None,
@ -564,6 +577,7 @@ class TransferChain(ChainBase):
force: bool = False) -> Tuple[bool, Union[str, list]]:
"""
手动转移支持复杂条件带进度显示
:param storage: 存储器
:param in_path: 源文件路径
:param target: 目标路径
:param tmdbid: TMDB ID
@ -591,6 +605,7 @@ class TransferChain(ChainBase):
key=ProgressKey.FileTransfer)
# 开始转移
state, errmsg = self.do_transfer(
storage=storage,
path=in_path,
mediainfo=mediainfo,
target=target,
@ -609,7 +624,8 @@ class TransferChain(ChainBase):
return True, ""
else:
# 没有输入TMDBID时按文件识别
state, errmsg = self.do_transfer(path=in_path,
state, errmsg = self.do_transfer(storage=storage,
path=in_path,
target=target,
transfer_type=transfer_type,
season=season,