From 3318efc4ff9dc6ee7982773c6fcb4a53e6e348fb Mon Sep 17 00:00:00 2001 From: thsrite Date: Thu, 24 Oct 2024 13:22:50 +0800 Subject: [PATCH] =?UTF-8?q?feat=20PluginUnInstall=20v1.1=20=E5=8F=AF?= =?UTF-8?q?=E9=80=89=E5=88=A0=E9=99=A4=E6=8F=92=E4=BB=B6=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=8F=8A=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- package.json | 3 +- plugins/pluginuninstall/__init__.py | 54 +++++++++++++++++++++++++++-- 3 files changed, 54 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a57f4f9..d8da894 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ MoviePilot三方插件市场:https://github.com/thsrite/MoviePilot-Plugins/ 35. 订阅下载统计 v1.6 `统计指定时间内各站点订阅及下载情况。` 36. [自定义命令 v1.7](docs%2FCustomCommand.md) `自定义执行周期执行命令并推送结果。` 37. docker自定义任务 v1.3 `管理宿主机docker,自定义容器定时任务。` -38. 插件彻底卸载 v1.0 `删除数据库中已安装插件记录、清理插件文件。` +38. 插件彻底卸载 v1.1 `删除数据库中已安装插件记录、清理插件文件。` 39. 实时软连接 v2.0.1 `监控目录文件变化,媒体文件软连接,其他文件可选复制。` 40. 订阅规则自动填充 v2.7 `电视剧下载后自动添加官组等信息到订阅;添加订阅后根据二级分类名称自定义订阅规则。` 41. Emby元数据刷新 v1.7.3 `定时刷新Emby媒体库元数据,演职人员中文。` diff --git a/package.json b/package.json index ca226ea..b0cb749 100644 --- a/package.json +++ b/package.json @@ -403,12 +403,13 @@ "name": "插件彻底卸载", "description": "删除数据库中已安装插件记录、清理插件文件。", "labels": "插件管理", - "version": "1.0", + "version": "1.1", "icon": "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/uninstall.png", "author": "thsrite", "level": 1, "v2": true, "history": { + "v1.1": "可选删除插件配置及数据", "v1.0": "init" } }, diff --git a/plugins/pluginuninstall/__init__.py b/plugins/pluginuninstall/__init__.py index 689b2ea..2c0bcd2 100644 --- a/plugins/pluginuninstall/__init__.py +++ b/plugins/pluginuninstall/__init__.py @@ -2,6 +2,7 @@ import shutil from pathlib import Path from app.core.config import settings +from app.core.plugin import PluginManager from app.db.systemconfig_oper import SystemConfigOper from app.helper.plugin import PluginHelper from app.plugins import _PluginBase @@ -19,7 +20,7 @@ class PluginUnInstall(_PluginBase): # 插件图标 plugin_icon = "https://raw.githubusercontent.com/thsrite/MoviePilot-Plugins/main/icons/uninstall.png" # 插件版本 - plugin_version = "1.0" + plugin_version = "1.1" # 插件作者 plugin_author = "thsrite" # 作者主页 @@ -33,10 +34,14 @@ class PluginUnInstall(_PluginBase): # 私有属性 _plugin_ids = [] + _clear_config = False + _clear_data = False def init_plugin(self, config: dict = None): if config: self._plugin_ids = config.get("plugin_ids") or [] + self._clear_config = config.get("clear_config") + self._clear_data = config.get("clear_data") if not self._plugin_ids: return @@ -50,6 +55,12 @@ class PluginUnInstall(_PluginBase): plugin_dir = Path(settings.ROOT_PATH) / "app" / "plugins" / install_plugin.lower() if plugin_dir.exists(): shutil.rmtree(plugin_dir, ignore_errors=True) + if self._clear_config: + # 删除配置 + PluginManager().delete_plugin_config(install_plugin) + if self._clear_data: + # 删除插件所有数据 + PluginManager().delete_plugin_data(install_plugin) logger.info(f"插件 {install_plugin} 已卸载") else: new_install_plugins.append(install_plugin) @@ -58,7 +69,9 @@ class PluginUnInstall(_PluginBase): SystemConfigOper().set(SystemConfigKey.UserInstalledPlugins, new_install_plugins) self.update_config({ - "plugin_ids": "" + "plugin_ids": "", + "clear_config": self._clear_config, + "clear_data": self._clear_data }) def get_state(self) -> bool: @@ -97,6 +110,39 @@ class PluginUnInstall(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, + 'md': 3 + }, + 'content': [ + { + 'component': 'VSwitch', + 'props': { + 'model': 'clear_config', + 'label': '清除配置', + } + } + ] + }, + { + 'component': 'VCol', + 'props': { + 'cols': 12, + 'md': 3 + }, + 'content': [ + { + 'component': 'VSwitch', + 'props': { + 'model': 'clear_data', + 'label': '清除数据', + } + } + ] + }, + { + 'component': 'VCol', + 'props': { + 'cols': 12, + 'md': 6 }, 'content': [ { @@ -137,7 +183,9 @@ class PluginUnInstall(_PluginBase): ] } ], { - "plugin_ids": [] + "plugin_ids": [], + "clear_config": False, + "clear_data": False } @staticmethod