feat 云盘助手 v1.5\n支持转移后删除源文件、删种

This commit is contained in:
thsrite
2024-06-23 23:00:11 +08:00
parent edf057b033
commit 86250f96f8
4 changed files with 79 additions and 13 deletions

View File

@@ -42,5 +42,5 @@ MoviePilot三方插件市场https://github.com/thsrite/MoviePilot-Plugins/
- 目录监控(统一入库消息增强版) v1.0
- Sql执行器 v1.2
- 命令执行器 v1.2
- 云盘助手 v1.4
- 云盘助手 v1.5
- CloudDrive2助手 v1.0

View File

@@ -17,8 +17,11 @@
"mount_path": "/mnt/cloud/115/media/movies",
"return_path": "/mnt/softlink/movies",
"delete_local": "false",
"preserve_hierarchy": 0,
"local_preserve_hierarchy": 0,
"delete_history": "false",
"delete_source": "false",
"source_dirs": "/mnt/media/movies, /mnt/media/series",
"source_preserve_hierarchy": 0,
"just_media": "true",
"overwrite": "false",
"upload_cloud": "true"
@@ -42,8 +45,11 @@
"cloud_url": "http://localhost:19798",
"cloud_scheme": "http/https",
"delete_local": "false",
"preserve_hierarchy": 0,
"local_preserve_hierarchy": 0,
"delete_history": "false",
"delete_source": "false",
"source_dirs": "/mnt/media/movies, /mnt/media/series",
"source_preserve_hierarchy": 0,
"just_media": "true",
"overwrite": "false",
"upload_cloud": "true"
@@ -66,8 +72,11 @@ cd2方式上传--softlink回本地暂时移除
"cd2_path": "/115/media/movies",
"return_path": "/mnt/softlink/movies",
"delete_local": "false",
"preserve_hierarchy": 0,
"local_preserve_hierarchy": 0,
"delete_history": "false",
"delete_source": "false",
"source_dirs": "/mnt/media/movies, /mnt/media/series",
"source_preserve_hierarchy": 0,
"just_media": "true",
"overwrite": "false",
"upload_cloud": "true"
@@ -94,8 +103,11 @@ cd2方式上传--strm回本地暂时移除
"cloud_url": "http://localhost:19798",
"cloud_scheme": "http/https",
"delete_local": "false",
"preserve_hierarchy": 0,
"local_preserve_hierarchy": 0,
"delete_history": "false",
"delete_source": "false",
"source_dirs": "/mnt/media/movies, /mnt/media/series",
"source_preserve_hierarchy": 0,
"just_media": "true",
"overwrite": "false",
"upload_cloud": "true"
@@ -117,8 +129,11 @@ cd2方式上传--strm回本地暂时移除
- return_pathMoviePilot中软链接/strm生成路径
- monitor_mode监控模式 compatibility/fast
- delete_local是否删除本地文件
- preserve_hierarchy保留监控目录后结构层级,例如 1表示保留监控目录后一层目录结构0表示仅保留到监控目录
- local_preserve_hierarchy保留监控路径目录层级,例如 1表示保留监控目录后一层目录结构0表示仅保留到监控目录
- delete_history是否删除MoviePilot中转移历史记录
- delete_source是否删除源文件仅上述监控路径查询到转移记录时才生效删除转移记录的源文件路径
- source_dirs源文件的目录多个目录用逗号分隔
- source_preserve_hierarchy保留源文件路径目录层级0表示仅监控到源文件目录1表示监控源文件目录及其一级子目录
- just_media是否只监控媒体文件
- overwrite是否覆盖已存在云盘文件
- upload_cloud: 是否上传到云盘,false则直接软连接或者strm回本地

View File

