recursively search for plugins
[enigma2.git] / lib / python / Components / PluginComponent.py
index cfdbc4d0d00a643b3026b9e5be86d451324ba782..ae06d7768a41062ab1dd24009335cefae326c6ac 100644 (file)
@@ -1,8 +1,10 @@
 import os
 
 from Tools.Directories import *
+from Plugins.Plugin import PluginDescriptor
 
 def my_import(name):
+       print name
        mod = __import__(name)
        components = name.split('.')
        for comp in components[1:]:
@@ -12,27 +14,41 @@ def my_import(name):
 class PluginComponent:
        def __init__(self):
                self.plugins = {}
+               self.pluginList = [ ]
                self.setPluginPrefix("Plugins.")
                
        def setPluginPrefix(self, prefix):
                self.prefix = prefix
-
-       def readPluginList(self, runAutostartPlugins=False, runAutoendPlugins=False):
+       
+       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)
+       
+       def removePlugin(self, plugin):
+               self.pluginList.remove(plugin)
+               for x in plugin.where:
+                       self.plugins[x].remove(plugin)
+                       if x == PluginDescriptor.WHERE_AUTOSTART:
+                               plugin(reason=1)
+       
+       def readPluginList(self, directory, modules = [], depth = 1):
                """enumerates plugins"""
-
-               directories = os.listdir(resolveFilename(SCOPE_PLUGINS))
+               
+               directories = os.listdir(directory)
                
                for x in directories:
-                       path = resolveFilename(SCOPE_PLUGINS, x) + "/"
-                       if os.path.exists(path):
+                       path = directory + x + "/"
+                       if os.path.isdir(path):
                                if fileExists(path + "plugin.py"):
-                                       plugin = my_import('.'.join(("Plugins", x, "plugin")))
+                                       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
                                        
-                                       print "plugin", plugin
                                        plugins = plugin.Plugins()
                                        
                                        # allow single entry not to be a list
@@ -40,10 +56,10 @@ class PluginComponent:
                                                plugins = [ plugins ]
                                        
                                        for p in plugins:
-                                               print "imported plugin %s" % (p.name)
-                                               
-                                               for x in p.where:
-                                                       self.plugins.setdefault(x, []).append(p)
+                                               p.updateIcon(path)
+                                               self.addPlugin(p);
+                               else:
+                                       self.readPluginList(path, modules + [x], depth - 1)
 
        def getPlugins(self, where):
                """Get list of plugins in a specific category"""
@@ -56,4 +72,8 @@ class PluginComponent:
                                res.append(p)
                return res
 
+       def shutdown(self):
+               for p in self.pluginList[:]:
+                       self.removePlugin(p)
+
 plugins = PluginComponent()