diff --git a/app/api/endpoints/plugin.py b/app/api/endpoints/plugin.py index e3e8590b..b8aeac52 100644 --- a/app/api/endpoints/plugin.py +++ b/app/api/endpoints/plugin.py @@ -30,6 +30,25 @@ def installed_plugins(db: Session = Depends(get_db), return SystemConfigOper(db).get(SystemConfigKey.UserInstalledPlugins) or [] +@router.get("/install/{plugin_id}", summary="安装插件", response_model=schemas.Response) +def install_plugin(plugin_id: str, + db: Session = Depends(get_db), + _: schemas.TokenPayload = Depends(verify_token)) -> Any: + """ + 安装插件 + """ + # 已安装插件 + install_plugins = SystemConfigOper(db).get(SystemConfigKey.UserInstalledPlugins) or [] + # 安装插件 + if plugin_id not in install_plugins: + install_plugins.append(plugin_id) + # 保存设置 + SystemConfigOper(db).set(SystemConfigKey.UserInstalledPlugins, install_plugins) + # 重载插件管理器 + PluginManager().init_config() + return schemas.Response(success=True) + + @router.get("/{plugin_id}", summary="获取插件配置") def plugin_config(plugin_id: str, _: schemas.TokenPayload = Depends(verify_token)) -> dict: """ @@ -48,24 +67,6 @@ def set_plugin_config(plugin_id: str, conf: dict, return schemas.Response(success=True) -@router.post("/{plugin_id}/install", summary="安装插件", response_model=schemas.Response) -def install_plugin(plugin_id: str, - db: Session = Depends(get_db), - _: schemas.TokenPayload = Depends(verify_token)) -> Any: - """ - 安装插件 - """ - # 已安装插件 - install_plugins = SystemConfigOper(db).get(SystemConfigKey.UserInstalledPlugins) or [] - # 安装插件 - install_plugins.append(plugin_id) - # 保存设置 - SystemConfigOper(db).set(SystemConfigKey.UserInstalledPlugins, install_plugins) - # 重载插件管理器 - PluginManager().init_config() - return schemas.Response(success=True) - - @router.delete("/{plugin_id}", summary="卸载插件", response_model=schemas.Response) def uninstall_plugin(plugin_id: str, db: Session = Depends(get_db), diff --git a/app/core/plugin.py b/app/core/plugin.py index 265af754..9b0e5269 100644 --- a/app/core/plugin.py +++ b/app/core/plugin.py @@ -42,6 +42,8 @@ class PluginManager(metaclass=Singleton): "app.plugins", filter_func=lambda _, obj: hasattr(obj, 'init_plugin') ) + # 已安装插件 + installed_plugins = self.systemconfig.get(SystemConfigKey.UserInstalledPlugins) or [] # 排序 plugins.sort(key=lambda x: x.plugin_order if hasattr(x, "plugin_order") else 0) self._running_plugins = {} @@ -51,6 +53,9 @@ class PluginManager(metaclass=Singleton): try: # 存储Class self._plugins[plugin_id] = plugin + # 未安装的不加载 + if plugin_id not in installed_plugins: + continue # 生成实例 plugin_obj = plugin() # 生效插件配置