diff --git a/README.md b/README.md index 1dc5da2..e846a2f 100644 --- a/README.md +++ b/README.md @@ -47,3 +47,4 @@ MoviePilot三方插件市场:https://github.com/thsrite/MoviePilot-Plugins/ - 云盘同步删除 v1.4 - 媒体库重复媒体检测 v1.9 - 演员作品订阅 v1.0 +- 文件复制 v1.0 diff --git a/icons/copy_files.png b/icons/copy_files.png new file mode 100644 index 0000000..9692ac8 Binary files /dev/null and b/icons/copy_files.png differ diff --git a/package.json b/package.json index 0977f84..db487d6 100644 --- a/package.json +++ b/package.json @@ -1,661 +1,673 @@ { - "CloudStrm": { - "name": "云盘Strm生成", - "description": "监控文件创建,生成Strm文件。", - "labels": "云盘", - "version": "4.4", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/create.png", - "author": "thsrite", - "level": 1, - "history": { - "v4.4": "修复bug", - "v4.3": "回滚自定义媒体类型", - "v4.2": "扩展名转小写", - "v4.1": "支持自定义媒体类型", - "v4.0": "回归老版本", - "v3.8": "支持增量路径、支持自定义媒体类型(注:本次更新需修改配置使用)", - "v3.7": "api模式支持启用https", - "v3.6": "支持重建索引周期运行", - "v3.4": "交互命令", - "v3.1": "注册交互命令、注册公共服务", - "v3.0": "实现改为定时扫描" - } - }, - "CloudStrmIncrement": { - "name": "云盘Strm生成(增量版)", - "description": "监控文件创建,生成Strm文件(增量版)。", - "labels": "云盘", - "version": "1.1", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/create.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.1": "某种场景下可能出现卡死,修复bug", - "v1.0": "增量监控" - } - }, - "StrmConvert": { - "name": "Strm文件模式转换", - "description": "Strm文件内容转为本地路径或者cd2/alist API路径。", - "labels": "云盘", - "version": "1.0", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/convert.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.0": "Strm文件内容转为本地路径或者cd2/alist API路径" - } - }, - "SiteUnreadMsg": { - "name": "站点未读消息", - "description": "发送站点未读消息。", - "labels": "站点", - "version": "1.9", - "icon": "Synomail_A.png", - "author": "thsrite", - "level": 2, - "history": { - "v1.9": "同步主仓库", - "v1.8": "自定义保留消息天数", - "v1.7": "删除重复代码、依赖于[站点数据统计]插件", - "v1.6": "增加解析失败日志", - "v1.5": "修复馒头未读消息1", - "v1.4": "sync主仓库", - "v1.3": "feat mtorrent", - "v1.2": "站点消息历史存库", - "v1.1": "防止同一消息重复发送", - "v1.0": "定时获取站点消息" - } - }, - "SubscribeClear": { - "name": "清理订阅缓存", - "description": "清理订阅已下载集数。", - "labels": "订阅", - "version": "1.0", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/broom.png", - "author": "thsrite", - "level": 2, - "history": { - "v1.0": "清理订阅已下载集数" - } - }, - "DownloadTorrent": { - "name": "添加种子下载", - "description": "选择下载器,添加种子任务。", - "labels": "站点", - "version": "1.0", - "icon": "download.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.0": "删除下载器中该站点辅种,保留该站点没有辅种的种子" - } - }, - "RemoveTorrent": { - "name": "删除站点种子", - "description": "删除下载器中某站点种子。", - "labels": "站点", - "version": "1.2", - "icon": "delete.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.2": "修复删除种子bug", - "v1.1": "可选择删除有无辅种", - "v1.0": "选择下载器,添加种子任务" - } - }, - "PluginAutoUpdate": { - "name": "插件更新管理", - "description": "监测已安装插件,推送更新提醒,可配置自动更新。", - "labels": "自动更新,插件管理", - "version": "1.9.2", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/pluginupdate.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.9.2": "修复获取本地插件版本None,重新更新问题", - "v1.9.1": "修复bug", - "v1.9": "过滤相同ID插件,保留最新版本检查更新", - "v1.8": "修复已安装插件列表", - "v1.7": "插件API立即生效", - "v1.6": "插件重载,插件自动更新注册成为服务、命令", - "v1.5": "自动更新增加排除列表", - "v1.4": "正在运行的插件跳过更新,可选更新插件列表", - "v1.3": "配置更新提醒", - "v1.2": "重启后立即执行一遍更新插件", - "v1.1": "修复插件重载", - "v1.0": "监测已安装插件,自动更新最新版本" - } - }, - "PluginReInstall": { - "name": "插件强制重装", - "description": "卸载当前插件,强制重装。", - "labels": "插件管理", - "version": "1.7", - "icon": "refresh.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.7": "使用主程序GITHUB_PROXY代理", - "v1.6": "插件API立即生效", - "v1.5": "支持插件热重载", - "v1.4": "支持代理地址", - "v1.3": "插件重载", - "v1.2": "支持指定插件仓库地址", - "v1.1": "修复插件重载", - "v1.0": "卸载当前插件,强制重装" - } - }, - "SynologyNotify": { - "name": "群辉Webhook通知", - "description": "接收群辉webhook通知并推送。", - "labels": "消息通知", - "version": "1.1", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/synology.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.1": "修复bug", - "v1.0": "接收群辉webhook通知并推送" - } - }, - "SyncCookieCloud": { - "name": "同步CookieCloud", - "description": "同步MoviePilot站点Cookie到本地CookieCloud。", - "labels": "站点", - "version": "1.2", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/cookiecloud.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.2": "同步到本地CookieCloud", - "v1.1": "修复CookieCloud覆盖到浏览器", - "v1.0": "同步MoviePilot站点Cookie到CookieCloud" - } - }, - "ScheduleReminder": { - "name": "日程提醒", - "description": "自定义提醒事项、提醒时间。", - "labels": "消息通知", - "version": "1.0", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/reminder.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.0": "自定义提醒事项、提醒时间" - } - }, - "SubscribeReminder": { - "name": "订阅提醒", - "description": "推送当天订阅更新内容。", - "labels": "订阅", - "version": "1.1", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/subscribe_reminder.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.1": "fix icon", - "v1.0": "推送当天订阅更新内容" - } - }, - "EmbyReporter": { - "name": "Emby观影报告", - "description": "推送Emby观影报告,需Emby安装Playback Report 插件。", - "labels": "Emby", - "version": "1.6", - "icon": "Pydiocells_A.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.6": "fix #67", - "v1.5": "按观影市场排序", - "v1.4": "支持自定义emby && 支持每日一言", - "v1.3": "修复bug", - "v1.2": "过滤已删除媒体", - "v1.1": "修复推送", - "v1.0": "推送Emby观影报告" - } - }, - "ActorSubscribe": { - "name": "演员订阅", - "description": "自动订阅指定演员热映电影、电视剧。", - "labels": "订阅", - "version": "2.1", - "icon": "Mdcng_A.png", - "author": "thsrite", - "level": 2, - "history": { - "v2.1": "逻辑优化", - "v2.0": "修复订阅", - "v1.8": "支持自定义订阅username,默认`演员订阅`", - "v1.7": "修复bug", - "v1.6": "增加历史删除按钮", - "v1.5": "rename", - "v1.4": "支持多个订阅源", - "v1.3": "修复bug", - "v1.2": "修复订阅重复处理的bug", - "v1.1": "支持自定义分辨率、质量、特效", - "v1.0": "自动订阅豆瓣演员最新电影" - } - }, - "ShortPlayMonitor": { - "name": "短剧刮削", - "description": "监控视频短剧创建,刮削。", - "labels": "刮削", - "version": "3.2", - "icon": "Amule_B.png", - "author": "thsrite", - "level": 1, - "history": { - "v3.2": "支持消息发送", - "v3.1": "支持自定义转移方式", - "v3.0": "默认从tmdb刮削,刮削失败则从pt站刮削" - } - }, - "CloudLinkMonitor": { - "name": "云盘实时监控", - "description": "监控云盘目录文件变化,自动转移链接。", - "labels": "云盘", - "version": "2.4.6", - "icon": "Linkease_A.png", - "author": "thsrite", - "level": 1, - "history": { - "v2.4.6": "修复bug", - "v2.4.5": "联动实时软连接插件(近媒体文件)", - "v2.4.4": "修复刷新媒体库", - "v2.4.3": "可选转移完刷新媒体库", - "v2.4.2": "fix #65", - "v2.4.1": "增加log", - "v2.4": "修复二级目录", - "v2.3": "去除无效变量", - "v2.2": "优化配置一二级分类流程", - "v2.1": "可配置是否存储转移记录", - "v2.0": "修复不刮削不生效bug", - "v1.8": "fix S00转移", - "v1.7": "fix 刮削", - "v1.6": "可配置是否刮削", - "v1.5": "fix 消息推送", - "v1.4": "fix 转移后路径", - "v1.3": "修复bug", - "v1.2": "修复订阅重复处理的bug", - "v1.1": "自动转移链接(不刮削)", - "v1.0": "监控云盘目录文件变化,按原文件名软连接" - } - }, - "LinkToSrc": { - "name": "源文件恢复", - "description": "根据MoviePilot的转移记录中的硬链文件恢复源文件。", - "labels": "媒体库", - "version": "1.2", - "icon": "Time_machine_A.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.2": "fix 路径", - "v1.1": "支持指定需要恢复的硬链接目录", - "v1.0": "根据MoviePilot的转移记录中的硬链文件恢复源文件" - } - }, - "WeChatForward": { - "name": "微信消息转发", - "description": "根据正则转发通知到其他WeChat应用。", - "labels": "消息通知", - "version": "2.7", - "icon": "Wechat_A.png", - "author": "thsrite", - "level": 1, - "history": { - "v2.7": "特殊消息指定用户支持title匹配", - "v2.6": "已完成订阅额外消息查询订阅历史订阅用户", - "v2.5.1": "修复token过期重发未存储userid问题", - "v2.5": "增强额外消息发送", - "v2.4": "修复配置修改后不重建缓存bug", - "v2.3": "增加重建缓存,丰富转发历史", - "v2.2": "增加消息发送历史", - "v2.1": "微信配置持久化存库", - "v2.0": "优化微信配置,兼容旧版本配置", - "v1.6": "修改获取指定用户订阅列表方法", - "v1.5": "丰富日志", - "v1.4": "特定消息强制指定userid", - "v1.3": "防重复发送额外消息", - "v1.2": "fix规则", - "v1.1": "自定义发送额外消息", - "v1.0": "根据正则转发通知到其他WeChat应用" - } - }, - "SubscribeStatistic": { - "name": "订阅下载统计", - "description": "统计指定时间内各站点订阅及下载情况。", - "labels": "订阅", - "version": "1.5", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/subscribestatistic.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.5": "增加消息推送", - "v1.4": "无订阅站点也统计数量", - "v1.3": "fix 数据统计", - "v1.2": "fix 订阅数量", - "v1.1": "站点去重", - "v1.0": "统计指定时间内各站点订阅及下载情况" - } - }, - "CustomCommand": { - "name": "自定义命令", - "description": "自定义执行周期执行命令并推送结果。", - "labels": "自定义命令", - "version": "1.7", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/code.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.7": "自定义通知关键词", - "v1.6": "自定义保留消息天数", - "v1.5": "修复多个任务立即运行一次", - "v1.4": "fix icon", - "v1.3": "清除历史记录", - "v1.2": "增加执行历史", - "v1.1": "打印命令日志", - "v1.0": "自定义执行周期执行命令并推送结果" - } - }, - "DockerManager": { - "name": "docker自定义任务", - "description": "管理宿主机docker,自定义容器定时任务。", - "labels": "自定义命令", - "version": "1.3", - "icon": "Docker_F.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.3": "自定义保留消息天数", - "v1.2": "多个容器名,拼接", - "v1.1": "修复多个任务立即运行一次", - "v1.0": "init" - } - }, - "PluginUnInstall": { - "name": "插件彻底卸载", - "description": "删除数据库中已安装插件记录、清理插件文件。", - "labels": "插件管理", - "version": "1.0", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/uninstall.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.0": "init" - } - }, - "FileSoftLink": { - "name": "实时软连接", - "description": "监控目录文件变化,媒体文件软连接,其他文件可选复制。", - "labels": "文件管理", - "version": "1.9.7", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/softlink.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.9.7": "接收云盘实时监控处理单文件", - "v1.9.6": "优化log", - "v1.9.5": "增强交互命令", - "v1.9.4": "监控目录自定义监控模式", - "v1.9.3": "增强交互命令模糊匹配", - "v1.9.2": "增强交互命令模糊匹配", - "v1.9.1": "增强交互命令", - "v1.9": "交互命令定向软连接", - "v1.8": "修复bug", - "v1.6": "bug修复", - "v1.5": "优化性能,提高处理速度", - "v1.4": "支持自定义视频格式", - "v1.3": "异步启动" - } - }, - "SubscribeGroup": { - "name": "订阅规则自动填充", - "description": "电视剧下载后自动添加官组等信息到订阅;添加订阅后根据二级分类名称自定义订阅规则。", - "labels": "订阅", - "version": "2.7", - "icon": "teamwork.png", - "author": "thsrite", - "level": 2, - "history": { - "v2.7": "下载填充判断当前站点是否在已选订阅站点范围内", - "v2.6": "兼容属性值包含:号", - "v2.5": "操作历史Unicode编码转中文", - "v2.4": "保存路径支持变量{name} (订阅名称 (年份))", - "v2.3": "二级分类自定义填充支持保存路径", - "v2.1": "站点与官组分开,修复质量无填充", - "v2.0": "种子下载自定义填充支持自定义占位符", - "v1.8": "修复种子下载不填充bug", - "v1.7": "操作历史Unicode编码转中文", - "v1.6": "支持一行配置多个二级分类名称", - "v1.5": "支持操作历史", - "v1.4": "支持根据二级分类名称自定义订阅规则", - "v1.3": "增加质量、分辨率、特效信息填充", - "v1.2": "修复订阅已存在包含关键词和订阅站点" - } - }, - "EmbyMetaRefresh": { - "name": "Emby元数据刷新", - "description": "定时刷新Emby媒体库元数据。", - "labels": "Emby", - "version": "1.3", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/emby-icon.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.3": "支持自定义覆盖元数据、图片", - "v1.2": "支持获取Emby最新媒体刷新", - "v1.1": "添加远程交互命令", - "v1.0": "定时刷新Emby媒体库元数据" - } - }, - "EmbyMetaTag": { - "name": "Emby媒体标签", - "description": "自动给媒体库媒体添加标签。", - "labels": "Emby", - "version": "1.2", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/tag.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.2": "支持指定特殊媒体名称添加标签", - "v1.1": "添加远程交互命令", - "v1.0": "自动给媒体库媒体添加标签" - } - }, - "PopularSubscribe": { - "name": "热门媒体订阅", - "description": "自定添加热门媒体到订阅。", - "labels": "订阅", - "version": "1.7", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/popular.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.7": "调整订阅用户名,默认:热门订阅", - "v1.6": "调整历史unique唯一索引(可删除本次更新后的历史)", - "v1.5": "修复电视剧订阅、订阅历史展示", - "v1.4": "动漫单独订阅(本子佬启动!)", - "v1.3": "增加立即运行、历史删除按钮", - "v1.2": "增加历史删除按钮", - "v1.1": "修正流行度校验", - "v1.0": "自定添加热门媒体到订阅" - } - }, - "HomePage": { - "name": "HomePage", - "description": "HomePage自定义API。", - "labels": "工具", - "version": "1.2", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/homepage.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.2": "适配v1.9.1-beta(不生效就重启)", - "v1.1": "支持更多返回值、插件展示数据", - "v1.0": "HomePage自定义API" - } - }, - "DirMonitorEnhanced": { - "name": "目录监控", - "description": "监控目录文件发生变化时实时整理到媒体库。(统一入库消息增强版)(测试中-.-)", - "labels": "文件整理", - "version": "1.0", - "icon": "directory.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.0": "同步merge主仓库[目录监控]插件,增加统一发送消息逻辑(Testing…)" - } - }, - "SqlExecute": { - "name": "Sql执行器", - "description": "自定义MoviePilot数据库Sql执行。", - "labels": "工具", - "version": "1.2", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/sqlite.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.2": "调整交互命令返回信息", - "v1.1": "支持交互命令/sql [command]执行,需主程序1.9.4+", - "v1.0": "自定义MoviePilot数据库Sql执行" - } - }, - "CommandExecute": { - "name": "命令执行器", - "description": "自定义容器命令执行。", - "labels": "工具", - "version": "1.2", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/command.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.2": "调整交互命令返回信息", - "v1.1": "支持交互命令/cmd [sql]执行,需主程序1.9.4+", - "v1.0": "自定义容器命令执行" - } - }, - "CloudAssistant": { - "name": "云盘助手", - "description": "本地文件定时转移到云盘,软连接/strm回本地,定时清理无效软连接。", - "labels": "云盘", - "version": "2.1.5", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/cloudassistant.png", - "author": "thsrite", - "level": 99, - "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlgN7RtXlPNXoFE9B67ye\ny2mog/hDDrhBAIJogdvfAgBMZ1qVzIPcBfdjENPJ9kV/F+zOoh0CzEaDufM54ERT\nykK1pQw7yj7quRZDbv5byxVNqI8bJg8zQo8Q66SQ8SP+aftmpFrADKClQ8VcVYzZ\nJ+YDu9H9q+TcvBqVtLyKfAH5T9WAxn0bXEh4OgkJn7oO5eI5+Fsi6Aq9suVN/HyK\nz2bDr237GmXJT4YPn9s7kj4Rypzg2ldiuBwtVnaTw+xjZRlCRr4Gs0eFUIMUqnoQ\nip4Px8Mrq5cqHl0HrJ/av/pJLCN1icCgegYW63b2gjjJwmps9NGGOydRzgoFkqj0\nDwIDAQAB", - "history": { - "v2.1.5": "监控模式下自定义文件保留时长不生效", - "v2.1.4": "自定义文件保留时长,大于该值会被转移", - "v2.1.3": "修复消息通知", - "v2.1.2": "修复清理无效软连接", - "v2.1.1": "修复清理无效软连接", - "v2.1": "修复strm生成", - "v2.0.9": "修复未覆盖时删除监控文件", - "v2.0.8": "修复通知", - "v2.0.7": "修复通知标题", - "v2.0.6": "修复覆盖模式操作", - "v2.0.5": "修复媒体文件转移完但刮削文件未转移删除目录的问题", - "v2.0.4": "修复挂载目录log", - "v2.0.3": "修复默认值bug", - "v2.0.2": "插件自定义数据库操作,避免依赖主程序更新", - "v2.0.1": "修改若看参数名,具体看教程", - "v2.0": "调整通知图片", - "v1.9": "修复非媒体文件转移bug(需要主程序1.9.9+)", - "v1.8": "支持可选开启实时监控", - "v1.7": "转移完成发送消息通知(插件类型消息)", - "v1.6": "修复部分配置未生效bug", - "v1.5": "支持转移后删除源文件、删种", - "v1.4": "转移完删除本地文件时,支持自定义保留目录层级", - "v1.3": "完善逻辑,增加刷新emby媒体库(需要主程序1.9.8+)", - "v1.2": "移除cd2上传", - "v1.1": "支持cd2上传、支持定时清理无效软连接、支持strm生成方式", - "v1.0": "定时移动到云盘,软连接回本地(清理无效软连接暂未开发)" - } - }, - "Cd2Assistant": { - "name": "CloudDrive2助手", - "description": "监控上传任务,检测是否有异常,发送通知。", - "labels": "云盘", - "version": "1.6", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/clouddrive.png", - "author": "thsrite", - "level": 2, - "history": { - "v1.6": "支持交互命令云下载", - "v1.5": "增加云盘同步黑名单(排序挂载本地目录)", - "v1.4": "增加云盘存储空间展示", - "v1.3": "增加云盘Cookie失效检测", - "v1.2": "实时速率显示", - "v1.1": "交互命令重启cd2、获取cd2系统信息,支持仪表盘", - "v1.0": "监控上传任务,检测是否有异常,发送通知" - } - }, - "SoftLinkRedirect": { - "name": "软连接重定向", - "description": "重定向软连接指向。", - "labels": "云盘", - "version": "1.1", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/softlinkredirect.png", - "author": "thsrite", - "level": 2, - "history": { - "v1.1": "不删除软连接,强制更新重定向", - "v1.0": "重定向软连接指向" - } - }, - "CloudSyncDel": { - "name": "云盘同步删除", - "description": "媒体库删除软连接文件后,同步删除云盘文件。", - "labels": "云盘", - "version": "1.4", - "icon": "clouddisk.png", - "author": "thsrite", - "level": 2, - "history": { - "v1.4": "插件删除历史", - "v1.3.1": "添加log", - "v1.3": "同步删除thumb图片", - "v1.2": "修复删除bug", - "v1.1": "增加测试模式按钮(不删除文件)", - "v1.0": "媒体库删除软连接文件后,同步删除云盘文件" - } - }, - "LibraryDuplicateCheck": { - "name": "媒体库重复媒体检测", - "description": "媒体库重复媒体检查,可选保留规则保留其一。", - "labels": "云盘,媒体库", - "version": "1.9", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/libraryduplicate.png", - "author": "thsrite", - "level": 2, - "history": { - "v1.9": "修复删除软连接", - "v1.8": "仅检查模式下,预览操作不会删除任何文件。", - "v1.7": "修复特殊场景下删除问题", - "v1.6": "同步删除thumb图片等刮削文件", - "v1.5": "删除重复文件时再刷新媒体库逻辑", - "v1.4": "修复删除时文件不存在bug", - "v1.3": "各路径支持自定义保留规则", - "v1.2": "支持通知推送", - "v1.1": "支持自动刷新媒体库", - "v1.0": "媒体库重复媒体检查,可选择保留规则保留其一" - } - }, - "ActorSubscribePlus": { - "name": "演员作品订阅", - "description": "获取TMDB演员作品,并自动添加到订阅。", - "labels": "订阅", - "version": "1.0", - "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/actorsubscribeplus.png", - "author": "thsrite", - "level": 2, - "history": { - "v1.0": "获取TMDB演员作品,并自动添加到订阅" - } - } + "CloudStrm": { + "name": "云盘Strm生成", + "description": "监控文件创建,生成Strm文件。", + "labels": "云盘", + "version": "4.4", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/create.png", + "author": "thsrite", + "level": 1, + "history": { + "v4.4": "修复bug", + "v4.3": "回滚自定义媒体类型", + "v4.2": "扩展名转小写", + "v4.1": "支持自定义媒体类型", + "v4.0": "回归老版本", + "v3.8": "支持增量路径、支持自定义媒体类型(注:本次更新需修改配置使用)", + "v3.7": "api模式支持启用https", + "v3.6": "支持重建索引周期运行", + "v3.4": "交互命令", + "v3.1": "注册交互命令、注册公共服务", + "v3.0": "实现改为定时扫描" + } + }, + "CloudStrmIncrement": { + "name": "云盘Strm生成(增量版)", + "description": "监控文件创建,生成Strm文件(增量版)。", + "labels": "云盘", + "version": "1.1", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/create.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.1": "某种场景下可能出现卡死,修复bug", + "v1.0": "增量监控" + } + }, + "StrmConvert": { + "name": "Strm文件模式转换", + "description": "Strm文件内容转为本地路径或者cd2/alist API路径。", + "labels": "云盘", + "version": "1.0", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/convert.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.0": "Strm文件内容转为本地路径或者cd2/alist API路径" + } + }, + "SiteUnreadMsg": { + "name": "站点未读消息", + "description": "发送站点未读消息。", + "labels": "站点", + "version": "1.9", + "icon": "Synomail_A.png", + "author": "thsrite", + "level": 2, + "history": { + "v1.9": "同步主仓库", + "v1.8": "自定义保留消息天数", + "v1.7": "删除重复代码、依赖于[站点数据统计]插件", + "v1.6": "增加解析失败日志", + "v1.5": "修复馒头未读消息1", + "v1.4": "sync主仓库", + "v1.3": "feat mtorrent", + "v1.2": "站点消息历史存库", + "v1.1": "防止同一消息重复发送", + "v1.0": "定时获取站点消息" + } + }, + "SubscribeClear": { + "name": "清理订阅缓存", + "description": "清理订阅已下载集数。", + "labels": "订阅", + "version": "1.0", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/broom.png", + "author": "thsrite", + "level": 2, + "history": { + "v1.0": "清理订阅已下载集数" + } + }, + "DownloadTorrent": { + "name": "添加种子下载", + "description": "选择下载器,添加种子任务。", + "labels": "站点", + "version": "1.0", + "icon": "download.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.0": "删除下载器中该站点辅种,保留该站点没有辅种的种子" + } + }, + "RemoveTorrent": { + "name": "删除站点种子", + "description": "删除下载器中某站点种子。", + "labels": "站点", + "version": "1.2", + "icon": "delete.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.2": "修复删除种子bug", + "v1.1": "可选择删除有无辅种", + "v1.0": "选择下载器,添加种子任务" + } + }, + "PluginAutoUpdate": { + "name": "插件更新管理", + "description": "监测已安装插件,推送更新提醒,可配置自动更新。", + "labels": "自动更新,插件管理", + "version": "1.9.2", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/pluginupdate.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.9.2": "修复获取本地插件版本None,重新更新问题", + "v1.9.1": "修复bug", + "v1.9": "过滤相同ID插件,保留最新版本检查更新", + "v1.8": "修复已安装插件列表", + "v1.7": "插件API立即生效", + "v1.6": "插件重载,插件自动更新注册成为服务、命令", + "v1.5": "自动更新增加排除列表", + "v1.4": "正在运行的插件跳过更新,可选更新插件列表", + "v1.3": "配置更新提醒", + "v1.2": "重启后立即执行一遍更新插件", + "v1.1": "修复插件重载", + "v1.0": "监测已安装插件,自动更新最新版本" + } + }, + "PluginReInstall": { + "name": "插件强制重装", + "description": "卸载当前插件,强制重装。", + "labels": "插件管理", + "version": "1.7", + "icon": "refresh.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.7": "使用主程序GITHUB_PROXY代理", + "v1.6": "插件API立即生效", + "v1.5": "支持插件热重载", + "v1.4": "支持代理地址", + "v1.3": "插件重载", + "v1.2": "支持指定插件仓库地址", + "v1.1": "修复插件重载", + "v1.0": "卸载当前插件,强制重装" + } + }, + "SynologyNotify": { + "name": "群辉Webhook通知", + "description": "接收群辉webhook通知并推送。", + "labels": "消息通知", + "version": "1.1", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/synology.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.1": "修复bug", + "v1.0": "接收群辉webhook通知并推送" + } + }, + "SyncCookieCloud": { + "name": "同步CookieCloud", + "description": "同步MoviePilot站点Cookie到本地CookieCloud。", + "labels": "站点", + "version": "1.2", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/cookiecloud.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.2": "同步到本地CookieCloud", + "v1.1": "修复CookieCloud覆盖到浏览器", + "v1.0": "同步MoviePilot站点Cookie到CookieCloud" + } + }, + "ScheduleReminder": { + "name": "日程提醒", + "description": "自定义提醒事项、提醒时间。", + "labels": "消息通知", + "version": "1.0", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/reminder.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.0": "自定义提醒事项、提醒时间" + } + }, + "SubscribeReminder": { + "name": "订阅提醒", + "description": "推送当天订阅更新内容。", + "labels": "订阅", + "version": "1.1", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/subscribe_reminder.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.1": "fix icon", + "v1.0": "推送当天订阅更新内容" + } + }, + "EmbyReporter": { + "name": "Emby观影报告", + "description": "推送Emby观影报告,需Emby安装Playback Report 插件。", + "labels": "Emby", + "version": "1.6", + "icon": "Pydiocells_A.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.6": "fix #67", + "v1.5": "按观影市场排序", + "v1.4": "支持自定义emby && 支持每日一言", + "v1.3": "修复bug", + "v1.2": "过滤已删除媒体", + "v1.1": "修复推送", + "v1.0": "推送Emby观影报告" + } + }, + "ActorSubscribe": { + "name": "演员订阅", + "description": "自动订阅指定演员热映电影、电视剧。", + "labels": "订阅", + "version": "2.1", + "icon": "Mdcng_A.png", + "author": "thsrite", + "level": 2, + "history": { + "v2.1": "逻辑优化", + "v2.0": "修复订阅", + "v1.8": "支持自定义订阅username,默认`演员订阅`", + "v1.7": "修复bug", + "v1.6": "增加历史删除按钮", + "v1.5": "rename", + "v1.4": "支持多个订阅源", + "v1.3": "修复bug", + "v1.2": "修复订阅重复处理的bug", + "v1.1": "支持自定义分辨率、质量、特效", + "v1.0": "自动订阅豆瓣演员最新电影" + } + }, + "ShortPlayMonitor": { + "name": "短剧刮削", + "description": "监控视频短剧创建,刮削。", + "labels": "刮削", + "version": "3.2", + "icon": "Amule_B.png", + "author": "thsrite", + "level": 1, + "history": { + "v3.2": "支持消息发送", + "v3.1": "支持自定义转移方式", + "v3.0": "默认从tmdb刮削,刮削失败则从pt站刮削" + } + }, + "CloudLinkMonitor": { + "name": "云盘实时监控", + "description": "监控云盘目录文件变化,自动转移链接。", + "labels": "云盘", + "version": "2.4.6", + "icon": "Linkease_A.png", + "author": "thsrite", + "level": 1, + "history": { + "v2.4.6": "修复bug", + "v2.4.5": "联动实时软连接插件(近媒体文件)", + "v2.4.4": "修复刷新媒体库", + "v2.4.3": "可选转移完刷新媒体库", + "v2.4.2": "fix #65", + "v2.4.1": "增加log", + "v2.4": "修复二级目录", + "v2.3": "去除无效变量", + "v2.2": "优化配置一二级分类流程", + "v2.1": "可配置是否存储转移记录", + "v2.0": "修复不刮削不生效bug", + "v1.8": "fix S00转移", + "v1.7": "fix 刮削", + "v1.6": "可配置是否刮削", + "v1.5": "fix 消息推送", + "v1.4": "fix 转移后路径", + "v1.3": "修复bug", + "v1.2": "修复订阅重复处理的bug", + "v1.1": "自动转移链接(不刮削)", + "v1.0": "监控云盘目录文件变化,按原文件名软连接" + } + }, + "LinkToSrc": { + "name": "源文件恢复", + "description": "根据MoviePilot的转移记录中的硬链文件恢复源文件。", + "labels": "媒体库", + "version": "1.2", + "icon": "Time_machine_A.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.2": "fix 路径", + "v1.1": "支持指定需要恢复的硬链接目录", + "v1.0": "根据MoviePilot的转移记录中的硬链文件恢复源文件" + } + }, + "WeChatForward": { + "name": "微信消息转发", + "description": "根据正则转发通知到其他WeChat应用。", + "labels": "消息通知", + "version": "2.7", + "icon": "Wechat_A.png", + "author": "thsrite", + "level": 1, + "history": { + "v2.7": "特殊消息指定用户支持title匹配", + "v2.6": "已完成订阅额外消息查询订阅历史订阅用户", + "v2.5.1": "修复token过期重发未存储userid问题", + "v2.5": "增强额外消息发送", + "v2.4": "修复配置修改后不重建缓存bug", + "v2.3": "增加重建缓存,丰富转发历史", + "v2.2": "增加消息发送历史", + "v2.1": "微信配置持久化存库", + "v2.0": "优化微信配置,兼容旧版本配置", + "v1.6": "修改获取指定用户订阅列表方法", + "v1.5": "丰富日志", + "v1.4": "特定消息强制指定userid", + "v1.3": "防重复发送额外消息", + "v1.2": "fix规则", + "v1.1": "自定义发送额外消息", + "v1.0": "根据正则转发通知到其他WeChat应用" + } + }, + "SubscribeStatistic": { + "name": "订阅下载统计", + "description": "统计指定时间内各站点订阅及下载情况。", + "labels": "订阅", + "version": "1.5", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/subscribestatistic.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.5": "增加消息推送", + "v1.4": "无订阅站点也统计数量", + "v1.3": "fix 数据统计", + "v1.2": "fix 订阅数量", + "v1.1": "站点去重", + "v1.0": "统计指定时间内各站点订阅及下载情况" + } + }, + "CustomCommand": { + "name": "自定义命令", + "description": "自定义执行周期执行命令并推送结果。", + "labels": "自定义命令", + "version": "1.7", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/code.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.7": "自定义通知关键词", + "v1.6": "自定义保留消息天数", + "v1.5": "修复多个任务立即运行一次", + "v1.4": "fix icon", + "v1.3": "清除历史记录", + "v1.2": "增加执行历史", + "v1.1": "打印命令日志", + "v1.0": "自定义执行周期执行命令并推送结果" + } + }, + "DockerManager": { + "name": "docker自定义任务", + "description": "管理宿主机docker,自定义容器定时任务。", + "labels": "自定义命令", + "version": "1.3", + "icon": "Docker_F.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.3": "自定义保留消息天数", + "v1.2": "多个容器名,拼接", + "v1.1": "修复多个任务立即运行一次", + "v1.0": "init" + } + }, + "PluginUnInstall": { + "name": "插件彻底卸载", + "description": "删除数据库中已安装插件记录、清理插件文件。", + "labels": "插件管理", + "version": "1.0", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/uninstall.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.0": "init" + } + }, + "FileSoftLink": { + "name": "实时软连接", + "description": "监控目录文件变化,媒体文件软连接,其他文件可选复制。", + "labels": "文件管理", + "version": "1.9.7", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/softlink.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.9.7": "接收云盘实时监控处理单文件", + "v1.9.6": "优化log", + "v1.9.5": "增强交互命令", + "v1.9.4": "监控目录自定义监控模式", + "v1.9.3": "增强交互命令模糊匹配", + "v1.9.2": "增强交互命令模糊匹配", + "v1.9.1": "增强交互命令", + "v1.9": "交互命令定向软连接", + "v1.8": "修复bug", + "v1.6": "bug修复", + "v1.5": "优化性能,提高处理速度", + "v1.4": "支持自定义视频格式", + "v1.3": "异步启动" + } + }, + "SubscribeGroup": { + "name": "订阅规则自动填充", + "description": "电视剧下载后自动添加官组等信息到订阅;添加订阅后根据二级分类名称自定义订阅规则。", + "labels": "订阅", + "version": "2.7", + "icon": "teamwork.png", + "author": "thsrite", + "level": 2, + "history": { + "v2.7": "下载填充判断当前站点是否在已选订阅站点范围内", + "v2.6": "兼容属性值包含:号", + "v2.5": "操作历史Unicode编码转中文", + "v2.4": "保存路径支持变量{name} (订阅名称 (年份))", + "v2.3": "二级分类自定义填充支持保存路径", + "v2.1": "站点与官组分开,修复质量无填充", + "v2.0": "种子下载自定义填充支持自定义占位符", + "v1.8": "修复种子下载不填充bug", + "v1.7": "操作历史Unicode编码转中文", + "v1.6": "支持一行配置多个二级分类名称", + "v1.5": "支持操作历史", + "v1.4": "支持根据二级分类名称自定义订阅规则", + "v1.3": "增加质量、分辨率、特效信息填充", + "v1.2": "修复订阅已存在包含关键词和订阅站点" + } + }, + "EmbyMetaRefresh": { + "name": "Emby元数据刷新", + "description": "定时刷新Emby媒体库元数据。", + "labels": "Emby", + "version": "1.3", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/emby-icon.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.3": "支持自定义覆盖元数据、图片", + "v1.2": "支持获取Emby最新媒体刷新", + "v1.1": "添加远程交互命令", + "v1.0": "定时刷新Emby媒体库元数据" + } + }, + "EmbyMetaTag": { + "name": "Emby媒体标签", + "description": "自动给媒体库媒体添加标签。", + "labels": "Emby", + "version": "1.2", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/tag.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.2": "支持指定特殊媒体名称添加标签", + "v1.1": "添加远程交互命令", + "v1.0": "自动给媒体库媒体添加标签" + } + }, + "PopularSubscribe": { + "name": "热门媒体订阅", + "description": "自定添加热门媒体到订阅。", + "labels": "订阅", + "version": "1.7", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/popular.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.7": "调整订阅用户名,默认:热门订阅", + "v1.6": "调整历史unique唯一索引(可删除本次更新后的历史)", + "v1.5": "修复电视剧订阅、订阅历史展示", + "v1.4": "动漫单独订阅(本子佬启动!)", + "v1.3": "增加立即运行、历史删除按钮", + "v1.2": "增加历史删除按钮", + "v1.1": "修正流行度校验", + "v1.0": "自定添加热门媒体到订阅" + } + }, + "HomePage": { + "name": "HomePage", + "description": "HomePage自定义API。", + "labels": "工具", + "version": "1.2", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/homepage.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.2": "适配v1.9.1-beta(不生效就重启)", + "v1.1": "支持更多返回值、插件展示数据", + "v1.0": "HomePage自定义API" + } + }, + "DirMonitorEnhanced": { + "name": "目录监控", + "description": "监控目录文件发生变化时实时整理到媒体库。(统一入库消息增强版)(测试中-.-)", + "labels": "文件整理", + "version": "1.0", + "icon": "directory.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.0": "同步merge主仓库[目录监控]插件,增加统一发送消息逻辑(Testing…)" + } + }, + "SqlExecute": { + "name": "Sql执行器", + "description": "自定义MoviePilot数据库Sql执行。", + "labels": "工具", + "version": "1.2", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/sqlite.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.2": "调整交互命令返回信息", + "v1.1": "支持交互命令/sql [command]执行,需主程序1.9.4+", + "v1.0": "自定义MoviePilot数据库Sql执行" + } + }, + "CommandExecute": { + "name": "命令执行器", + "description": "自定义容器命令执行。", + "labels": "工具", + "version": "1.2", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/command.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.2": "调整交互命令返回信息", + "v1.1": "支持交互命令/cmd [sql]执行,需主程序1.9.4+", + "v1.0": "自定义容器命令执行" + } + }, + "CloudAssistant": { + "name": "云盘助手", + "description": "本地文件定时转移到云盘,软连接/strm回本地,定时清理无效软连接。", + "labels": "云盘", + "version": "2.1.5", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/cloudassistant.png", + "author": "thsrite", + "level": 99, + "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlgN7RtXlPNXoFE9B67ye\ny2mog/hDDrhBAIJogdvfAgBMZ1qVzIPcBfdjENPJ9kV/F+zOoh0CzEaDufM54ERT\nykK1pQw7yj7quRZDbv5byxVNqI8bJg8zQo8Q66SQ8SP+aftmpFrADKClQ8VcVYzZ\nJ+YDu9H9q+TcvBqVtLyKfAH5T9WAxn0bXEh4OgkJn7oO5eI5+Fsi6Aq9suVN/HyK\nz2bDr237GmXJT4YPn9s7kj4Rypzg2ldiuBwtVnaTw+xjZRlCRr4Gs0eFUIMUqnoQ\nip4Px8Mrq5cqHl0HrJ/av/pJLCN1icCgegYW63b2gjjJwmps9NGGOydRzgoFkqj0\nDwIDAQAB", + "history": { + "v2.1.5": "监控模式下自定义文件保留时长不生效", + "v2.1.4": "自定义文件保留时长,大于该值会被转移", + "v2.1.3": "修复消息通知", + "v2.1.2": "修复清理无效软连接", + "v2.1.1": "修复清理无效软连接", + "v2.1": "修复strm生成", + "v2.0.9": "修复未覆盖时删除监控文件", + "v2.0.8": "修复通知", + "v2.0.7": "修复通知标题", + "v2.0.6": "修复覆盖模式操作", + "v2.0.5": "修复媒体文件转移完但刮削文件未转移删除目录的问题", + "v2.0.4": "修复挂载目录log", + "v2.0.3": "修复默认值bug", + "v2.0.2": "插件自定义数据库操作,避免依赖主程序更新", + "v2.0.1": "修改若看参数名,具体看教程", + "v2.0": "调整通知图片", + "v1.9": "修复非媒体文件转移bug(需要主程序1.9.9+)", + "v1.8": "支持可选开启实时监控", + "v1.7": "转移完成发送消息通知(插件类型消息)", + "v1.6": "修复部分配置未生效bug", + "v1.5": "支持转移后删除源文件、删种", + "v1.4": "转移完删除本地文件时,支持自定义保留目录层级", + "v1.3": "完善逻辑,增加刷新emby媒体库(需要主程序1.9.8+)", + "v1.2": "移除cd2上传", + "v1.1": "支持cd2上传、支持定时清理无效软连接、支持strm生成方式", + "v1.0": "定时移动到云盘,软连接回本地(清理无效软连接暂未开发)" + } + }, + "Cd2Assistant": { + "name": "CloudDrive2助手", + "description": "监控上传任务,检测是否有异常,发送通知。", + "labels": "云盘", + "version": "1.6", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/clouddrive.png", + "author": "thsrite", + "level": 2, + "history": { + "v1.6": "支持交互命令云下载", + "v1.5": "增加云盘同步黑名单(排序挂载本地目录)", + "v1.4": "增加云盘存储空间展示", + "v1.3": "增加云盘Cookie失效检测", + "v1.2": "实时速率显示", + "v1.1": "交互命令重启cd2、获取cd2系统信息,支持仪表盘", + "v1.0": "监控上传任务,检测是否有异常,发送通知" + } + }, + "SoftLinkRedirect": { + "name": "软连接重定向", + "description": "重定向软连接指向。", + "labels": "云盘", + "version": "1.1", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/softlinkredirect.png", + "author": "thsrite", + "level": 2, + "history": { + "v1.1": "不删除软连接,强制更新重定向", + "v1.0": "重定向软连接指向" + } + }, + "CloudSyncDel": { + "name": "云盘同步删除", + "description": "媒体库删除软连接文件后,同步删除云盘文件。", + "labels": "云盘", + "version": "1.4", + "icon": "clouddisk.png", + "author": "thsrite", + "level": 2, + "history": { + "v1.4": "插件删除历史", + "v1.3.1": "添加log", + "v1.3": "同步删除thumb图片", + "v1.2": "修复删除bug", + "v1.1": "增加测试模式按钮(不删除文件)", + "v1.0": "媒体库删除软连接文件后,同步删除云盘文件" + } + }, + "LibraryDuplicateCheck": { + "name": "媒体库重复媒体检测", + "description": "媒体库重复媒体检查,可选保留规则保留其一。", + "labels": "云盘,媒体库", + "version": "1.9", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/libraryduplicate.png", + "author": "thsrite", + "level": 2, + "history": { + "v1.9": "修复删除软连接", + "v1.8": "仅检查模式下,预览操作不会删除任何文件。", + "v1.7": "修复特殊场景下删除问题", + "v1.6": "同步删除thumb图片等刮削文件", + "v1.5": "删除重复文件时再刷新媒体库逻辑", + "v1.4": "修复删除时文件不存在bug", + "v1.3": "各路径支持自定义保留规则", + "v1.2": "支持通知推送", + "v1.1": "支持自动刷新媒体库", + "v1.0": "媒体库重复媒体检查,可选择保留规则保留其一" + } + }, + "ActorSubscribePlus": { + "name": "演员作品订阅", + "description": "获取TMDB演员作品,并自动添加到订阅。", + "labels": "订阅", + "version": "1.0", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/actorsubscribeplus.png", + "author": "thsrite", + "level": 2, + "history": { + "v1.0": "获取TMDB演员作品,并自动添加到订阅" + } + }, + "FileCopy": { + "name": "文件复制", + "description": "自定义文件类型从源目录复制到目的目录。", + "labels": "工具", + "version": "1.0", + "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/copy_files.png", + "author": "thsrite", + "level": 1, + "history": { + "v1.0": "自定义文件类型从源目录复制到目的目录" + } + } } diff --git a/plugins/filecopy/__init__.py b/plugins/filecopy/__init__.py new file mode 100644 index 0000000..53e0485 --- /dev/null +++ b/plugins/filecopy/__init__.py @@ -0,0 +1,356 @@ +import datetime +import random +import threading +import time +from pathlib import Path +from typing import List, Tuple, Dict, Any + +import pytz +from apscheduler.schedulers.background import BackgroundScheduler +from apscheduler.triggers.cron import CronTrigger + +from app.core.config import settings +from app.log import logger +from app.plugins import _PluginBase +from app.utils.system import SystemUtils + +lock = threading.Lock() + + +class FileCopy(_PluginBase): + # 插件名称 + plugin_name = "文件复制" + # 插件描述 + plugin_desc = "自定义文件类型从源目录复制到目的目录。" + # 插件图标 + plugin_icon = "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/copy_files.png" + # 插件版本 + plugin_version = "1.0" + # 插件作者 + plugin_author = "thsrite" + # 作者主页 + author_url = "https://github.com/thsrite" + # 插件配置项ID前缀 + plugin_config_prefix = "filecopy_" + # 加载顺序 + plugin_order = 30 + # 可使用的用户级别 + auth_level = 1 + + # 私有属性 + _scheduler = None + _enabled = False + _onlyonce = False + _cron = None + _delay = None + _monitor_dirs = "" + # 存储源目录与目的目录关系 + _dirconf: Dict[str, Path] = {} + + _rmt_mediaext = None + + # 退出事件 + _event = threading.Event() + + def init_plugin(self, config: dict = None): + # 清空配置 + self._dirconf = {} + + # 读取配置 + if config: + self._enabled = config.get("enabled") + self._onlyonce = config.get("onlyonce") + self._monitor_dirs = config.get("monitor_dirs") or "" + self._cron = config.get("cron") + self._delay = config.get("delay") + self._rmt_mediaext = config.get("rmt_mediaext") or ".nfo, .jpg" + + # 停止现有任务 + self.stop_service() + + if self._enabled or self._onlyonce: + # 定时服务管理器 + self._scheduler = BackgroundScheduler(timezone=settings.TZ) + + # 读取目录配置 + monitor_dirs = self._monitor_dirs.split("\n") + if not monitor_dirs: + return + for mon_path in monitor_dirs: + # 格式源目录:目的目录 + if not mon_path: + continue + + # 存储目的目录 + if SystemUtils.is_windows(): + if mon_path.count(":") > 1: + paths = [mon_path.split(":")[0] + ":" + mon_path.split(":")[1], + mon_path.split(":")[2] + ":" + mon_path.split(":")[3]] + else: + paths = [mon_path] + else: + paths = mon_path.split(":") + + # 目的目录 + if len(paths) > 1: + mon_path = paths[0] + target_path = Path(paths[1]) + self._dirconf[mon_path] = target_path + else: + self._dirconf[mon_path] = None + + # 启用目录监控 + if self._enabled: + self._scheduler.add_job(func=self.copy_files, trigger='date', + run_date=datetime.datetime.now( + tz=pytz.timezone(settings.TZ)) + datetime.timedelta(seconds=3), + name=f"文件复制 {mon_path}") + # 运行一次定时服务 + if self._onlyonce: + logger.info("文件复制服务启动,立即运行一次") + self._scheduler.add_job(name="文件复制", func=self.copy_files, trigger='date', + run_date=datetime.datetime.now( + tz=pytz.timezone(settings.TZ)) + datetime.timedelta(seconds=3) + ) + # 关闭一次性开关 + self._onlyonce = False + # 保存配置 + self.__update_config() + + # 启动定时服务 + if self._scheduler.get_jobs(): + self._scheduler.print_jobs() + self._scheduler.start() + + def copy_files(self): + """ + 定时任务,复制文件 + """ + logger.info("开始全量复制监控目录 ...") + # 遍历所有监控目录 + for mon_path in self._dirconf.keys(): + target_path = self._dirconf[mon_path] + # 遍历目录下所有文件 + files = SystemUtils.list_files(Path(mon_path), [ext.strip() for ext in self._rmt_mediaext.split(",")]) + cnt = 0 + for file in files: + logger.info(f"开始处理本地文件:{file}") + cloud_file = str(file).replace(mon_path, str(target_path)) + if Path(cloud_file).exists(): + logger.info(f"{cloud_file} 文件已存在,跳过") + continue + state, _ = SystemUtils.copy(file, Path(cloud_file)) + print(f"{file} -> {cloud_file} {'成功' if state == 0 else '失败'}") + + # 随机延时 + if self._delay: + cnt += 1 + delays = self._delay.split(",") + if cnt >= int(delays[0]): + if str(delays[1]).count("-") == 1: + wait_time = random.randint(int(str(delays[1]).split("-")[0]), + int(str(delays[1]).split("-")[1])) + logger.info(f"随机延迟 {wait_time} 秒") + time.sleep(wait_time) + else: + delay = int(delays[1]) + logger.info(f"延迟 {delay} 秒") + time.sleep(delay) + cnt = 0 + + logger.info("全量复制监控目录完成!") + + def __update_config(self): + """ + 更新配置 + """ + self.update_config({ + "enabled": self._enabled, + "onlyonce": self._onlyonce, + "monitor_dirs": self._monitor_dirs, + "cron": self._cron, + "delay": self._delay, + "rmt_mediaext": self._rmt_mediaext + }) + + def get_state(self) -> bool: + return self._enabled + + @staticmethod + def get_command() -> List[Dict[str, Any]]: + pass + + def get_api(self) -> List[Dict[str, Any]]: + pass + + def get_service(self) -> List[Dict[str, Any]]: + """ + 注册插件公共服务 + [{ + "id": "服务ID", + "name": "服务名称", + "trigger": "触发器:cron/interval/date/CronTrigger.from_crontab()", + "func": self.xxx, + "kwargs": {} # 定时器参数 + }] + """ + if self._enabled and self._cron: + return [{ + "id": "FileCopy", + "name": "文件复制", + "trigger": CronTrigger.from_crontab(self._cron), + "func": self.copy_files, + "kwargs": {} + }] + return [] + + def get_form(self) -> Tuple[List[dict], Dict[str, Any]]: + return [ + { + 'component': 'VForm', + 'content': [ + { + 'component': 'VRow', + 'content': [ + { + 'component': 'VCol', + 'props': { + 'cols': 12, + 'md': 4 + }, + 'content': [ + { + 'component': 'VSwitch', + 'props': { + 'model': 'enabled', + 'label': '启用插件', + } + } + ] + }, + { + 'component': 'VCol', + 'props': { + 'cols': 12, + 'md': 4 + }, + 'content': [ + { + 'component': 'VSwitch', + 'props': { + 'model': 'onlyonce', + 'label': '立即运行一次', + } + } + ] + }, + ] + }, + { + 'component': 'VRow', + 'content': [ + { + 'component': 'VCol', + 'props': { + 'cols': 12, + 'md': 4 + }, + 'content': [ + { + 'component': 'VTextField', + 'props': { + 'model': 'cron', + 'label': '定时全量同步周期', + 'placeholder': '5位cron表达式,留空关闭' + } + } + ] + }, + { + 'component': 'VCol', + 'props': { + 'cols': 12, + 'md': 4 + }, + 'content': [ + { + 'component': 'VTextField', + 'props': { + 'model': 'delay', + 'label': '随机延时', + 'placeholder': '20,1-10 处理10个文件后随机延迟1-10秒' + } + } + ] + } + ] + }, + { + 'component': 'VRow', + 'content': [ + { + 'component': 'VCol', + 'props': { + 'cols': 12 + }, + 'content': [ + { + 'component': 'VTextarea', + 'props': { + 'model': 'monitor_dirs', + 'label': '监控目录', + 'rows': 5, + 'placeholder': '监控目录:转移目的目录' + } + } + ] + } + ] + }, + { + 'component': 'VRow', + 'content': [ + { + 'component': 'VCol', + 'props': { + 'cols': 12 + }, + 'content': [ + { + 'component': 'VTextarea', + 'props': { + 'model': 'rmt_mediaext', + 'label': '文件格式', + 'rows': 2, + 'placeholder': ".nfo, .jpg" + } + } + ] + } + ] + }, + ] + } + ], { + "enabled": False, + "onlyonce": False, + "monitor_dirs": "", + "cron": "", + "delay": "20,1-10", + "rmt_mediaext": ".nfo, .jpg" + } + + def get_page(self) -> List[dict]: + pass + + def stop_service(self): + """ + 退出插件 + """ + if self._scheduler: + self._scheduler.remove_all_jobs() + if self._scheduler.running: + self._event.set() + self._scheduler.shutdown() + self._event.clear() + self._scheduler = None