11# -*- coding: utf-8 -*-
22# @Author : LG
33import os
4- import importlib
5- import inspect
4+ from importlib .metadata import entry_points
65from ISAT .ui .plugin_manager_dialog import Ui_Dialog
7- from ISAT .widgets .plugin_base import PluginBase
86from PyQt5 import QtWidgets , QtCore , QtGui
9- import sys
107
118
129class PluginManagerDialog (QtWidgets .QDialog , Ui_Dialog ):
@@ -30,49 +27,19 @@ def __init__(self, parent, mainwindow):
3027
3128 def load_plugins (self ):
3229 self .tableWidget .setRowCount (0 )
33- """从插件目录加载所有插件"""
3430 print ('loading plugins' )
35- if not os .path .exists (self .plugin_dir ):
36- os .makedirs (self .plugin_dir )
37- return
38-
39- for plugin_name in os .listdir (self .plugin_dir ):
40- plugin_path = os .path .join (self .plugin_dir , plugin_name )
41- if os .path .isdir (plugin_path ):
42- self ._load_single_plugin (plugin_path , plugin_name )
43-
44- self .update_gui ()
45-
46- def _load_single_plugin (self , plugin_path , plugin_name ):
47- """加载单个插件"""
48- init_path = os .path .join (plugin_path , "main.py" )
49- module_name = f"plugins.{ plugin_name } "
50-
51- if os .path .exists (init_path ):
31+ eps = entry_points ().get ("isat.plugins" , [])
32+ for ep in eps :
5233 try :
53- # 动态导入插件模块
54- spec = importlib .util .spec_from_file_location (module_name , init_path )
55- plugin_module = importlib .util .module_from_spec (spec )
56- sys .modules [module_name ] = plugin_module
57- spec .loader .exec_module (plugin_module )
58-
59- # 查找插件实现类
60- for name , obj in inspect .getmembers (plugin_module ):
61- if inspect .isclass (obj ) and issubclass (obj , PluginBase ) and obj != PluginBase :
62- plugin_instance = obj ()
63- self ._initialize_plugin (plugin_instance )
64-
34+ plugin_class = ep .load ()
35+ plugin_instance = plugin_class ()
36+ plugin_instance .init_plugin (self .mainwindow )
37+ self .plugins .append (plugin_instance )
38+ print ('loaded plugin: ' , plugin_instance .get_plugin_name ())
6539 except Exception as e :
66- print (f"Failed to load plugin { plugin_name } : { str (e )} " )
67-
68- def _initialize_plugin (self , plugin_instance ):
69- """初始化插件"""
70- try :
71- plugin_instance .init_plugin (self .mainwindow )
72- self .plugins .append (plugin_instance )
73- print (f"Loaded plugin: { plugin_instance .get_plugin_name ()} " )
74- except Exception as e :
75- print (f"Failed to initialize plugin: { str (e )} " )
40+ print ('failed to load plugin [{ep}]: ' , e )
41+
42+ self .update_gui ()
7643
7744 def update_gui (self ):
7845 self .tableWidget .setRowCount (0 )
0 commit comments