feat(plugin_system): 实现 on_plugin_loaded 异步钩子

在插件成功加载和注册后,添加一个新的生命周期钩子 `on_plugin_loaded`。

此钩子允许插件在加载完成后执行异步的初始化任务,例如建立数据库连接、加载数据或启动后台服务。通过使用 `asyncio.create_task`,确保了钩子的执行不会阻塞插件的加载流程,从而提高了系统的响应性和健壮性。
This commit is contained in:
tt-P607
2025-09-01 11:38:20 +08:00
parent 30e66d5938
commit da4dd63fd3

View File

@@ -197,6 +197,18 @@ class PluginManager:
if plugin_instance.register_plugin():
self.loaded_plugins[plugin_name] = plugin_instance
self._show_plugin_components(plugin_name)
# 检查并调用 on_plugin_loaded 钩子(如果存在)
if hasattr(plugin_instance, "on_plugin_loaded") and callable(
getattr(plugin_instance, "on_plugin_loaded")
):
logger.debug(f"为插件 '{plugin_name}' 调用 on_plugin_loaded 钩子")
try:
# 使用 asyncio.create_task 确保它不会阻塞加载流程
asyncio.create_task(plugin_instance.on_plugin_loaded())
except Exception as e:
logger.error(f"调用插件 '{plugin_name}' 的 on_plugin_loaded 钩子时出错: {e}")
return True, 1
else:
self.failed_plugins[plugin_name] = "插件注册失败"