This commit is contained in:
jxxghp
2025-07-10 10:20:00 +08:00
parent 72658c3e60
commit 51848b8d8d
3 changed files with 210 additions and 193 deletions
+2 -2
View File
@@ -367,8 +367,8 @@ class MediaChain(ChainBase):
overwrite=overwrite)
else:
# 检查目的目录下是否已经有nfo刮削文件
sub_files = storagechain.list_files(fileitem)
if any(f.name.endswith('.nfo') for f in sub_files):
has_nfo_file = storagechain.any_files(fileitem, extensions=['.nfo'])
if has_nfo_file and file_list:
logger.info(f"目录 {fileitem.path} 已有NFO文件,开始增量刮削...")
for file_path in file_list:
file_item = storagechain.get_file_item(storage=fileitem.storage,
+16 -5
View File
@@ -372,6 +372,8 @@ class TransferChain(ChainBase, metaclass=Singleton):
self._transfer_interval = 15
# 事件管理器
self.jobview = JobManager()
# 车移成功的文件清单
self._success_target_files: Dict[str, List[str]] = {}
# 启动整理任务
self.__init()
@@ -441,6 +443,13 @@ class TransferChain(ChainBase, metaclass=Singleton):
})
with task_lock:
# 登记转移成功文件清单
target_dir_path = transferinfo.target_diritem.path
target_files = transferinfo.file_list_new
if self._success_target_files.get(target_dir_path):
self._success_target_files[target_dir_path].extend(target_files)
else:
self._success_target_files[target_dir_path] = target_files
# 全部整理成功时
if self.jobview.is_success(task):
# 移动模式删除空目录
@@ -461,6 +470,13 @@ class TransferChain(ChainBase, metaclass=Singleton):
storagechain.delete_media_file(t.fileitem, delete_self=False)
# 整理完成且有成功的任务时
if self.jobview.is_finished(task):
# 更新文件数量
transferinfo.file_count = self.jobview.count(task.mediainfo, task.meta.begin_season) or 1
# 更新文件大小
transferinfo.total_size = self.jobview.size(task.mediainfo,
task.meta.begin_season) or task.fileitem.size
# 更新文件清单
transferinfo.file_list_new = self._success_target_files.pop(transferinfo.target_diritem.path, [])
# 发送通知,实时手动整理时不发
if transferinfo.need_notify and (task.background or not task.manual):
se_str = None
@@ -470,11 +486,6 @@ class TransferChain(ChainBase, metaclass=Singleton):
se_str = f"{task.meta.season} {StringUtils.format_ep(season_episodes)}"
else:
se_str = f"{task.meta.season}"
# 更新文件数量
transferinfo.file_count = self.jobview.count(task.mediainfo, task.meta.begin_season) or 1
# 更新文件大小
transferinfo.total_size = self.jobview.size(task.mediainfo,
task.meta.begin_season) or task.fileitem.size
self.send_transfer_message(meta=task.meta,
mediainfo=task.mediainfo,
transferinfo=transferinfo,
+18 -12
View File
@@ -27,11 +27,10 @@ class TransHandler:
文件转移整理类
"""
result: Optional[TransferInfo] = None
inner_lock: Lock = Lock()
def __init__(self):
self.__reset_result()
self.result = None
def __reset_result(self):
"""
@@ -104,6 +103,8 @@ class TransHandler:
# 重置结果
self.__reset_result()
try:
# 重命名格式
rename_format = settings.TV_RENAME_FORMAT \
if mediainfo.type == MediaType.TV else settings.MOVIE_RENAME_FORMAT
@@ -129,7 +130,7 @@ class TransHandler:
transfer_type=transfer_type,
need_notify=need_notify,
)
return self.result
return self.result.copy()
else:
new_path = target_path / fileitem.name
# 整理目录
@@ -147,7 +148,7 @@ class TransHandler:
fileitem=fileitem,
transfer_type=transfer_type,
need_notify=need_notify)
return self.result
return self.result.copy()
logger.info(f"文件夹 {fileitem.path} 整理成功")
# 计算目录下所有文件大小
@@ -161,7 +162,7 @@ class TransHandler:
need_scrape=need_scrape,
need_notify=need_notify,
transfer_type=transfer_type)
return self.result
return self.result.copy()
else:
# 整理单个文件
if mediainfo.type == MediaType.TV:
@@ -174,7 +175,7 @@ class TransHandler:
fail_list=[fileitem.path],
transfer_type=transfer_type,
need_notify=need_notify)
return self.result
return self.result.copy()
# 文件结束季为空
in_meta.end_season = None
@@ -210,7 +211,7 @@ class TransHandler:
transfer_type=transfer_type,
need_notify=need_notify,
)
return self.result
return self.result.copy()
else:
new_file = target_path / fileitem.name
folder_path = target_path
@@ -227,7 +228,7 @@ class TransHandler:
fail_list=[fileitem.path],
transfer_type=transfer_type,
need_notify=need_notify)
return self.result
return self.result.copy()
# 目标文件
target_item = target_oper.get_item(new_file)
if target_item:
@@ -257,7 +258,7 @@ class TransHandler:
fail_list=[fileitem.path],
transfer_type=transfer_type,
need_notify=need_notify)
return self.result
return self.result.copy()
elif overwrite_mode == 'never':
# 存在不覆盖
self.__set_result(success=False,
@@ -268,7 +269,7 @@ class TransHandler:
fail_list=[fileitem.path],
transfer_type=transfer_type,
need_notify=need_notify)
return self.result
return self.result.copy()
elif overwrite_mode == 'latest':
# 仅保留最新版本
logger.info(f"当前整理覆盖模式设置为仅保留最新版本,将覆盖:{new_file}")
@@ -295,17 +296,22 @@ class TransHandler:
fail_list=[fileitem.path],
transfer_type=transfer_type,
need_notify=need_notify)
return self.result
return self.result.copy()
logger.info(f"文件 {fileitem.path} 整理成功")
self.__set_result(success=True,
fileitem=fileitem,
target_item=new_item,
target_diritem=target_diritem,
file_count=1,
file_list_new=[new_item.path],
total_size=new_item.size,
need_scrape=need_scrape,
transfer_type=transfer_type,
need_notify=need_notify)
return self.result
return self.result.copy()
finally:
self.result = None
@staticmethod
def __transfer_command(fileitem: FileItem, target_storage: str,