@@ -521,11 +521,12 @@
"name": "云盘助手",
"description": "定时移动到云盘,软连接/strm回本地定时清理无效软连接。",
"labels": "云盘",
"version": "1.4",
"version": "1.5",
"icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/cloudassistant.png",
"author": "thsrite",
"level": 3,
"history": {
"v1.5": "支持转移后删除源文件、删种",
"v1.4": "转移完删除本地文件时,支持自定义保留目录层级",
"v1.3": "完善逻辑增加刷新emby媒体库需要主程序1.9.9+",
"v1.2": "移除cd2上传",

View File

@@ -63,7 +63,7 @@ class CloudAssistant(_PluginBase):
# 插件图标
plugin_icon = "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/cloudassistant.png"
# 插件版本
plugin_version = "1.4"
plugin_version = "1.5"
# 插件作者
plugin_author = "thsrite"
# 作者主页
@@ -109,8 +109,11 @@ class CloudAssistant(_PluginBase):
"mount_path": "/mnt/cloud/115/media/movies",
"return_path": "/mnt/softlink/movies",
"delete_local": "false",
"preserve_hierarchy": 0,
"local_preserve_hierarchy": 0,
"delete_history": "false",
"delete_source": "false",
"source_dirs": "/mnt/media/movies, /mnt/media/series",
"source_preserve_hierarchy": 0,
"just_media": "true",
"overwrite": "false",
"upload_cloud": "true"
@@ -399,10 +402,13 @@ class CloudAssistant(_PluginBase):
# cd2_path = monitor_dir.get("cd2_path")
return_path = monitor_dir.get("return_path")
delete_local = monitor_dir.get("delete_local") or "false"
delete_source = monitor_dir.get("delete_source") or "false"
delete_history = monitor_dir.get("delete_history") or "false"
overwrite = monitor_dir.get("overwrite") or "false"
upload_cloud = monitor_dir.get("upload_cloud") or "true"
preserve_hierarchy = monitor_dir.get("preserve_hierarchy") or 0
local_preserve_hierarchy = monitor_dir.get("local_preserve_hierarchy") or 0
source_dirs = monitor_dir.get("source_dirs") or ""
source_preserve_hierarchy = monitor_dir.get("source_preserve_hierarchy") or 0
# 1、转移到云盘挂载路径 上传到cd2
# 挂载的路径
@@ -520,11 +526,11 @@ class CloudAssistant(_PluginBase):
if str(delete_local) == "true":
if file_path.exists():
file_path.unlink()
logger.info(f"删除本地文件:{file_path}")
logger.info(f"删除监控文件:{file_path}")
# 保留层级
mon_path_depth = len(Path(mon_path).parts)
retain_depth = mon_path_depth + 2
retain_depth = mon_path_depth + int(local_preserve_hierarchy)
for file_dir in file_path.parents:
if len(file_dir.parts) <= retain_depth:
@@ -532,8 +538,52 @@ class CloudAssistant(_PluginBase):
break
files = SystemUtils.list_files(file_dir, settings.RMT_MEDIAEXT + settings.DOWNLOAD_TMPEXT)
if not files:
logger.warn(f"删除空目录:{file_dir}")
logger.warn(f"删除监控空目录:{file_dir}")
shutil.rmtree(file_dir, ignore_errors=True)
# 是否删除源文件
if str(delete_source) == "true" and transferhis:
if Path(transferhis.src).exists():
Path(transferhis.src).unlink()
logger.info(f"删除源文件:{transferhis.src}")
# 删除下载文件记录
self.downloadhis.delete_file_by_fullpath(transferhis.src)
# 发送事件 删种
eventmanager.send_event(
EventType.DownloadFileDeleted,
{
"src": transferhis.src,
"hash": transferhis.download_hash
}
)
# 源文件保留层级
source_path = None
for source_dir in source_dirs.split(","):
source_dir = source_dir.strip()
if not source_dir:
continue
if transferhis.src.startswith(source_dir):
source_path = source_dir
break
# 删除源文件空目录
if source_path:
# 保留层级
source_path_depth = len(Path(source_path).parts)
retain_depth = source_path_depth + int(source_preserve_hierarchy)
for file_dir in Path(transferhis.src).parents:
if len(file_dir.parts) <= retain_depth:
# 重要,删除到保留层级目录为止
break
files = SystemUtils.list_files(file_dir,
settings.RMT_MEDIAEXT + settings.DOWNLOAD_TMPEXT)
if not files:
logger.warn(f"删除源文件空目录:{file_dir}")
shutil.rmtree(file_dir, ignore_errors=True)
except Exception as e:
logger.error("目录监控发生错误:%s - %s" % (str(e), traceback.format_exc()))