新增选项兼容Jellyfin封面图文件名规则

This commit is contained in:
lededev
2022-04-24 00:54:05 +08:00
parent 6a45b6057a
commit 41d214f391
3 changed files with 48 additions and 0 deletions

View File

@@ -128,3 +128,6 @@ locations_model=hog
uncensored_only=1 uncensored_only=1
aways_imagecut=0 aways_imagecut=0
aspect_ratio=2.12 aspect_ratio=2.12
[jellyfin]
multi_part_fanart=0

View File

@@ -394,6 +394,9 @@ class Config:
def face_aspect_ratio(self) -> float: def face_aspect_ratio(self) -> float:
return self.conf.getfloat("face", "aspect_ratio", fallback=2.12) return self.conf.getfloat("face", "aspect_ratio", fallback=2.12)
def jellyfin_multi_part_fanart(self) -> bool:
return self.conf.getboolean("jellyfin", "multi_part_fanart", fallback=False)
@staticmethod @staticmethod
def _exit(sec: str) -> None: def _exit(sec: str) -> None:
print("[-] Read config error! Please check the {} section in config.ini", sec) print("[-] Read config error! Please check the {} section in config.ini", sec)

42
core.py
View File

@@ -614,6 +614,40 @@ def paste_file_to_folder_mode2(filepath, path, multi_part, number, part, leak_wo
return return
def linkImage(path, number, part, leak_word, c_word, hack_word, ext):
"""
首先尝试为图片建立符合Jellyfin封面图文件名规则的硬连接以节省磁盘空间
如果目标目录无法建立硬链接则将图片复制一份成为常规文件
常规文件日期已经存在时,若修改日期比源文件更旧,则将被新的覆盖,否则忽略
"""
if not all(len(v) for v in (path, number, part, ext)):
return
covers = ("-fanart", "-poster", "-thumb")
normal_prefix = f"{number}{leak_word}{c_word}{hack_word}"
multi_prefix = f"{number}{part}{leak_word}{c_word}{hack_word}"
normal_pathes = (Path(path) / f"{normal_prefix}{c}{ext}" for c in covers)
multi_pathes = (Path(path) / f"{multi_prefix}{c}{ext}" for c in covers)
for normal_path, multi_path in zip(normal_pathes, multi_pathes):
if not normal_path.is_file():
continue
mkLink = False
if not multi_path.exists():
mkLink = True
elif multi_path.is_file():
if multi_path.stat().st_nlink > 1:
continue
elif normal_path.stat().st_mtime <= multi_path.stat().st_mtime:
continue
mkLink = True
multi_path.unlink(missing_ok=True)
if not mkLink:
continue
try:
os.link(str(normal_path), str(multi_path), follow_symlinks=False)
except:
shutil.copyfile(str(normal_path), str(multi_path))
def debug_print(data: json): def debug_print(data: json):
try: try:
print("[+] ------- DEBUG INFO -------") print("[+] ------- DEBUG INFO -------")
@@ -791,6 +825,10 @@ def core_main(movie_path, number_th, oCC):
if conf.is_watermark(): if conf.is_watermark():
add_mark(os.path.join(path,poster_path), os.path.join(path,thumb_path), cn_sub, leak, uncensored, hack) add_mark(os.path.join(path,poster_path), os.path.join(path,thumb_path), cn_sub, leak, uncensored, hack)
# 兼容Jellyfin封面图文件名规则
if multi_part and conf.jellyfin_multi_part_fanart():
linkImage(path, number_th, part, leak_word, c_word, hack_word, ext)
# 移动电影 # 移动电影
paste_file_to_folder(movie_path, path, multi_part, number, part, leak_word, c_word, hack_word) paste_file_to_folder(movie_path, path, multi_part, number, part, leak_word, c_word, hack_word)
@@ -834,6 +872,10 @@ def core_main(movie_path, number_th, oCC):
if conf.is_watermark(): if conf.is_watermark():
add_mark(os.path.join(path,poster_path), os.path.join(path,thumb_path), cn_sub, leak, uncensored, hack) add_mark(os.path.join(path,poster_path), os.path.join(path,thumb_path), cn_sub, leak, uncensored, hack)
# 兼容Jellyfin封面图文件名规则
if multi_part and conf.jellyfin_multi_part_fanart():
linkImage(path, number_th, part, leak_word, c_word, hack_word, ext)
# 最后输出.nfo元数据文件以完成.nfo文件创建作为任务成功标志 # 最后输出.nfo元数据文件以完成.nfo文件创建作为任务成功标志
print_files(path, leak_word, c_word, json_data.get('naming_rule'), part, cn_sub, json_data, movie_path, print_files(path, leak_word, c_word, json_data.get('naming_rule'), part, cn_sub, json_data, movie_path,
tag, json_data.get('actor_list'), liuchu, uncensored, hack_word,fanart_path,poster_path,thumb_path) tag, json_data.get('actor_list'), liuchu, uncensored, hack_word,fanart_path,poster_path,thumb_path)