添加插件管理功能,显示插件的相关信息。

This commit is contained in:
liuwei
2025-04-11 14:12:01 +08:00
parent 54a4295c7c
commit 4a860196e9

View File

@@ -132,10 +132,18 @@ class PluginManager:
try:
# 检查是否已有同名模块的插件加载
for name, plugin in self.plugins.items():
module_name = plugin.__class__.__module__.split('.')[-2]
if module_name == plugin_name:
self.LOG.info(f"PluginManager插件模块 {plugin_name} 已加载为 {name}")
return plugin
try:
module_name = plugin.__class__.__module__.split('.')[-2]
if module_name == plugin_name:
self.LOG.info(f"PluginManager插件模块 {plugin_name} 已加载为 {name}")
# 确保模块名到插件名的映射存在
if module_name not in self.module_to_plugin:
self.module_to_plugin[module_name] = name
self.LOG.info(f"PluginManager添加缺失的模块映射 {module_name} -> {name}")
return plugin
except (IndexError, AttributeError) as e:
self.LOG.warning(f"获取插件 {name} 的模块名时出错: {e}")
continue
# 如果插件已加载,直接返回
if plugin_name in self.plugins:
@@ -199,6 +207,10 @@ class PluginManager:
# 存储插件实例
self.plugins[plugin.name] = plugin
# 添加模块名到插件名的映射
self.module_to_plugin[plugin_name] = plugin.name
self.LOG.info(f"PluginManager添加模块映射 {plugin_name} -> {plugin.name}")
# 发布插件加载事件
EventSystem().publish(EventType.PLUGIN_LOADED, {"plugin": plugin})
@@ -230,7 +242,6 @@ class PluginManager:
# 注册插件
PluginRegistry().register(plugin)
# 在 load_plugin 方法中,修改存储插件实例的部分
# 存储插件实例
self.plugins[plugin.name] = plugin
@@ -238,8 +249,12 @@ class PluginManager:
try:
module_name = plugin.__class__.__module__.split('.')[-2]
self.module_to_plugin[module_name] = plugin.name
except (IndexError, AttributeError):
self.LOG.warning(f"无法为插件 {plugin.name} 获取有效的模块名")
self.LOG.info(f"PluginManager添加模块映射 {module_name} -> {plugin.name}")
except (IndexError, AttributeError) as e:
self.LOG.warning(f"无法为插件 {plugin.name} 获取有效的模块名: {e}")
# 使用传入的插件名作为备选
self.module_to_plugin[plugin_name] = plugin.name
self.LOG.info(f"PluginManager使用备选模块映射 {plugin_name} -> {plugin.name}")
# 发布插件加载事件
EventSystem().publish(EventType.PLUGIN_LOADED, {"plugin": plugin})
@@ -459,8 +474,34 @@ class PluginManager:
try:
module_name = plugin.__class__.__module__.split('.')[-2]
if module_name == plugin_name:
# 顺便更新映射
if module_name not in self.module_to_plugin:
self.module_to_plugin[module_name] = name
self.LOG.info(f"PluginManager添加缺失的模块映射 {module_name} -> {name}")
return name, plugin
# 不区分大小写比较
if module_name.lower() == plugin_name.lower():
if module_name not in self.module_to_plugin:
self.module_to_plugin[module_name] = name
return name, plugin
# 检查插件名是否包含在模块名中(不区分大小写)
if plugin_name.lower() in module_name.lower():
return name, plugin
# 检查模块名是否包含在插件名中(不区分大小写)
if module_name.lower() in plugin_name.lower():
return name, plugin
# 检查插件名是否包含在显示名称中(不区分大小写)
if plugin_name.lower() in name.lower():
return name, plugin
except (IndexError, AttributeError):
continue
# 记录未找到插件的详细信息,帮助调试
self.LOG.warning(f"未找到插件: {plugin_name},当前已加载插件: {list(self.plugins.keys())}")
self.LOG.warning(f"模块映射: {self.module_to_plugin}")
return None, None