From 6f24c6ba498729b00185f18c7906efa06e45fe2c Mon Sep 17 00:00:00 2001 From: InfinityPacer <160988576+InfinityPacer@users.noreply.github.com> Date: Mon, 3 Feb 2025 00:14:15 +0800 Subject: [PATCH 1/2] fix(event): reorder code execution --- app/modules/filemanager/__init__.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/modules/filemanager/__init__.py b/app/modules/filemanager/__init__.py index b6c75548..a22ffe72 100644 --- a/app/modules/filemanager/__init__.py +++ b/app/modules/filemanager/__init__.py @@ -837,13 +837,6 @@ class FileManagerModule(_ModuleBase): :param transfer_type: 整理方式 :param over_flag: 是否覆盖,为True时会先删除再整理 """ - if target_storage == "local" and (target_file.exists() or target_file.is_symlink()): - if not over_flag: - logger.warn(f"文件已存在:{target_file}") - return None, f"{target_file} 已存在" - else: - logger.info(f"正在删除已存在的文件:{target_file}") - target_file.unlink() logger.info(f"正在整理文件:【{fileitem.storage}】{fileitem.path} 到 【{target_storage}】{target_file}," f"操作类型:{transfer_type}") event_data = TransferInterceptEventData( @@ -864,6 +857,13 @@ class FileManagerModule(_ModuleBase): f"Transfer file canceled by event: {event_data.source}," f"Reason: {event_data.reason}") return None, event_data.reason + if target_storage == "local" and (target_file.exists() or target_file.is_symlink()): + if not over_flag: + logger.warn(f"文件已存在:{target_file}") + return None, f"{target_file} 已存在" + else: + logger.info(f"正在删除已存在的文件:{target_file}") + target_file.unlink() new_item, errmsg = self.__transfer_command(fileitem=fileitem, target_storage=target_storage, target_file=target_file, From f2d3b1c13f0c6352f0d78a773d75430cd872cb93 Mon Sep 17 00:00:00 2001 From: InfinityPacer <160988576+InfinityPacer@users.noreply.github.com> Date: Mon, 3 Feb 2025 00:39:01 +0800 Subject: [PATCH 2/2] feat(event): add mediainfo field for TransferInterceptEventData --- app/modules/filemanager/__init__.py | 10 ++++++++-- app/schemas/event.py | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/modules/filemanager/__init__.py b/app/modules/filemanager/__init__.py index a22ffe72..5749bbe4 100644 --- a/app/modules/filemanager/__init__.py +++ b/app/modules/filemanager/__init__.py @@ -746,11 +746,12 @@ class FileManagerModule(_ModuleBase): logger.error(f"音轨文件 {org_path.name} 整理失败:{str(error)}") return True, "" - def __transfer_dir(self, fileitem: FileItem, transfer_type: str, + def __transfer_dir(self, fileitem: FileItem, mediainfo: MediaInfo, transfer_type: str, target_storage: str, target_path: Path) -> Tuple[Optional[FileItem], str]: """ 整理整个文件夹 :param fileitem: 源文件 + :param mediainfo: 媒体信息 :param transfer_type: 整理方式 :param target_storage: 目标存储 :param target_path: 目标路径 @@ -766,6 +767,7 @@ class FileManagerModule(_ModuleBase): return None, f"获取目标目录失败:{target_path}" event_data = TransferInterceptEventData( fileitem=fileitem, + mediainfo=mediainfo, target_storage=target_storage, target_path=target_path, transfer_type=transfer_type @@ -827,11 +829,12 @@ class FileManagerModule(_ModuleBase): # 返回成功 return True, "" - def __transfer_file(self, fileitem: FileItem, target_storage: str, target_file: Path, + def __transfer_file(self, fileitem: FileItem, mediainfo: MediaInfo, target_storage: str, target_file: Path, transfer_type: str, over_flag: bool = False) -> Tuple[Optional[FileItem], str]: """ 整理一个文件,同时处理其他相关文件 :param fileitem: 原文件 + :param mediainfo: 媒体信息 :param target_storage: 目标存储 :param target_file: 新文件 :param transfer_type: 整理方式 @@ -841,6 +844,7 @@ class FileManagerModule(_ModuleBase): f"操作类型:{transfer_type}") event_data = TransferInterceptEventData( fileitem=fileitem, + mediainfo=mediainfo, target_storage=target_storage, target_path=target_file, transfer_type=transfer_type, @@ -968,6 +972,7 @@ class FileManagerModule(_ModuleBase): new_path = target_path / fileitem.name # 整理目录 new_diritem, errmsg = self.__transfer_dir(fileitem=fileitem, + mediainfo=mediainfo, target_storage=target_storage, target_path=new_path, transfer_type=transfer_type) @@ -1097,6 +1102,7 @@ class FileManagerModule(_ModuleBase): self.__delete_version_files(target_storage, new_file) # 整理文件 new_item, err_msg = self.__transfer_file(fileitem=fileitem, + mediainfo=mediainfo, target_storage=target_storage, target_file=new_file, transfer_type=transfer_type, diff --git a/app/schemas/event.py b/app/schemas/event.py index 9c8220fa..41f7754c 100644 --- a/app/schemas/event.py +++ b/app/schemas/event.py @@ -223,6 +223,7 @@ class TransferInterceptEventData(ChainEventData): """ # 输入参数 fileitem: FileItem = Field(..., description="源文件") + mediainfo: Any = Field(..., description="媒体信息") target_storage: str = Field(..., description="目标存储") target_path: Path = Field(..., description="目标路径") transfer_type: str = Field(..., description="整理方式")