fix #2184 手动选择下载/媒体库目录时尝试查找对应的配置并做分类(如果查询不到则不自动分类)
This commit is contained in:
@ -230,15 +230,14 @@ class DownloadChain(ChainBase):
|
|||||||
_folder_name, _file_list = self.torrent.get_torrent_info(torrent_file)
|
_folder_name, _file_list = self.torrent.get_torrent_info(torrent_file)
|
||||||
|
|
||||||
# 下载目录
|
# 下载目录
|
||||||
if not save_path:
|
if save_path:
|
||||||
# 获取下载目录
|
# 有自定义下载目录时,尝试匹配目录配置
|
||||||
|
dir_info = self.directoryhelper.get_download_dir(_media, to_path=Path(save_path))
|
||||||
|
else:
|
||||||
|
# 根据媒体信息查询下载目录配置
|
||||||
dir_info = self.directoryhelper.get_download_dir(_media)
|
dir_info = self.directoryhelper.get_download_dir(_media)
|
||||||
if not dir_info:
|
# 拼装子目录
|
||||||
logger.error(f"未找到下载目录:{_media.type.value} {_media.title_year}")
|
if dir_info:
|
||||||
self.messagehelper.put(f"{_media.type.value} {_media.title_year} 未找到下载目录!",
|
|
||||||
title="下载失败", role="system")
|
|
||||||
return None
|
|
||||||
|
|
||||||
# 一级目录
|
# 一级目录
|
||||||
if not dir_info.media_type and dir_info.auto_category:
|
if not dir_info.media_type and dir_info.auto_category:
|
||||||
# 一级自动分类
|
# 一级自动分类
|
||||||
@ -251,9 +250,15 @@ class DownloadChain(ChainBase):
|
|||||||
if not dir_info.category and dir_info.auto_category and _media and _media.category:
|
if not dir_info.category and dir_info.auto_category and _media and _media.category:
|
||||||
# 二级自动分类
|
# 二级自动分类
|
||||||
download_dir = download_dir / _media.category
|
download_dir = download_dir / _media.category
|
||||||
else:
|
elif save_path:
|
||||||
# 自定义下载目录
|
# 自定义下载目录
|
||||||
download_dir = Path(save_path)
|
download_dir = Path(save_path)
|
||||||
|
else:
|
||||||
|
# 未找到下载目录,且没有自定义下载目录
|
||||||
|
logger.error(f"未找到下载目录:{_media.type.value} {_media.title_year}")
|
||||||
|
self.messagehelper.put(f"{_media.type.value} {_media.title_year} 未找到下载目录!",
|
||||||
|
title="下载失败", role="system")
|
||||||
|
return None
|
||||||
|
|
||||||
# 添加下载
|
# 添加下载
|
||||||
result: Optional[tuple] = self.download(content=content,
|
result: Optional[tuple] = self.download(content=content,
|
||||||
|
@ -35,10 +35,11 @@ class DirectoryHelper:
|
|||||||
return []
|
return []
|
||||||
return [schemas.MediaDirectory(**d) for d in dir_conf]
|
return [schemas.MediaDirectory(**d) for d in dir_conf]
|
||||||
|
|
||||||
def get_download_dir(self, media: MediaInfo = None) -> Optional[schemas.MediaDirectory]:
|
def get_download_dir(self, media: MediaInfo = None, to_path: Path = None) -> Optional[schemas.MediaDirectory]:
|
||||||
"""
|
"""
|
||||||
根据媒体信息获取下载目录
|
根据媒体信息获取下载目录
|
||||||
:param media: 媒体信息
|
:param media: 媒体信息
|
||||||
|
:param to_path: 目标目录
|
||||||
"""
|
"""
|
||||||
# 处理类型
|
# 处理类型
|
||||||
if media:
|
if media:
|
||||||
@ -50,6 +51,9 @@ class DirectoryHelper:
|
|||||||
for media_dir in media_dirs:
|
for media_dir in media_dirs:
|
||||||
if not media_dir.path:
|
if not media_dir.path:
|
||||||
continue
|
continue
|
||||||
|
# 有目标目录,但目标目录与当前目录不相等时不要
|
||||||
|
if to_path and Path(media_dir.path) != to_path:
|
||||||
|
continue
|
||||||
# 目录类型为全部的,符合条件
|
# 目录类型为全部的,符合条件
|
||||||
if not media_dir.media_type:
|
if not media_dir.media_type:
|
||||||
return media_dir
|
return media_dir
|
||||||
@ -62,11 +66,13 @@ class DirectoryHelper:
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_library_dir(self, media: MediaInfo = None, in_path: Path = None) -> Optional[schemas.MediaDirectory]:
|
def get_library_dir(self, media: MediaInfo = None, in_path: Path = None,
|
||||||
|
to_path: Path = None) -> Optional[schemas.MediaDirectory]:
|
||||||
"""
|
"""
|
||||||
根据媒体信息获取媒体库目录,需判断是否同盘优先
|
根据媒体信息获取媒体库目录,需判断是否同盘优先
|
||||||
:param media: 媒体信息
|
:param media: 媒体信息
|
||||||
:param in_path: 源目录
|
:param in_path: 源目录
|
||||||
|
:param to_path: 目标目录
|
||||||
"""
|
"""
|
||||||
# 处理类型
|
# 处理类型
|
||||||
if media:
|
if media:
|
||||||
@ -80,6 +86,9 @@ class DirectoryHelper:
|
|||||||
for library_dir in library_dirs:
|
for library_dir in library_dirs:
|
||||||
if not library_dir.path:
|
if not library_dir.path:
|
||||||
continue
|
continue
|
||||||
|
# 有目标目录,但目标目录与当前目录不相等时不要
|
||||||
|
if to_path and Path(library_dir.path) != to_path:
|
||||||
|
continue
|
||||||
# 目录类型为全部的,符合条件
|
# 目录类型为全部的,符合条件
|
||||||
if not library_dir.media_type:
|
if not library_dir.media_type:
|
||||||
matched_dirs.append(library_dir)
|
matched_dirs.append(library_dir)
|
||||||
|
@ -95,30 +95,36 @@ class FileTransferModule(_ModuleBase):
|
|||||||
:param scrape: 是否刮削元数据
|
:param scrape: 是否刮削元数据
|
||||||
:return: {path, target_path, message}
|
:return: {path, target_path, message}
|
||||||
"""
|
"""
|
||||||
|
# 目标路径不能是文件
|
||||||
|
if target and target.is_file():
|
||||||
|
logger.error(f"转移目标路径是一个文件 {target} 是一个文件")
|
||||||
|
return TransferInfo(success=False,
|
||||||
|
path=path,
|
||||||
|
message=f"{target} 不是有效目录")
|
||||||
# 获取目标路径
|
# 获取目标路径
|
||||||
if not target:
|
directoryhelper = DirectoryHelper()
|
||||||
# 未指定目的目录,选择一个媒体库
|
if target:
|
||||||
dir_info = DirectoryHelper().get_library_dir(mediainfo, in_path=path)
|
dir_info = directoryhelper.get_library_dir(mediainfo, in_path=path, to_path=target)
|
||||||
if not dir_info:
|
else:
|
||||||
logger.error(f"{mediainfo.type.value} {mediainfo.title_year} 未找到有效的媒体库目录,无法转移文件,源路径:{path}")
|
dir_info = directoryhelper.get_library_dir(mediainfo, in_path=path)
|
||||||
return TransferInfo(success=False,
|
if dir_info:
|
||||||
path=path,
|
# 是否需要刮削
|
||||||
message="未找到有效的媒体库目录")
|
|
||||||
# 拼装媒体库一、二级子目录
|
|
||||||
if scrape is None:
|
if scrape is None:
|
||||||
need_scrape = dir_info.scrape
|
need_scrape = dir_info.scrape
|
||||||
else:
|
else:
|
||||||
need_scrape = scrape
|
need_scrape = scrape
|
||||||
|
# 拼装媒体库一、二级子目录
|
||||||
target = self.__get_dest_dir(mediainfo=mediainfo, target_dir=dir_info)
|
target = self.__get_dest_dir(mediainfo=mediainfo, target_dir=dir_info)
|
||||||
else:
|
elif target:
|
||||||
# 指定了目的目录
|
# 自定义目标路径
|
||||||
if target.is_file():
|
|
||||||
logger.error(f"转移目标路径是一个文件 {target} 是一个文件")
|
|
||||||
return TransferInfo(success=False,
|
|
||||||
path=path,
|
|
||||||
message=f"{target} 不是有效目录")
|
|
||||||
# FIXME 指定了目的目录时,拿不到是否需要刮削的配置了
|
|
||||||
need_scrape = False
|
need_scrape = False
|
||||||
|
else:
|
||||||
|
# 未找到有效的媒体库目录
|
||||||
|
logger.error(
|
||||||
|
f"{mediainfo.type.value} {mediainfo.title_year} 未找到有效的媒体库目录,无法转移文件,源路径:{path}")
|
||||||
|
return TransferInfo(success=False,
|
||||||
|
path=path,
|
||||||
|
message="未找到有效的媒体库目录")
|
||||||
|
|
||||||
logger.info(f"获取转移目标路径:{target}")
|
logger.info(f"获取转移目标路径:{target}")
|
||||||
# 转移
|
# 转移
|
||||||
@ -701,21 +707,22 @@ class FileTransferModule(_ModuleBase):
|
|||||||
dest_paths = DirectoryHelper().get_library_dirs()
|
dest_paths = DirectoryHelper().get_library_dirs()
|
||||||
# 检查每一个媒体库目录
|
# 检查每一个媒体库目录
|
||||||
for dest_path in dest_paths:
|
for dest_path in dest_paths:
|
||||||
# 媒体库路径
|
|
||||||
if not dest_path.path:
|
|
||||||
continue
|
|
||||||
# 媒体分类路径
|
# 媒体分类路径
|
||||||
target_dir = self.__get_dest_dir(mediainfo=mediainfo, target_dir=dest_path)
|
target_dir = self.__get_dest_dir(mediainfo=mediainfo, target_dir=dest_path)
|
||||||
|
if not target_dir.exists():
|
||||||
|
continue
|
||||||
|
|
||||||
# 重命名格式
|
# 重命名格式
|
||||||
rename_format = settings.TV_RENAME_FORMAT \
|
rename_format = settings.TV_RENAME_FORMAT \
|
||||||
if mediainfo.type == MediaType.TV else settings.MOVIE_RENAME_FORMAT
|
if mediainfo.type == MediaType.TV else settings.MOVIE_RENAME_FORMAT
|
||||||
# 相对路径
|
# 获取相对路径(重命名路径)
|
||||||
meta = MetaInfo(mediainfo.title)
|
meta = MetaInfo(mediainfo.title)
|
||||||
rel_path = self.get_rename_path(
|
rel_path = self.get_rename_path(
|
||||||
template_string=rename_format,
|
template_string=rename_format,
|
||||||
rename_dict=self.__get_naming_dict(meta=meta,
|
rename_dict=self.__get_naming_dict(meta=meta,
|
||||||
mediainfo=mediainfo)
|
mediainfo=mediainfo)
|
||||||
)
|
)
|
||||||
|
|
||||||
# 取相对路径的第1层目录
|
# 取相对路径的第1层目录
|
||||||
if rel_path.parts:
|
if rel_path.parts:
|
||||||
media_path = target_dir / rel_path.parts[0]
|
media_path = target_dir / rel_path.parts[0]
|
||||||
|
Reference in New Issue
Block a user