fix plugin

This commit is contained in:
jxxghp 2023-07-20 17:25:32 +08:00
parent 87e50b72da
commit 25c1f1e32b
2 changed files with 24 additions and 18 deletions

View File

@ -30,6 +30,25 @@ def installed_plugins(db: Session = Depends(get_db),
return SystemConfigOper(db).get(SystemConfigKey.UserInstalledPlugins) or [] 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="获取插件配置") @router.get("/{plugin_id}", summary="获取插件配置")
def plugin_config(plugin_id: str, _: schemas.TokenPayload = Depends(verify_token)) -> dict: 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) 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) @router.delete("/{plugin_id}", summary="卸载插件", response_model=schemas.Response)
def uninstall_plugin(plugin_id: str, def uninstall_plugin(plugin_id: str,
db: Session = Depends(get_db), db: Session = Depends(get_db),

View File

@ -42,6 +42,8 @@ class PluginManager(metaclass=Singleton):
"app.plugins", "app.plugins",
filter_func=lambda _, obj: hasattr(obj, 'init_plugin') 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) plugins.sort(key=lambda x: x.plugin_order if hasattr(x, "plugin_order") else 0)
self._running_plugins = {} self._running_plugins = {}
@ -51,6 +53,9 @@ class PluginManager(metaclass=Singleton):
try: try:
# 存储Class # 存储Class
self._plugins[plugin_id] = plugin self._plugins[plugin_id] = plugin
# 未安装的不加载
if plugin_id not in installed_plugins:
continue
# 生成实例 # 生成实例
plugin_obj = plugin() plugin_obj = plugin()
# 生效插件配置 # 生效插件配置