add plugin weight to PluginDescriptor... so the plugin start order can be changed now
[vuplus_dvbapp] / lib / python / Components / PluginComponent.py
index 60f7673..a713c3b 100755 (executable)
@@ -14,6 +14,7 @@ class PluginComponent:
        def __init__(self):
                self.plugins = {}
                self.pluginList = [ ]
+               self.installedPluginList = [ ]
                self.setPluginPrefix("Plugins.")
                self.resetWarnings()
 
@@ -21,21 +22,14 @@ class PluginComponent:
                self.prefix = prefix
 
        def addPlugin(self, plugin):
-               if self.firstRun:
+               if self.firstRun or plugin.needsRestart is False:
                        self.pluginList.append(plugin)
                        for x in plugin.where:
                                self.plugins.setdefault(x, []).append(plugin)
                                if x == PluginDescriptor.WHERE_AUTOSTART:
                                        plugin(reason=0)
                else:
-                       if plugin.needsRestart is False:
-                               self.pluginList.append(plugin)
-                               for x in plugin.where:
-                                       self.plugins.setdefault(x, []).append(plugin)
-                                       if x == PluginDescriptor.WHERE_AUTOSTART:
-                                               plugin(reason=0)                                
-                       else:
-                               self.restartRequired = True
+                       self.restartRequired = True
                                
        def removePlugin(self, plugin):
                self.pluginList.remove(plugin)
@@ -80,6 +74,7 @@ class PluginComponent:
                                                        plugins = [ plugins ]
 
                                                for p in plugins:
+                                                       p.path = path
                                                        p.updateIcon(path)
                                                        new_plugins.append(p)
 
@@ -98,17 +93,25 @@ class PluginComponent:
                #ignore already installed but reloaded plugins
                for p in plugins_removed: 
                        for pa in plugins_added:
-                               if pa.name == p.name and pa.where == p.where:
+                               if pa.path == p.path and pa.where == p.where:
                                        pa.needsRestart = False
 
                for p in plugins_removed:
                        self.removePlugin(p)
 
                for p in plugins_added:
-                       self.addPlugin(p)
-               
+                       if self.firstRun or p.needsRestart is False:
+                               self.addPlugin(p)
+                       else:
+                               for installed_plugin in self.installedPluginList:
+                                       if installed_plugin.path == p.path:
+                                               if installed_plugin.where == p.where:
+                                                       p.needsRestart = False
+                               self.addPlugin(p)
+                                               
                if self.firstRun:
                        self.firstRun = False
+                       self.installedPluginList = self.pluginList
 
        def getPlugins(self, where):
                """Get list of plugins in a specific category"""
@@ -119,13 +122,14 @@ class PluginComponent:
 
                for x in where:
                        res.extend(self.plugins.get(x, [ ]))
-
-               return  res
+               res.sort(key=lambda x:x.weight)
+               return res
 
        def getPluginsForMenu(self, menuid):
                res = [ ]
                for p in self.getPlugins(PluginDescriptor.WHERE_MENU):
                        res += p(menuid)
+               res.sort(key=lambda x:x.weight)
                return res
 
        def clearPluginList(self):