- 目录监控、手动整理等不指定目的目录时,不再强制创建一级分类目录,根据开关判定是否创建二级分类目录

This commit is contained in:
jxxghp 2023-12-11 17:24:34 +08:00
parent 14a8f44f8c
commit 7d7539df4c
3 changed files with 36 additions and 24 deletions

View File

@ -187,11 +187,11 @@ class Settings(BaseSettings):
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57" USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57"
# 媒体库目录,多个目录使用,分隔 # 媒体库目录,多个目录使用,分隔
LIBRARY_PATH: str = None LIBRARY_PATH: str = None
# 电影媒体库目录名,默认"电影" # 电影媒体库目录名
LIBRARY_MOVIE_NAME: str = None LIBRARY_MOVIE_NAME: str = "电影"
# 电视剧媒体库目录名,默认"电视剧" # 电视剧媒体库目录名
LIBRARY_TV_NAME: str = None LIBRARY_TV_NAME: str = "电视剧"
# 动漫媒体库目录名,默认"电视剧/动漫" # 动漫媒体库目录名,不设置时使用电视剧目录
LIBRARY_ANIME_NAME: str = None LIBRARY_ANIME_NAME: str = None
# 二级分类 # 二级分类
LIBRARY_CATEGORY: bool = True LIBRARY_CATEGORY: bool = True

View File

@ -45,15 +45,20 @@ class FileTransferModule(_ModuleBase):
""" """
# 获取目标路径 # 获取目标路径
if not target: if not target:
# 根据源目录选择一个媒体库 # 未指定目的目录,根据源目录选择一个媒体库
target = self.get_target_path(in_path=path) target = self.get_target_path(in_path=path)
# 拼装媒体库一、二级子目录 # 拼装媒体库一、二级子目录
target = self.__get_dest_dir(mediainfo=mediainfo, target_dir=target) target = self.__get_dest_dir(mediainfo=mediainfo, target_dir=target)
elif not target.exists() or target.is_file(): else:
# 根据目的目录选择一个媒体库 # 指定了目的目录
target = self.get_library_path(target) if not target.exists():
# 拼装媒体库一、二级子目录 # 指定目的目录不存在,创建目录
target = self.__get_dest_dir(mediainfo=mediainfo, target_dir=target) target.mkdir(parents=True, exist_ok=True)
elif target.is_file():
# 指定目录是个文件,提取文件的有效目录
target = target.parent
# 只拼装二级子目录(不要一级目录)
target = self.__get_dest_dir(mediainfo=mediainfo, target_dir=target, typename_dir=False)
if not target: if not target:
logger.error("未找到媒体库目录,无法转移文件") logger.error("未找到媒体库目录,无法转移文件")
@ -340,35 +345,42 @@ class FileTransferModule(_ModuleBase):
over_flag=over_flag) over_flag=over_flag)
@staticmethod @staticmethod
def __get_dest_dir(mediainfo: MediaInfo, target_dir: Path) -> Path: def __get_dest_dir(mediainfo: MediaInfo, target_dir: Path, typename_dir: bool = True) -> Path:
""" """
根据设置并装媒体库目录 根据设置并装媒体库目录
:param mediainfo: 媒体信息 :param mediainfo: 媒体信息
:target_dir: 媒体库根目录 :target_dir: 媒体库根目录
:typename_dir: 是否加上类型目录
""" """
if not target_dir: if not target_dir:
return target_dir return target_dir
if mediainfo.type == MediaType.MOVIE: if mediainfo.type == MediaType.MOVIE:
# 电影 # 电影
if settings.LIBRARY_MOVIE_NAME: if typename_dir:
# 目的目录加上类型和二级分类
target_dir = target_dir / settings.LIBRARY_MOVIE_NAME / mediainfo.category target_dir = target_dir / settings.LIBRARY_MOVIE_NAME / mediainfo.category
else: else:
# 目的目录加上类型和二级分类 # 目的目录加上二级分类
target_dir = target_dir / mediainfo.type.value / mediainfo.category target_dir = target_dir / mediainfo.category
if mediainfo.type == MediaType.TV: if mediainfo.type == MediaType.TV:
# 电视剧 # 电视剧
if settings.LIBRARY_ANIME_NAME \ if mediainfo.genre_ids \
and mediainfo.genre_ids \
and set(mediainfo.genre_ids).intersection(set(settings.ANIME_GENREIDS)): and set(mediainfo.genre_ids).intersection(set(settings.ANIME_GENREIDS)):
# 动漫 # 动漫
target_dir = target_dir / settings.LIBRARY_ANIME_NAME / mediainfo.category if typename_dir:
elif settings.LIBRARY_TV_NAME: target_dir = target_dir / (settings.LIBRARY_ANIME_NAME
# 电视剧 or settings.LIBRARY_TV_NAME) / mediainfo.category
target_dir = target_dir / settings.LIBRARY_TV_NAME / mediainfo.category else:
target_dir = target_dir / mediainfo.category
else: else:
# 目的目录加上类型和二级分类 # 电视剧
target_dir = target_dir / mediainfo.type.value / mediainfo.category if typename_dir:
target_dir = target_dir / settings.LIBRARY_TV_NAME / mediainfo.category
else:
target_dir = target_dir / mediainfo.category
return target_dir return target_dir
def transfer_media(self, def transfer_media(self,

View File

@ -1 +1 @@
APP_VERSION = 'v1.5.0' APP_VERSION = 'v1.5.1'