From 15482e398b8b72aa343865ec3aa21e6c73e017dc Mon Sep 17 00:00:00 2001 From: Junyan Qin Date: Sat, 9 Nov 2024 23:25:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8F=92=E4=BB=B6=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/http/controller/groups/plugins.py | 15 +++++++++++++++ pkg/plugin/installer.py | 1 + pkg/plugin/installers/github.py | 5 ++++- pkg/plugin/manager.py | 3 ++- web/src/components/PluginCard.vue | 8 ++++---- web/src/pages/Plugins.vue | 14 +++++++++++++- 6 files changed, 39 insertions(+), 7 deletions(-) diff --git a/pkg/api/http/controller/groups/plugins.py b/pkg/api/http/controller/groups/plugins.py index c78daf31..ef30f3a9 100644 --- a/pkg/api/http/controller/groups/plugins.py +++ b/pkg/api/http/controller/groups/plugins.py @@ -43,6 +43,21 @@ class PluginsRouterGroup(group.RouterGroup): return self.success(data={ 'task_id': wrapper.id }) + + @self.route('//', methods=['DELETE']) + async def _(author: str, plugin_name: str) -> str: + ctx = taskmgr.TaskContext.new() + wrapper = self.ap.task_mgr.create_user_task( + self.ap.plugin_mgr.uninstall_plugin(plugin_name, task_context=ctx), + kind="plugin-operation", + name=f'plugin-remove-{plugin_name}', + label=f'删除插件 {plugin_name}', + context=ctx + ) + + return self.success(data={ + 'task_id': wrapper.id + }) @self.route('/reorder', methods=['PUT']) async def _() -> str: diff --git a/pkg/plugin/installer.py b/pkg/plugin/installer.py index 042d2ecf..b9ffab8b 100644 --- a/pkg/plugin/installer.py +++ b/pkg/plugin/installer.py @@ -31,6 +31,7 @@ class PluginInstaller(metaclass=abc.ABCMeta): async def uninstall_plugin( self, plugin_name: str, + task_context: taskmgr.TaskContext = taskmgr.TaskContext.placeholder(), ): """卸载插件 """ diff --git a/pkg/plugin/installers/github.py b/pkg/plugin/installers/github.py index 6b0f5fda..45439579 100644 --- a/pkg/plugin/installers/github.py +++ b/pkg/plugin/installers/github.py @@ -119,6 +119,7 @@ class GitHubRepoInstaller(installer.PluginInstaller): async def uninstall_plugin( self, plugin_name: str, + task_context: taskmgr.TaskContext = taskmgr.TaskContext.placeholder(), ): """卸载插件 """ @@ -127,7 +128,9 @@ class GitHubRepoInstaller(installer.PluginInstaller): if plugin_container is None: raise errors.PluginInstallerError('插件不存在或未成功加载') else: - shutil.rmtree(plugin_container.pkg_path) + task_context.trace("删除插件目录...", "uninstall-plugin") + await aioshutil.rmtree(plugin_container.pkg_path) + task_context.trace("完成, 重新加载以生效.", "uninstall-plugin") async def update_plugin( self, diff --git a/pkg/plugin/manager.py b/pkg/plugin/manager.py index a1e50ad8..ea9c4371 100644 --- a/pkg/plugin/manager.py +++ b/pkg/plugin/manager.py @@ -83,10 +83,11 @@ class PluginManager: async def uninstall_plugin( self, plugin_name: str, + task_context: taskmgr.TaskContext = taskmgr.TaskContext.placeholder(), ): """卸载插件 """ - await self.installer.uninstall_plugin(plugin_name) + await self.installer.uninstall_plugin(plugin_name, task_context) plugin_container = self.get_plugin_by_name(plugin_name) diff --git a/web/src/components/PluginCard.vue b/web/src/components/PluginCard.vue index 87c83818..899e0329 100644 --- a/web/src/components/PluginCard.vue +++ b/web/src/components/PluginCard.vue @@ -59,7 +59,7 @@ const props = defineProps({ }, }); -const emit = defineEmits(['toggle', 'update', 'uninstall']); +const emit = defineEmits(['toggle', 'update', 'remove']); const openGithubSource = () => { window.open(props.plugin.source, '_blank'); @@ -73,8 +73,8 @@ const updatePlugin = () => { emit('update', props.plugin); } -const uninstallPlugin = () => { - emit('uninstall', props.plugin); +const removePlugin = () => { + emit('remove', props.plugin); } const menuItems = [ @@ -96,7 +96,7 @@ const menuItems = [ { title: '删除', condition: (plugin) => true, - action: uninstallPlugin + action: removePlugin } ] diff --git a/web/src/pages/Plugins.vue b/web/src/pages/Plugins.vue index 03db36c9..abd85e53 100644 --- a/web/src/pages/Plugins.vue +++ b/web/src/pages/Plugins.vue @@ -80,7 +80,7 @@
+ @toggle="togglePlugin" @update="updatePlugin" @remove="removePlugin" />
@@ -141,6 +141,18 @@ const updatePlugin = (plugin) => { }) } +const removePlugin = (plugin) => { + proxy.$axios.delete(`/plugins/${plugin.author}/${plugin.name}`).then(res => { + if (res.data.code != 0) { + snackbar.error(res.data.msg) + return + } + snackbar.success(`已添加删除任务 请到任务列表查看进度`) + }).catch(error => { + snackbar.error(error) + }) +} + const installPlugin = () => { if (installDialogSource.value == '' || installDialogSource.value.trim() == '') {