fix 文件转移支持部分成功

This commit is contained in:
jxxghp
2023-06-16 16:23:13 +08:00
parent 4936ae4631
commit efac3aa24d
3 changed files with 69 additions and 27 deletions

View File

@ -39,14 +39,23 @@ class FileTransferModule(_ModuleBase):
if not settings.LIBRARY_PATH:
logger.error("未设置媒体库目录,无法转移文件")
return None
target_path, msg = self.transfer_media(in_path=path,
meidainfo=mediainfo,
rmt_mode=settings.TRANSFER_TYPE,
target_dir=Path(settings.LIBRARY_PATH))
if not path:
logger.error(msg)
return TransferInfo(path=path, target_path=target_path, message=msg)
result = self.transfer_media(in_path=path,
meidainfo=mediainfo,
rmt_mode=settings.TRANSFER_TYPE,
target_dir=Path(settings.LIBRARY_PATH))
if not result:
return TransferInfo()
if isinstance(result, str):
return TransferInfo(message=result)
# 解包结果
target_path, file_count, file_size, fail_list, msg = result
# 返回
return TransferInfo(path=path,
target_path=target_path,
message=msg,
file_count=file_count,
file_size=file_size,
fail_list=fail_list)
@staticmethod
def __transfer_command(file_item: Path, target_file: Path, rmt_mode) -> int:
@ -321,21 +330,21 @@ class FileTransferModule(_ModuleBase):
meidainfo: MediaInfo,
rmt_mode: str = None,
target_dir: Path = None
) -> Tuple[Optional[Path], str]:
) -> Union[str, Tuple[Path, int, int, List[Path], str]]:
"""
识别并转移一个文件、多个文件或者目录
:param in_path: 转移的路径,可能是一个文件也可以是一个目录
:param target_dir: 目的文件夹,非空的转移到该文件夹,为空时则按类型转移到配置文件中的媒体库文件夹
:param rmt_mode: 文件转移方式
:param meidainfo: 媒体信息
:return: 处理状态,错误信息
:return: 目的路径、处理文件数、总大小、失败文件列表、错误信息
"""
# 检查目录路径
if not in_path.exists():
return None, f"{in_path} 路径不存在"
return f"{in_path} 路径不存在"
if not target_dir.exists():
return None, f"{target_dir} 目标路径不存在"
return f"{target_dir} 目标路径不存在"
# 目的目录加上类型和二级分类
target_dir = target_dir / meidainfo.type.value / meidainfo.category
@ -344,6 +353,18 @@ class FileTransferModule(_ModuleBase):
rename_format = settings.TV_RENAME_FORMAT \
if meidainfo.type == MediaType.TV else settings.MOVIE_RENAME_FORMAT
# 总大小
total_filesize = 0
# 处理文件数
total_num = 0
# 失败文件清单
fail_list = []
# 错误信息
err_msgs = []
# 判断是否为蓝光原盘
bluray_flag = self.__is_bluray_dir(in_path)
if bluray_flag:
@ -361,15 +382,19 @@ class FileTransferModule(_ModuleBase):
new_path=new_path,
rmt_mode=rmt_mode)
if retcode != 0:
return None, f"{retcode},蓝光原盘转移失败"
return f"{retcode},蓝光原盘转移失败"
else:
# 计算文件数
total_filesize += 1
# 计算大小
total_filesize += in_path.stat().st_size
# 返回转移后的路径
return new_path, ""
return new_path, total_filesize, total_filesize, [], ""
else:
# 获取文件清单
transfer_files: List[Path] = SystemUtils.list_files_with_extensions(in_path, settings.RMT_MEDIAEXT)
if len(transfer_files) == 0:
return None, f"{in_path} 目录下没有找到可转移的文件"
return f"{in_path} 目录下没有找到可转移的文件"
# 识别目录名称,不包括后缀
meta = MetaInfo(in_path.stem)
# 目的路径
@ -422,11 +447,25 @@ class FileTransferModule(_ModuleBase):
rmt_mode=rmt_mode,
over_flag=overflag)
if retcode != 0:
return None, f"{retcode},文件转移失败"
logger.error(f"{transfer_file} 转移文件失败,错误码:{retcode}")
err_msgs.append(f"{transfer_file.name}:错误码 {retcode}")
fail_list.append(transfer_file)
continue
# 计算文件数
total_filesize += 1
# 计算大小
total_filesize += transfer_file.stat().st_size
except Exception as err:
return None, f"{err}"
err_msgs.append(f"{transfer_file.name}{err}")
logger.error(f"{transfer_file}转移失败:{err}")
fail_list.append(transfer_file)
return new_path, ""
if total_num == 0:
# 没有成功的
return "\n".join(err_msgs)
# 新路径、处理文件数、总大小、失败文件列表、错误信息
return new_path, total_num, total_filesize, fail_list, "\n".join(err_msgs)
@staticmethod
def __get_naming_dict(meta: MetaBase, mediainfo: MediaInfo, file_ext: str = None) -> dict: