diff --git a/app/chain/storage.py b/app/chain/storage.py index 71ef09a8..4f77b884 100644 --- a/app/chain/storage.py +++ b/app/chain/storage.py @@ -111,21 +111,27 @@ class StorageChain(ChainBase): """ 删除媒体文件,以及不含媒体文件的目录 """ + if fileitem.path == "/" or len(Path(fileitem.path).parts) <= 2: + logger.warn(f"【{fileitem.storage}】{fileitem.path} 根目录或一级目录不允许删除") + return False + logger.warn(f"正在删除【{fileitem.storage}】{fileitem.path}") state = self.delete_file(fileitem) if not state: logger.warn(f"【{fileitem.storage}】{fileitem.path} 删除失败") return False if fileitem.type == "dir": + # 本身是目录不处理父目录 return True # 上级目录 if mtype and mtype == MediaType.TV: - dir_path = Path(fileitem.path).parent.parent - dir_item = self.get_file_item(storage=fileitem.storage, path=dir_path) + dir_item = self.get_file_item(storage=fileitem.storage, path=Path(fileitem.path).parent.parent) else: dir_item = self.get_parent_item(fileitem) - if dir_item: + if dir_item and len(Path(dir_item.path).parts) > 2: # 不存在其他媒体文件,删除空目录 - if not self.any_files(dir_item, extensions=settings.RMT_MEDIAEXT): + exts = settings.RMT_MEDIAEXT + settings.DOWNLOAD_TMPEXT + if self.any_files(dir_item, extensions=exts) is False: + logger.warn(f"【{dir_item.storage}】{dir_item.path} 不存在其它媒体文件,删除空目录") return self.delete_file(dir_item) # 存在媒体文件,返回文件删除状态 diff --git a/app/chain/transfer.py b/app/chain/transfer.py index accbd08e..741a3768 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -518,7 +518,8 @@ class TransferChain(ChainBase): folder_item = fileitem else: folder_item = self.storagechain.get_parent_item(fileitem) - if folder_item and not self.storagechain.any_files(folder_item, extensions=settings.RMT_MEDIAEXT): + exts = settings.RMT_MEDIAEXT + settings.DOWNLOAD_TMPEXT + if folder_item and self.storagechain.any_files(folder_item, extensions=exts) is False: logger.warn(f"删除残留空文件夹:【{folder_item.storage}】{folder_item.path}") self.storagechain.delete_file(folder_item) diff --git a/app/monitor.py b/app/monitor.py index 33abdbe7..e22dddcc 100644 --- a/app/monitor.py +++ b/app/monitor.py @@ -482,7 +482,8 @@ class Monitor(metaclass=Singleton): folder_item = file_item else: folder_item = self.storagechain.get_parent_item(file_item) - if folder_item and not self.storagechain.any_files(folder_item, extensions=settings.RMT_MEDIAEXT): + exts = settings.RMT_MEDIAEXT + settings.DOWNLOAD_TMPEXT + if folder_item and self.storagechain.any_files(folder_item, extensions=exts) is False: logger.warn(f"删除残留空文件夹:【{folder_item.storage}】{folder_item.path}") self.storagechain.delete_file(folder_item)