import keymapparser
class PluginComponent:
+ firstRun = True
+ restartRequired = False
+
def __init__(self):
self.plugins = {}
self.pluginList = [ ]
+ self.installedPluginList = [ ]
self.setPluginPrefix("Plugins.")
self.resetWarnings()
self.prefix = prefix
def addPlugin(self, plugin):
- self.pluginList.append(plugin)
- for x in plugin.where:
- self.plugins.setdefault(x, []).append(plugin)
- if x == PluginDescriptor.WHERE_AUTOSTART:
- plugin(reason=0)
-
+ 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:
+ self.restartRequired = True
+
def removePlugin(self, plugin):
self.pluginList.remove(plugin)
for x in plugin.where:
for pluginname in os_listdir(directory_category):
path = directory_category + "/" + pluginname
if os_path.isdir(path):
- if fileExists(path + "/plugin.pyc") or fileExists(path + "/plugin.py"):
+ if fileExists(path + "/plugin.pyc") or fileExists(path + "/plugin.pyo") or fileExists(path + "/plugin.py"):
try:
plugin = my_import('.'.join(["Plugins", c, pluginname, "plugin"]))
plugins = [ plugins ]
for p in plugins:
+ p.path = path
p.updateIcon(path)
new_plugins.append(p)
# internally, the "fnc" argument will be compared with __eq__
plugins_added = [p for p in new_plugins if p not in self.pluginList]
plugins_removed = [p for p in self.pluginList if not p.internal and p not in new_plugins]
+
+ #ignore already installed but reloaded plugins
+ for p in plugins_removed:
+ for pa in plugins_added:
+ 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"""
res = [ ]
for x in where:
- for p in self.plugins.get(x, [ ]):
- res.append(p)
+ res.extend(self.plugins.get(x, [ ]))
+ res.sort(key=lambda x:x.weight)
return res
def getPluginsForMenu(self, menuid):
wakeup = -1
for p in self.pluginList:
current = p.getWakeupTime()
- if current > -1 and wakeup < current:
+ if current > -1 and (wakeup > current or wakeup == -1):
wakeup = current
return int(wakeup)