fix #3042 移动模式删除空文件夹

This commit is contained in:
jxxghp
2024-11-09 18:23:08 +08:00
parent 9b2fccee01
commit 40b82d9cb6
4 changed files with 51 additions and 14 deletions
+7 -11
View File
@@ -37,6 +37,12 @@ class StorageChain(ChainBase):
""" """
return self.run_module("list_files", fileitem=fileitem, recursion=recursion) return self.run_module("list_files", fileitem=fileitem, recursion=recursion)
def any_files(self, fileitem: schemas.FileItem, extensions: list = None) -> Optional[bool]:
"""
查询当前目录下是否存在指定扩展名任意文件
"""
return self.run_module("any_files", fileitem=fileitem, extensions=extensions)
def create_folder(self, fileitem: schemas.FileItem, name: str) -> Optional[schemas.FileItem]: def create_folder(self, fileitem: schemas.FileItem, name: str) -> Optional[schemas.FileItem]:
""" """
创建目录 创建目录
@@ -116,18 +122,8 @@ class StorageChain(ChainBase):
else: else:
dir_item = self.get_parent_item(fileitem) dir_item = self.get_parent_item(fileitem)
if dir_item: if dir_item:
files = self.list_files(dir_item, recursion=True)
# 是否存在其他媒体文件
media_file_exist = False
if files:
for file in files:
if file.extension and f".{file.extension.lower()}" in settings.RMT_MEDIAEXT:
media_file_exist = True
break
# 不存在其他媒体文件,删除空目录 # 不存在其他媒体文件,删除空目录
if not media_file_exist: if not self.any_files(dir_item, extensions=settings.RMT_MEDIAEXT):
# 返回空目录删除状态
return self.delete_file(dir_item) return self.delete_file(dir_item)
# 存在媒体文件,返回文件删除状态 # 存在媒体文件,返回文件删除状态
+7 -1
View File
@@ -494,7 +494,13 @@ class TransferChain(ChainBase):
# 删除残留文件 # 删除残留文件
if fileitem: if fileitem:
logger.warn(f"删除残留文件夹:【{fileitem.storage}{fileitem.path}") logger.warn(f"删除残留文件夹:【{fileitem.storage}{fileitem.path}")
self.storagechain.delete_file(fileitem) if self.storagechain.delete_file(fileitem):
# 删除空的父目录
dir_item = self.storagechain.get_parent_item(fileitem)
if dir_item:
if not self.storagechain.any_files(dir_item, extensions=settings.RMT_MEDIAEXT):
logger.warn(f"正在删除空目录:【{dir_item.storage}{dir_item.path}")
return self.storagechain.delete_file(dir_item)
# 结束进度 # 结束进度
logger.info(f"{fileitem.path} 整理完成,共 {total_num} 个文件," logger.info(f"{fileitem.path} 整理完成,共 {total_num} 个文件,"
+30 -1
View File
@@ -195,7 +195,36 @@ class FileManagerModule(_ModuleBase):
result = [] result = []
__get_files(fileitem, recursion) __get_files(fileitem, recursion)
return result return
def any_files(self, fileitem: FileItem, extensions: list = None) -> Optional[bool]:
"""
查询当前目录下是否存在指定扩展名任意文件
"""
storage_oper = self.__get_storage_oper(fileitem.storage)
if not storage_oper:
logger.error(f"不支持 {fileitem.storage} 的文件浏览")
return None
def __any_file(_item: FileItem):
"""
递归处理
"""
_items = storage_oper.list(_item)
if _items:
if not extensions:
return True
for t in _items:
if (t.type == "file"
and t.extension
and f".{t.extension.lower()}" in extensions):
return True
elif t.type == "dir":
return __any_file(t)
return False
# 返回结果
return __any_file(fileitem)
def create_folder(self, fileitem: FileItem, name: str) -> Optional[FileItem]: def create_folder(self, fileitem: FileItem, name: str) -> Optional[FileItem]:
""" """
+7 -1
View File
@@ -481,7 +481,13 @@ class Monitor(metaclass=Singleton):
# 移动模式删除空目录 # 移动模式删除空目录
if transferinfo.transfer_type in ["move"]: if transferinfo.transfer_type in ["move"]:
logger.info(f"正在删除: {file_item.storage} {file_item.path}") logger.info(f"正在删除: {file_item.storage} {file_item.path}")
self.storagechain.delete_file(file_item) if self.storagechain.delete_file(file_item):
# 删除空的父目录
dir_item = self.storagechain.get_parent_item(file_item)
if dir_item:
if not self.storagechain.any_files(dir_item, extensions=settings.RMT_MEDIAEXT):
logger.warn(f"正在删除空目录: {dir_item.storage} {dir_item.path}")
return self.storagechain.delete_file(dir_item)
except Exception as e: except Exception as e:
logger.error("目录监控发生错误:%s - %s" % (str(e), traceback.format_exc())) logger.error("目录监控发生错误:%s - %s" % (str(e), traceback.format_exc()))