1 from Components.config import ConfigSubsection, config
2 from Tools.LoadPixmap import LoadPixmap
4 config.plugins = ConfigSubsection()
6 class PluginDescriptor:
7 """An object to describe a plugin."""
9 # where to list the plugin. Note that there are different call arguments,
10 # so you might not be able to combine them.
12 # supported arguments are:
17 # you have to ignore unknown kwargs!
20 WHERE_EXTENSIONSMENU = 0
23 # argument: session, serviceref (currently selected)
25 # argument: menuid. Fnc must return list with menuitems (4-tuple of name, fnc to call, entryid or None, weight or None)
28 # reason (0: start, 1: end)
31 # start as wizard. In that case, fnc must be tuple (priority,class) with class being a screen class!
34 # like autostart, but for a session. currently, only session starts are
35 # delivered, and only on pre-loaded plugins
36 WHERE_SESSIONSTART = 7
38 # start as teletext plugin. arguments: session, serviceref
41 # file-scanner, fnc must return a list of Scanners
44 # fnc must take an interface name as parameter and return None if the plugin supports an extended setup
45 # or return a function which is called with session and the interface name for extended setup of this interface
46 WHERE_NETWORKSETUP = 10
48 # show up this plugin (or a choicebox with all of them) for long INFO keypress
49 # or return a function which is called with session and the interface name for extended setup of this interface
52 # reason (True: Networkconfig read finished, False: Networkconfig reload initiated )
53 WHERE_NETWORKCONFIG_READ = 12
57 # fnc 'SoftwareSupported' or 'AdvancedSoftwareSupported' must take a parameter and return None
58 # if the plugin should not be displayed inside Softwaremanger or return a function which is called with session
59 # and 'None' as parameter to call the plugin from the Softwaremanager menus. "menuEntryName" and "menuEntryDescription"
60 # should be provided to name and describe the new menu entry.
61 WHERE_SOFTWAREMANAGER = 14
63 WHERE_EXTENSIONSINGLE = 15
66 def __init__(self, name = "Plugin", where = [ ], description = "", icon = None, fnc = None, wakeupfnc = None, needsRestart = None, internal = False, weight = 0):
68 self.internal = internal
69 self.needsRestart = needsRestart
71 if isinstance(where, list):
74 self.where = [ where ]
75 self.description = description
77 if icon is None or isinstance(icon, str):
85 self.wakeupfnc = wakeupfnc
89 def updateIcon(self, path):
90 if isinstance(self.iconstr, str):
91 self.icon = LoadPixmap('/'.join((path, self.iconstr)))
95 def getWakeupTime(self):
96 return self.wakeupfnc and self.wakeupfnc() or -1
98 def __eq__(self, other):
99 return self.__call__ == other.__call__