Merge commit 'origin/bug_494_disable_automatic_ipkgupdate'
[enigma2.git] / lib / python / Plugins / Plugin.py
old mode 100644 (file)
new mode 100755 (executable)
index b2808c8..5a676cd
@@ -1,4 +1,7 @@
-from enigma import loadPNG
+from Components.config import ConfigSubsection, config
+from Tools.LoadPixmap import LoadPixmap
+
+config.plugins = ConfigSubsection()
 
 class PluginDescriptor:
        """An object to describe a plugin."""
@@ -14,18 +17,18 @@ class PluginDescriptor:
        # you have to ignore unknown kwargs!
        
        # argument: session
-       WHERE_BLUEMENU = 0
+       WHERE_EXTENSIONSMENU = 0
        WHERE_MAINMENU = 1
        WHERE_PLUGINMENU  = 2
        # argument: session, serviceref (currently selected)
        WHERE_MOVIELIST = 3
-       # ...
-       WHERE_SETUP    = 4
+       # argument: menuid. Fnc must return list with menuitems (4-tuple of name, fnc to call, entryid or None, weight or None)
+       WHERE_MENU = 4
        
        # reason (0: start, 1: end)
        WHERE_AUTOSTART = 5
        
-       # start as wizard. In that case, fnc must be a screen class!
+       # start as wizard. In that case, fnc must be tuple (priority,class) with class being a screen class!
        WHERE_WIZARD = 6
        
        # like autostart, but for a session. currently, only session starts are 
@@ -35,27 +38,56 @@ class PluginDescriptor:
        # start as teletext plugin. arguments: session, serviceref
        WHERE_TELETEXT = 8
        
-       def __init__(self, name = "Plugin", where = [ ], description = "", icon = None, fnc = None):
+       # file-scanner, fnc must return a list of Scanners
+       WHERE_FILESCAN = 9
+       
+       # fnc must take an interface name as parameter and return None if the plugin supports an extended setup
+       # or return a function which is called with session and the interface name for extended setup of this interface
+       WHERE_NETWORKSETUP = 10
+       
+       # show up this plugin (or a choicebox with all of them) for long INFO keypress
+       # or return a function which is called with session and the interface name for extended setup of this interface
+       WHERE_EVENTINFO = 11
+
+       # reason (True: Networkconfig read finished, False: Networkconfig reload initiated )
+       WHERE_NETWORKCONFIG_READ = 12
+
+       WHERE_AUDIOMENU = 13
+
+       # fnc 'SoftwareSupported' or  'AdvancedSoftwareSupported' must take a parameter and return None
+       # if the plugin should not be displayed inside Softwaremanger or return a function which is called with session
+       # and 'None' as parameter to call the plugin from the Softwaremanager menus. "menuEntryName" and "menuEntryDescription"
+       # should be provided to name and describe the new menu entry.
+       WHERE_SOFTWAREMANAGER = 14
+
+
+       def __init__(self, name = "Plugin", where = [ ], description = "", icon = None, fnc = None, wakeupfnc = None, internal = False):
                self.name = name
-               if type(where) is list:
+               self.internal = internal
+               if isinstance(where, list):
                        self.where = where
                else:
                        self.where = [ where ]
                self.description = description
 
-               if type(icon) is str or icon is None:
+               if icon is None or isinstance(icon, str):
                        self.iconstr = icon
                        self.icon = None
                else:
                        self.icon = icon
 
+               self.wakeupfnc = wakeupfnc
+
                self.__call__ = fnc
 
        def updateIcon(self, path):
-               if type(self.iconstr) is str:
-                       self.icon = loadPNG(path + "/" + self.iconstr)
+               if isinstance(self.iconstr, str):
+                       self.icon = LoadPixmap('/'.join((path, self.iconstr)))
                else:
                        self.icon = None
 
+       def getWakeupTime(self):
+               return self.wakeupfnc and self.wakeupfnc() or -1
+
        def __eq__(self, other):
                return self.__call__ == other.__call__