diff --git a/app/api/endpoints/history.py b/app/api/endpoints/history.py index 786b02f7..3aca0475 100644 --- a/app/api/endpoints/history.py +++ b/app/api/endpoints/history.py @@ -75,10 +75,14 @@ def delete_transfer_history(history_in: schemas.TransferHistory, return schemas.Response(success=False, msg="记录不存在") # 册除媒体库文件 if deletedest and history.dest: - TransferChain().delete_files(Path(history.dest)) + state, msg = TransferChain().delete_files(Path(history.dest)) + if not state: + return schemas.Response(success=False, msg=msg) # 删除源文件 if deletesrc and history.src: - TransferChain().delete_files(Path(history.src)) + state, msg = TransferChain().delete_files(Path(history.src)) + if not state: + return schemas.Response(success=False, msg=msg) # 发送事件 eventmanager.send_event( EventType.DownloadFileDeleted, diff --git a/app/chain/transfer.py b/app/chain/transfer.py index fac02d58..1cfd0c28 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -617,14 +617,15 @@ class TransferChain(ChainBase): title=msg_title, text=msg_str, image=mediainfo.get_message_image())) @staticmethod - def delete_files(path: Path): + def delete_files(path: Path) -> Tuple[bool, str]: """ 删除转移后的文件以及空目录 :param path: 文件路径 + :return: 成功标识,错误信息 """ logger.info(f"开始删除文件以及空目录:{path} ...") if not path.exists(): - return + return True, f"文件或目录不存在:{path}" if path.is_file(): # 删除文件、nfo、jpg等同名文件 pattern = path.stem.replace('[', '?').replace(']', '?') @@ -636,7 +637,7 @@ class TransferChain(ChainBase): elif str(path.parent) == str(path.root): # 根目录,不删除 logger.warn(f"根目录 {path} 不能删除!") - return + return False, f"根目录 {path} 不能删除!" else: # 非根目录,才删除目录 shutil.rmtree(path) @@ -662,5 +663,10 @@ class TransferChain(ChainBase): # 父目录非根目录,才删除父目录 if not SystemUtils.exits_files(parent_path, settings.RMT_MEDIAEXT): # 当前路径下没有媒体文件则删除 - shutil.rmtree(parent_path) + try: + shutil.rmtree(parent_path) + except Exception as e: + logger.error(f"删除目录 {parent_path} 失败:{str(e)}") + return False, f"删除目录 {parent_path} 失败:{str(e)}" logger.warn(f"目录 {parent_path} 已删除") + return True, "" diff --git a/app/plugins/autoclean/__init__.py b/app/plugins/autoclean/__init__.py index d5e370d0..c38556f9 100644 --- a/app/plugins/autoclean/__init__.py +++ b/app/plugins/autoclean/__init__.py @@ -159,7 +159,6 @@ class AutoClean(_PluginBase): # 输出分组结果 for key, downloadhis_list in downloadhis_grouped_dict.items(): logger.info(f"开始清理 {key}") - result = [] del_transferhis_cnt = 0 del_media_name = downloadhis_list[0].title del_media_user = downloadhis_list[0].username @@ -208,7 +207,7 @@ class AutoClean(_PluginBase): f"下载媒体用户 {del_media_user}\n" f"删除历史记录 {del_transferhis_cnt}") - result.append({ + history.append({ "type": del_media_type, "title": del_media_name, "year": del_media_year, @@ -219,7 +218,7 @@ class AutoClean(_PluginBase): }) # 保存历史 - self.save_data("history", result) + self.save_data("history", history) def get_state(self) -> bool: return self._enabled diff --git a/app/schemas/history.py b/app/schemas/history.py index 749f5399..c10f2c78 100644 --- a/app/schemas/history.py +++ b/app/schemas/history.py @@ -38,6 +38,8 @@ class DownloadHistory(BaseModel): torrent_site: Optional[str] = None # 下载用户 userid: Optional[str] = None + # 下载用户名 + username: Optional[str] = None # 下载渠道 channel: Optional[str] = None # 创建时间