-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."""
# servicereference
# reason
+ # 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
- def __init__(self, name = "Plugin", where = [ ], description = "", icon = None, fnc = None):
+ # like autostart, but for a session. currently, only session starts are
+ # delivered, and only on pre-loaded plugins
+ WHERE_SESSIONSTART = 7
+
+ # start as teletext plugin. arguments: session, serviceref
+ WHERE_TELETEXT = 8
+
+ # 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
- self.iconstr = icon
- self.icon = 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__