aboutsummaryrefslogtreecommitdiff
path: root/lib/python/Components/PluginComponent.py
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2006-02-23 02:59:37 +0000
committerFelix Domke <tmbinc@elitedvb.net>2006-02-23 02:59:37 +0000
commitc8c839608b98cc3b37e90d049b66e646f8e46cd9 (patch)
treea034481353658f89b59138da4a02cae751d6c11b /lib/python/Components/PluginComponent.py
parent08e972ae07f60852a888c93199319444e8c06714 (diff)
downloadenigma2-c8c839608b98cc3b37e90d049b66e646f8e46cd9.tar.gz
enigma2-c8c839608b98cc3b37e90d049b66e646f8e46cd9.zip
properly unload old plugins and load new plugins
Diffstat (limited to 'lib/python/Components/PluginComponent.py')
-rw-r--r--lib/python/Components/PluginComponent.py68
1 files changed, 39 insertions, 29 deletions
diff --git a/lib/python/Components/PluginComponent.py b/lib/python/Components/PluginComponent.py
index e55bbd4d..e5ceb90d 100644
--- a/lib/python/Components/PluginComponent.py
+++ b/lib/python/Components/PluginComponent.py
@@ -34,38 +34,48 @@ class PluginComponent:
if x == PluginDescriptor.WHERE_AUTOSTART:
plugin(reason=1)
- def reReadPluginList(self, directory, depth = 1):
- print "re-reading plugin list"
- self.clearPluginList()
- self.readPluginList(directory=directory, depth=depth)
-
- def readPluginList(self, directory, modules = [], depth = 1):
+ def readPluginList(self, directory):
"""enumerates plugins"""
- directories = os.listdir(directory)
+ categories = os.listdir(directory)
+
+ new_plugins = [ ]
+
+ for c in categories:
+ directory_category = directory + c
+ if not os.path.isdir(directory_category):
+ continue
+ open(directory_category + "/__init__.py", "a").close()
+ for x in os.listdir(directory_category):
+ path = directory_category + "/" + x + "/"
+ if os.path.isdir(path):
+ if fileExists(path + "plugin.py"):
+ plugin = my_import('.'.join(["Plugins", c, x, "plugin"]))
+
+ if not plugin.__dict__.has_key("Plugins"):
+ print "Plugin %s doesn't have 'Plugin'-call." % (x)
+ continue
+
+ plugins = plugin.Plugins()
+
+ # allow single entry not to be a list
+ if type(plugins) is not list:
+ plugins = [ plugins ]
+
+ for p in plugins:
+ p.updateIcon(path)
+ new_plugins.append(p)
+
+ # build a diff between the old list of plugins and the new one
+ # 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 p not in new_plugins]
+
+ for p in plugins_removed:
+ self.removePlugin(p)
- for x in directories:
- path = directory + x + "/"
- if os.path.isdir(path):
- if fileExists(path + "plugin.py"):
- plugin = my_import('.'.join(["Plugins"] + modules + [x, "plugin"]))
-
- if not plugin.__dict__.has_key("Plugins"):
- print "Plugin %s doesn't have 'Plugin'-call." % (x)
- continue
-
- plugins = plugin.Plugins()
-
- # allow single entry not to be a list
- if type(plugins) is not list:
- plugins = [ plugins ]
-
- for p in plugins:
- p.updateIcon(path)
- self.addPlugin(p);
- else:
- open(path + "__init__.py", "a").close()
- self.readPluginList(path, modules + [x], depth - 1)
+ for p in plugins_added:
+ self.addPlugin(p)
def getPlugins(self, where):
"""Get list of plugins in a specific category"""