fix(plugin_store): 修复递代错误 (#1986)

- 在查找插件时使用 next() 函数的默认值 None,避免抛出 StopIteration 异常
- 增加对未找到插件的错误处理,返回相应的错误信息
- 优化了插件查找逻辑,提高了代码的健壮性和可读性

Co-authored-by: HibiKier <45528451+HibiKier@users.noreply.github.com>
This commit is contained in:
molanp 2025-07-17 19:01:02 +08:00 committed by GitHub
parent 91f35ad63a
commit 3cf7c1d237
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -198,7 +198,9 @@ class StoreManager:
except ValueError as e:
return str(e)
db_plugin_list = await cls.get_loaded_plugins("module")
plugin_info = next(p for p in plugin_list if p.module == plugin_key)
plugin_info = next((p for p in plugin_list if p.module == plugin_key), None)
if plugin_info is None:
return f"未找到插件 {plugin_key}"
if plugin_info.module in [p[0] for p in db_plugin_list]:
return f"插件 {plugin_info.name} 已安装,无需重复安装"
is_external = True
@ -307,7 +309,9 @@ class StoreManager:
plugin_key = await cls._resolve_plugin_key(plugin_id)
except ValueError as e:
return str(e)
plugin_info = next(p for p in plugin_list if p.module == plugin_key)
plugin_info = next((p for p in plugin_list if p.module == plugin_key), None)
if plugin_info is None:
return f"未找到插件 {plugin_key}"
path = BASE_PATH
if plugin_info.github_url:
path = BASE_PATH / "plugins"
@ -383,7 +387,9 @@ class StoreManager:
plugin_key = await cls._resolve_plugin_key(plugin_id)
except ValueError as e:
return str(e)
plugin_info = next(p for p in plugin_list if p.module == plugin_key)
plugin_info = next((p for p in plugin_list if p.module == plugin_key), None)
if plugin_info is None:
return f"未找到插件 {plugin_key}"
logger.info(f"尝试更新插件 {plugin_info.name}", LOG_COMMAND)
db_plugin_list = await cls.get_loaded_plugins("module", "version")
suc_plugin = {p[0]: (p[1] or "Unknown") for p in db_plugin_list}