feat:插件API支持类型过滤

This commit is contained in:
jxxghp 2024-02-21 15:59:53 +08:00
parent 7304fad460
commit 32dc0f69f9

View File

@ -13,39 +13,50 @@ router = APIRouter()
@router.get("/", summary="所有插件", response_model=List[schemas.Plugin]) @router.get("/", summary="所有插件", response_model=List[schemas.Plugin])
def all_plugins(_: schemas.TokenPayload = Depends(verify_token)) -> Any: def all_plugins(_: schemas.TokenPayload = Depends(verify_token), state: str = "all") -> Any:
""" """
查询所有插件清单包括本地插件和在线插件 查询所有插件清单包括本地插件和在线插件插件状态installed, market, all
""" """
plugins = []
# 本地插件 # 本地插件
local_plugins = PluginManager().get_local_plugins() local_plugins = PluginManager().get_local_plugins()
# 已安装插件
installed_plugins = [plugin for plugin in local_plugins if plugin.get("installed")]
# 未安装的本地插件
not_installed_plugins = [plugin for plugin in local_plugins if not plugin.get("installed")]
if state == "installed":
return installed_plugins
# 在线插件 # 在线插件
online_plugins = PluginManager().get_online_plugins() online_plugins = PluginManager().get_online_plugins()
if not online_plugins: if not online_plugins:
# 没有获取在线插件
if state == "market":
# 返回未安装的本地插件
return not_installed_plugins
return local_plugins return local_plugins
# 插件市场插件清单
market_plugins = []
# 已安装插件IDS # 已安装插件IDS
installed_ids = [plugin["id"] for plugin in local_plugins if plugin.get("installed")] _installed_ids = [plugin["id"] for plugin in installed_plugins]
# 已经安装的本地
plugins.extend([plugin for plugin in local_plugins if plugin.get("installed")])
# 未安装的线上插件或者有更新的插件 # 未安装的线上插件或者有更新的插件
for plugin in online_plugins: for plugin in online_plugins:
if plugin["id"] not in installed_ids: if plugin["id"] not in _installed_ids:
plugins.append(plugin) market_plugins.append(plugin)
elif plugin.get("has_update"): elif plugin.get("has_update"):
plugin["installed"] = False plugin["installed"] = False
plugins.append(plugin) market_plugins.append(plugin)
# 本地插件存在但未安装且本地插件不在online插件中 # 未安装的本地插件,且不在线上插件中
plugin_ids = [plugin["id"] for plugin in plugins] _plugin_ids = [plugin["id"] for plugin in market_plugins]
for plugin in local_plugins: for plugin in local_plugins:
if plugin["id"] not in installed_ids \ if plugin["id"] not in _installed_ids \
and plugin["id"] not in plugin_ids: and plugin["id"] not in _plugin_ids:
plugins.append(plugin) market_plugins.append(plugin)
return plugins return market_plugins
@router.get("/installed", summary="已安装插件", response_model=List[str]) @router.get("/installed", summary="已安装插件", response_model=List[str])
def installed_plugins(_: schemas.TokenPayload = Depends(verify_token)) -> Any: def installed(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
""" """
查询用户已安装插件清单 查询用户已安装插件清单
""" """
@ -53,10 +64,10 @@ def installed_plugins(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
@router.get("/install/{plugin_id}", summary="安装插件", response_model=schemas.Response) @router.get("/install/{plugin_id}", summary="安装插件", response_model=schemas.Response)
def install_plugin(plugin_id: str, def install(plugin_id: str,
repo_url: str = "", repo_url: str = "",
force: bool = False, force: bool = False,
_: schemas.TokenPayload = Depends(verify_token)) -> Any: _: schemas.TokenPayload = Depends(verify_token)) -> Any:
""" """
安装插件 安装插件
""" """