diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2006-02-23 02:59:37 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2006-02-23 02:59:37 +0000 |
| commit | c8c839608b98cc3b37e90d049b66e646f8e46cd9 (patch) | |
| tree | a034481353658f89b59138da4a02cae751d6c11b /lib/python/Components | |
| parent | 08e972ae07f60852a888c93199319444e8c06714 (diff) | |
| download | enigma2-c8c839608b98cc3b37e90d049b66e646f8e46cd9.tar.gz enigma2-c8c839608b98cc3b37e90d049b66e646f8e46cd9.zip | |
properly unload old plugins and load new plugins
Diffstat (limited to 'lib/python/Components')
| -rw-r--r-- | lib/python/Components/PluginComponent.py | 68 |
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""" |
