mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-04-05 03:38:36 +08:00
fix #3042 移动模式删除空文件夹
This commit is contained in:
@@ -37,6 +37,12 @@ class StorageChain(ChainBase):
|
||||
"""
|
||||
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]:
|
||||
"""
|
||||
创建目录
|
||||
@@ -116,18 +122,8 @@ class StorageChain(ChainBase):
|
||||
else:
|
||||
dir_item = self.get_parent_item(fileitem)
|
||||
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)
|
||||
|
||||
# 存在媒体文件,返回文件删除状态
|
||||
|
||||
@@ -494,7 +494,13 @@ class TransferChain(ChainBase):
|
||||
# 删除残留文件
|
||||
if fileitem:
|
||||
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} 个文件,"
|
||||
|
||||
@@ -195,7 +195,36 @@ class FileManagerModule(_ModuleBase):
|
||||
result = []
|
||||
__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]:
|
||||
"""
|
||||
|
||||
@@ -481,7 +481,13 @@ class Monitor(metaclass=Singleton):
|
||||
# 移动模式删除空目录
|
||||
if transferinfo.transfer_type in ["move"]:
|
||||
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:
|
||||
logger.error("目录监控发生错误:%s - %s" % (str(e), traceback.format_exc()))
|
||||
|
||||
Reference in New Issue
Block a user