X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FPlugins%2FPlugin.py;h=7cf0c18b506a302b0bc069ffc672a9b28a27a0b7;hp=d10a3fbaaffb234a8744c947c9e32126eacf7b67;hb=67a9cce495c089020439834bb27cd148296c3655;hpb=af574b481d63d4dea8cbef66680e597df5a27f1e diff --git a/lib/python/Plugins/Plugin.py b/lib/python/Plugins/Plugin.py old mode 100644 new mode 100755 index d10a3fb..7cf0c18 --- a/lib/python/Plugins/Plugin.py +++ b/lib/python/Plugins/Plugin.py @@ -1,3 +1,8 @@ +from Components.config import ConfigSubsection, config +from Tools.LoadPixmap import LoadPixmap + +config.plugins = ConfigSubsection() + class PluginDescriptor: """An object to describe a plugin.""" @@ -9,27 +14,79 @@ class PluginDescriptor: # 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 - def __init__(self, name = "Plugin", where = [ ], description = "", icon = None, fnc = None): + # 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 + # 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 - if type(fnc) is str: - self.icon = loadPNG("..") + + 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 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__