fix
This commit is contained in:
parent
38eff64c95
commit
c372d0451e
@ -88,13 +88,25 @@ class TransferChain(ChainBase):
|
|||||||
logger.info("下载器文件转移执行完成")
|
logger.info("下载器文件转移执行完成")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def do_transfer(self, path: Path, meta: MetaBase,
|
def do_transfer(self, path: Path, meta: MetaBase = None,
|
||||||
mediainfo: MediaInfo, download_hash: str = None,
|
mediainfo: MediaInfo = None, download_hash: str = None,
|
||||||
target: Path = None, epformat: EpisodeFormat = None) -> Tuple[bool, str]:
|
target: Path = None, transfer_type: str = None,
|
||||||
|
epformat: EpisodeFormat = None, min_filesize: int = None) -> Tuple[bool, str]:
|
||||||
"""
|
"""
|
||||||
执行一个复杂目录的转移操作
|
执行一个复杂目录的转移操作
|
||||||
|
:param path: 待转移目录或文件
|
||||||
|
:param meta: 元数据
|
||||||
|
:param mediainfo: 媒体信息
|
||||||
|
:param download_hash: 下载记录hash
|
||||||
|
:param target: 目标路径
|
||||||
|
:param transfer_type: 转移类型
|
||||||
|
:param epformat: 剧集格式
|
||||||
|
:param min_filesize: 最小文件大小(MB)
|
||||||
返回:成功标识,错误信息
|
返回:成功标识,错误信息
|
||||||
"""
|
"""
|
||||||
|
if not transfer_type:
|
||||||
|
transfer_type = settings.TRANSFER_TYPE
|
||||||
|
|
||||||
# 获取待转移路径清单
|
# 获取待转移路径清单
|
||||||
trans_paths = self.__get_trans_paths(path)
|
trans_paths = self.__get_trans_paths(path)
|
||||||
if not trans_paths:
|
if not trans_paths:
|
||||||
@ -103,6 +115,23 @@ class TransferChain(ChainBase):
|
|||||||
|
|
||||||
# 汇总错误信息
|
# 汇总错误信息
|
||||||
err_msgs = []
|
err_msgs = []
|
||||||
|
# 汇总媒体信息
|
||||||
|
medias = {}
|
||||||
|
# 汇总转移信息
|
||||||
|
transfers = {}
|
||||||
|
|
||||||
|
# 开始进度
|
||||||
|
self.progress.start(ProgressKey.FileTransfer)
|
||||||
|
# 总数
|
||||||
|
transfer_files = SystemUtils.list_files(directory=path,
|
||||||
|
extensions=settings.RMT_MEDIAEXT,
|
||||||
|
min_filesize=min_filesize)
|
||||||
|
total_num = len(transfer_files)
|
||||||
|
# 已处理数量
|
||||||
|
processed_num = 0
|
||||||
|
self.progress.update(value=0,
|
||||||
|
text=f"开始转移 {path},共 {total_num} 个文件 ...",
|
||||||
|
key=ProgressKey.FileTransfer)
|
||||||
|
|
||||||
# 处理所有待转移目录或文件,默认一个转移路径或文件只有一个媒体信息
|
# 处理所有待转移目录或文件,默认一个转移路径或文件只有一个媒体信息
|
||||||
for trans_path in trans_paths:
|
for trans_path in trans_paths:
|
||||||
@ -110,7 +139,8 @@ class TransferChain(ChainBase):
|
|||||||
if trans_path.is_dir():
|
if trans_path.is_dir():
|
||||||
# 遍历获取下载目录所有文件
|
# 遍历获取下载目录所有文件
|
||||||
file_paths = SystemUtils.list_files(directory=trans_path,
|
file_paths = SystemUtils.list_files(directory=trans_path,
|
||||||
extensions=settings.RMT_MEDIAEXT)
|
extensions=settings.RMT_MEDIAEXT,
|
||||||
|
min_filesize=min_filesize)
|
||||||
else:
|
else:
|
||||||
file_paths = [trans_path]
|
file_paths = [trans_path]
|
||||||
|
|
||||||
@ -165,11 +195,16 @@ class TransferChain(ChainBase):
|
|||||||
|
|
||||||
# 更新媒体图片
|
# 更新媒体图片
|
||||||
self.obtain_images(mediainfo=file_mediainfo)
|
self.obtain_images(mediainfo=file_mediainfo)
|
||||||
|
|
||||||
|
if not download_hash:
|
||||||
|
# TODO 查找下载记录 download_hash
|
||||||
|
pass
|
||||||
|
|
||||||
# 执行转移
|
# 执行转移
|
||||||
transferinfo: TransferInfo = self.transfer(meta=file_meta,
|
transferinfo: TransferInfo = self.transfer(meta=file_meta,
|
||||||
mediainfo=file_mediainfo,
|
mediainfo=file_mediainfo,
|
||||||
path=file_path,
|
path=file_path,
|
||||||
transfer_type=settings.TRANSFER_TYPE,
|
transfer_type=transfer_type,
|
||||||
target=target,
|
target=target,
|
||||||
epformat=epformat)
|
epformat=epformat)
|
||||||
if not transferinfo:
|
if not transferinfo:
|
||||||
@ -195,6 +230,19 @@ class TransferChain(ChainBase):
|
|||||||
))
|
))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# 汇总信息
|
||||||
|
if file_mediainfo.tmdb_id not in medias:
|
||||||
|
# 新增信息
|
||||||
|
medias[file_mediainfo.tmdb_id] = file_mediainfo
|
||||||
|
transfers[file_mediainfo.tmdb_id] = transferinfo
|
||||||
|
else:
|
||||||
|
# 合并信息
|
||||||
|
transfers[file_mediainfo.tmdb_id].file_count += transferinfo.file_count
|
||||||
|
transfers[file_mediainfo.tmdb_id].file_list.extend(transferinfo.file_list)
|
||||||
|
transfers[file_mediainfo.tmdb_id].file_list_new.extend(transferinfo.file_list_new)
|
||||||
|
transfers[file_mediainfo.tmdb_id].fail_list.extend(transferinfo.fail_list)
|
||||||
|
transfers[file_mediainfo.tmdb_id].total_size += transferinfo.total_size
|
||||||
|
|
||||||
# 新增转移成功历史记录
|
# 新增转移成功历史记录
|
||||||
self.__insert_sucess_history(
|
self.__insert_sucess_history(
|
||||||
src_path=file_path,
|
src_path=file_path,
|
||||||
@ -204,21 +252,32 @@ class TransferChain(ChainBase):
|
|||||||
transferinfo=transferinfo
|
transferinfo=transferinfo
|
||||||
)
|
)
|
||||||
|
|
||||||
# 刷新媒体库
|
|
||||||
self.refresh_mediaserver(mediainfo=file_mediainfo, file_path=transferinfo.target_path)
|
|
||||||
|
|
||||||
# 广播事件
|
# 广播事件
|
||||||
self.eventmanager.send_event(EventType.TransferComplete, {
|
self.eventmanager.send_event(EventType.TransferComplete, {
|
||||||
'meta': file_meta,
|
'meta': file_meta,
|
||||||
'mediainfo': file_mediainfo,
|
'mediainfo': file_mediainfo,
|
||||||
'transferinfo': transferinfo
|
'transferinfo': transferinfo
|
||||||
})
|
})
|
||||||
|
# 更新进度
|
||||||
|
processed_num += 1
|
||||||
|
self.progress.update(value=processed_num / total_num * 100,
|
||||||
|
text=f"{file_path.name} 转移完成",
|
||||||
|
key=ProgressKey.FileTransfer)
|
||||||
|
|
||||||
# 目录或文件转移完成
|
# 目录或文件转移完成
|
||||||
# FIXME 汇总刮削元数据
|
for tmdbid, media in medias.items():
|
||||||
self.scrape_metadata(path=trans_path, mediainfo=file_mediainfo)
|
# 刷新媒体库
|
||||||
# FIXME 汇总发送通知
|
self.refresh_mediaserver(mediainfo=media, file_path=transfers[tmdbid].target_path)
|
||||||
self.send_transfer_message(meta=meta, mediainfo=mediainfo, transferinfo=transferinfo)
|
# 刮削
|
||||||
|
self.scrape_metadata(path=transfers[tmdbid].target_path, mediainfo=media)
|
||||||
|
# 发送通知
|
||||||
|
self.send_transfer_message(meta=meta,
|
||||||
|
mediainfo=mediainfo,
|
||||||
|
transferinfo=transfers[tmdbid])
|
||||||
|
# 结束进度
|
||||||
|
logger.info(f"{path} 转移完成,共 {total_num} 个文件,"
|
||||||
|
f"成功 {total_num - len(err_msgs)} 个,失败 {len(err_msgs)} 个")
|
||||||
|
self.progress.end(ProgressKey.FileTransfer)
|
||||||
|
|
||||||
return True, "\n".join(err_msgs)
|
return True, "\n".join(err_msgs)
|
||||||
|
|
||||||
@ -351,7 +410,7 @@ class TransferChain(ChainBase):
|
|||||||
epformat: EpisodeFormat = None,
|
epformat: EpisodeFormat = None,
|
||||||
min_filesize: int = 0) -> Tuple[bool, Union[str, list]]:
|
min_filesize: int = 0) -> Tuple[bool, Union[str, list]]:
|
||||||
"""
|
"""
|
||||||
FIXME 手动转移
|
手动转移
|
||||||
:param in_path: 源文件路径
|
:param in_path: 源文件路径
|
||||||
:param target: 目标路径
|
:param target: 目标路径
|
||||||
:param tmdbid: TMDB ID
|
:param tmdbid: TMDB ID
|
||||||
@ -363,10 +422,6 @@ class TransferChain(ChainBase):
|
|||||||
"""
|
"""
|
||||||
logger.info(f"手动转移:{in_path} ...")
|
logger.info(f"手动转移:{in_path} ...")
|
||||||
|
|
||||||
# 默认转移类型
|
|
||||||
if not transfer_type:
|
|
||||||
transfer_type = settings.TRANSFER_TYPE
|
|
||||||
|
|
||||||
if tmdbid:
|
if tmdbid:
|
||||||
# 有输入TMDBID时单个识别
|
# 有输入TMDBID时单个识别
|
||||||
meta = MetaInfo(in_path.stem)
|
meta = MetaInfo(in_path.stem)
|
||||||
@ -385,14 +440,13 @@ class TransferChain(ChainBase):
|
|||||||
text=f"开始转移 {in_path} ...",
|
text=f"开始转移 {in_path} ...",
|
||||||
key=ProgressKey.FileTransfer)
|
key=ProgressKey.FileTransfer)
|
||||||
# 开始转移
|
# 开始转移
|
||||||
# FIXME 查找下载记录 download_hash
|
|
||||||
state, errmsg = self.do_transfer(
|
state, errmsg = self.do_transfer(
|
||||||
path=in_path,
|
path=in_path,
|
||||||
meta=meta,
|
meta=meta,
|
||||||
mediainfo=mediainfo,
|
mediainfo=mediainfo,
|
||||||
target=target,
|
target=target,
|
||||||
epformat=epformat,
|
epformat=epformat,
|
||||||
download_hash=None
|
min_filesize=min_filesize
|
||||||
)
|
)
|
||||||
if not state:
|
if not state:
|
||||||
return False, errmsg
|
return False, errmsg
|
||||||
@ -401,112 +455,13 @@ class TransferChain(ChainBase):
|
|||||||
logger.info(f"{in_path} 转移完成")
|
logger.info(f"{in_path} 转移完成")
|
||||||
return True, ""
|
return True, ""
|
||||||
else:
|
else:
|
||||||
# FIXME
|
# 没有输入TMDBID时,按文件识别
|
||||||
# 错误信息
|
state, errmsg = self.do_transfer(path=in_path,
|
||||||
errmsgs = []
|
target=target,
|
||||||
# 自动识别所有文件
|
transfer_type=transfer_type,
|
||||||
transfer_files = SystemUtils.list_files(directory=in_path,
|
epformat=epformat,
|
||||||
extensions=settings.RMT_MEDIAEXT,
|
min_filesize=min_filesize)
|
||||||
min_filesize=min_filesize)
|
return state, errmsg
|
||||||
if not transfer_files:
|
|
||||||
return False, "没有找到可转移的文件"
|
|
||||||
# 开始进度
|
|
||||||
self.progress.start(ProgressKey.FileTransfer)
|
|
||||||
# 总数
|
|
||||||
total_num = len(transfer_files)
|
|
||||||
# 已处理数量
|
|
||||||
processed_num = 0
|
|
||||||
self.progress.update(value=0,
|
|
||||||
text=f"开始转移 {in_path},共 {total_num} 个文件 ...",
|
|
||||||
key=ProgressKey.FileTransfer)
|
|
||||||
for transfer_file in transfer_files:
|
|
||||||
# 更新进度
|
|
||||||
self.progress.update(value=processed_num / total_num * 100,
|
|
||||||
text=f"正在转移 {transfer_file.name} ...",
|
|
||||||
key=ProgressKey.FileTransfer)
|
|
||||||
# 上级目录元数据
|
|
||||||
meta = MetaInfo(title=transfer_file.parent.name)
|
|
||||||
# 文件元数据,不包含后缀
|
|
||||||
file_meta = MetaInfo(title=transfer_file.stem)
|
|
||||||
# 合并元数据
|
|
||||||
file_meta.merge(meta)
|
|
||||||
|
|
||||||
if not file_meta.name:
|
|
||||||
logger.error(f"{transfer_file} 无法识别有效信息")
|
|
||||||
errmsgs.append(f"{transfer_file.name} 无法识别有效信息")
|
|
||||||
# 更新进度
|
|
||||||
processed_num += 1
|
|
||||||
self.progress.update(value=processed_num / total_num * 100,
|
|
||||||
text=f"{transfer_file.name} 无法识别有效信息",
|
|
||||||
key=ProgressKey.FileTransfer)
|
|
||||||
continue
|
|
||||||
# 整合数据
|
|
||||||
if mtype:
|
|
||||||
file_meta.type = mtype
|
|
||||||
if season:
|
|
||||||
file_meta.begin_season = season
|
|
||||||
# 识别媒体信息
|
|
||||||
mediainfo: MediaInfo = self.mediachain.recognize_media(meta=file_meta)
|
|
||||||
if not mediainfo:
|
|
||||||
logger.error(f"{transfer_file} 媒体信息识别失败")
|
|
||||||
errmsgs.append(f"{transfer_file.name} 媒体信息识别失败")
|
|
||||||
# 更新进度
|
|
||||||
processed_num += 1
|
|
||||||
self.progress.update(value=processed_num / total_num * 100,
|
|
||||||
text=f"{transfer_file.name} 媒体信息识别失败!",
|
|
||||||
key=ProgressKey.FileTransfer)
|
|
||||||
continue
|
|
||||||
# 开始转移
|
|
||||||
transferinfo: TransferInfo = self.transfer(
|
|
||||||
path=in_path,
|
|
||||||
mediainfo=mediainfo,
|
|
||||||
transfer_type=transfer_type,
|
|
||||||
target=target,
|
|
||||||
meta=file_meta,
|
|
||||||
epformat=epformat
|
|
||||||
)
|
|
||||||
if not transferinfo:
|
|
||||||
return False, "文件转移模块运行失败"
|
|
||||||
if not transferinfo.target_path:
|
|
||||||
logger.error(f"{transfer_file} 转移失败:{transferinfo.message}")
|
|
||||||
errmsgs.append(f"{transfer_file.name} 转移失败:{transferinfo.message}")
|
|
||||||
# 更新进度
|
|
||||||
processed_num += 1
|
|
||||||
self.progress.update(value=processed_num / total_num * 100,
|
|
||||||
text=f"{transfer_file.name} 转移失败:{transferinfo.message}",
|
|
||||||
key=ProgressKey.FileTransfer)
|
|
||||||
continue
|
|
||||||
|
|
||||||
# 新增转移成功历史记录
|
|
||||||
self.__insert_sucess_history(
|
|
||||||
src_path=transfer_file,
|
|
||||||
meta=file_meta,
|
|
||||||
mediainfo=mediainfo,
|
|
||||||
transferinfo=transferinfo
|
|
||||||
)
|
|
||||||
# 刮削元数据
|
|
||||||
self.scrape_metadata(path=transferinfo.target_path, mediainfo=mediainfo)
|
|
||||||
# 刷新媒体库
|
|
||||||
self.refresh_mediaserver(mediainfo=mediainfo, file_path=transferinfo.target_path)
|
|
||||||
# 发送通知
|
|
||||||
self.send_transfer_message(meta=file_meta, mediainfo=mediainfo, transferinfo=transferinfo)
|
|
||||||
# 广播事件
|
|
||||||
self.eventmanager.send_event(EventType.TransferComplete, {
|
|
||||||
'meta': file_meta,
|
|
||||||
'mediainfo': mediainfo,
|
|
||||||
'transferinfo': transferinfo
|
|
||||||
})
|
|
||||||
# 更新进度
|
|
||||||
processed_num += 1
|
|
||||||
self.progress.update(value=processed_num / total_num * 100,
|
|
||||||
text=f"{transfer_file.name} 转移完成",
|
|
||||||
key=ProgressKey.FileTransfer)
|
|
||||||
# 结束进度
|
|
||||||
logger.info(f"转移完成,共 {total_num} 个文件,成功 {total_num - len(errmsgs)} 个,失败 {len(errmsgs)} 个")
|
|
||||||
self.progress.end(ProgressKey.FileTransfer)
|
|
||||||
if errmsgs:
|
|
||||||
return False, errmsgs
|
|
||||||
return True, ""
|
|
||||||
|
|
||||||
def __insert_sucess_history(self, src_path: Path, meta: MetaBase,
|
def __insert_sucess_history(self, src_path: Path, meta: MetaBase,
|
||||||
mediainfo: MediaInfo, transferinfo: TransferInfo,
|
mediainfo: MediaInfo, transferinfo: TransferInfo,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user