plugin api change: Plugins() and main functions must receive (and possibly ignore...
authorFelix Domke <tmbinc@elitedvb.net>
Sun, 5 Mar 2006 21:43:54 +0000 (21:43 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Sun, 5 Mar 2006 21:43:54 +0000 (21:43 +0000)
12 files changed:
doc/PLUGINS
lib/python/Plugins/DemoPlugins/TestPlugin/plugin.py
lib/python/Plugins/Extensions/CutListEditor/plugin.py
lib/python/Plugins/Extensions/FileManager/plugin.py
lib/python/Plugins/Extensions/TuxboxPlugins/plugin.py
lib/python/Plugins/Extensions/WebInterface/plugin.py
lib/python/Plugins/Extensions/ZappingAlternatives/plugin.py
lib/python/Plugins/Plugin.py
lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/plugin.py
lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py
lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py
lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py

index 965587755f81150e16f646eeb9c403cd7d2b7655..c383997ea5e5601fd3df1e058347b340e2a75309 100644 (file)
@@ -5,19 +5,20 @@ Enigma2 plugins are always written in python. If you really have to call
 C/C++ functions from your code, you can supply a python module with it,
 implementing your functions.
 
-Let's write a plugin. We call it "ourSmallTest", and it should be a test
-plugin.
+Let's write a plugin. We call it "OurSmallTest", and it should be a test
+plugin. Thus we choose "DemoPlugins" as a category. The category is just to
+organize plugins in the filesystem.
 
 The simplest plugin looks like the following:
 
-Plugins/ourSmallTest/plugin.py:
+Plugins/DemoPlugins/OurSmallTest/plugin.py:
 
 "from Plugins.Plugin import PluginDescriptor
 
-def main(session):
+def main(session, **kwargs):
        print "Hello world!"
 
-def Plugins():
+def Plugins(**kwargs):
        return PluginDescriptor(
                name="Our Small Test", 
                description="plugin to test some capabilities", 
@@ -68,6 +69,12 @@ def main(session):
 
 with MyScreen being a GUI screen.
 
+About the **kwargs:
+This somewhat special syntax (in fact the name 'kwargs' is arbitrary, but
+stands for "keyword arguments") collects all addition keyword arguments
+(i.e. named parameters). For example. the Plugins()-call gets a "path"
+parameter, and probably more in the future. You must ignore all additional
+keywords which you don't need!
 
 autostarting plugins
 ====================
@@ -78,8 +85,17 @@ end on shutdown.
 you just have to use "WHERE_AUTOSTART". your entry point must (fnc) look 
 like:
 
-def autostartEntry(raeson):
+def autostartEntry(raeson, **kwargs):
        if reason == 0: # startup
                print "startup"
        elif reason == 1:
                print "shutdown"
+
+Categories
+==========
+
+Currently defined categories are:
+
+* DemoPlugins: Plugins fore pure demonstration purposes
+* Extensions: User interface extensions
+* SystemPlugins: Hardware specific plugins
index 1d21ea3db040a873b8904971b70a61afce8d8df3..e6d83bf5b9e7c4f79707a38274ec11c1240a8681 100644 (file)
@@ -68,13 +68,11 @@ class Test(Screen):
                print "pressed", number
                self["text"].number(number)
 
-def main(session):
+def main(session, **kwargs):
        session.openWithCallback(test, ChoiceBox, title="Delete everything on this Dreambox?", list=[(_("yes"), "yes"), (_("no"), "no"), (_("perhaps"), "perhaps"), (_("ask me tomorrow"), "ask me tomorrow"), (_("leave me alone with this!"), "yes")])
        
 def test(returnValue):
        print "You entered", returnValue
 
-def Plugins():
-       return PluginDescriptor(name="Test", description="plugin to test some capabilities", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)
-
-       
\ No newline at end of file
+def Plugins(**kwargs):
+       return PluginDescriptor(name="Test", description="plugin to test some capabilities", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)
index 25a5e7422a505dc3d7fb8363529a1955411d5cf9..16616cd201a9fddf5209d45b352b89e682837106 100644 (file)
@@ -338,8 +338,8 @@ Then seek to the end, press OK, select 'end cut'. That's it.
                        self.cut_list.remove(self.context_nearest_mark)
                        self.uploadCuesheet()
 
-def main(session, service):
+def main(session, service, **kwargs):
        session.open(CutListEditor, service)
 
-def Plugins():
+def Plugins(**kwargs):
        return PluginDescriptor(name="Cutlist Editor", description=_("Cutlist editor..."), where = PluginDescriptor.WHERE_MOVIELIST, fnc=main)
index 05a19fc2cac3165fd63ab4cd4a1d60083bcc6af4..a17e631ce59e611fae0a2096aff6f522cebead8b 100644 (file)
@@ -62,8 +62,8 @@ class FileManager(Screen):
                print "pressed", number
                self["text"].number(number)
 
-def main(session):
+def main(session, **kwargs):
        session.open(FileManager)
 
-def Plugins():
+def Plugins(**kwargs):
        return PluginDescriptor(name="File-Manager", description="Let's you view/edit files in your Dreambox", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)
index 7ab02da7cf3fd323cbb00628c4444369f96dd52b..8d4e15816648729a910730062ab2a39bc21f9064 100644 (file)
@@ -38,9 +38,9 @@ def getPluginParams(file):
 
        return params
 
-def main(session, plugin):
+def main(session, plugin, **kwargs):
        print "Running plugin " + plugin[:-4] + ".so with config file", plugin
        print getPluginParams(plugin)
        
-def Plugins():
-       return getPlugins()
\ No newline at end of file
+def Plugins(**kwargs):
+       return getPlugins()
index f0be4e453a6ce7f08138715276d8e980a57550af..0f7e2bbd25ffd653ba47404fb428a82ce8cccb65 100644 (file)
@@ -8,12 +8,12 @@ def startWebserver():
        
        reactor.listenTCP(80, http.HTTPFactory(site))
 
-def autostart(reason):
+def autostart(reason, **kwargs):
        if reason == 0:
                try:
                        startWebserver()
                except ImportError:
                        print "twisted not available, not starting web services"
 
-def Plugins():
+def Plugins(**kwargs):
        return PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart)
index dace8dd5b1ed14e1a4c38448a39349cb560d9614..118f0cb6e4a0e4b75cfd3569e95d94af3d6d2e35 100644 (file)
@@ -294,9 +294,9 @@ def autostart(reason):
                NavigationInstance.instance.playService = type(NavigationInstance.instance.playService)(playService, NavigationInstance, Navigation)
                
 
-def AlternativeZappingSetup(session):
+def AlternativeZappingSetup(session, **kwargs):
        session.open(AlternativeZapping)
 
-def Plugins():
+def Plugins(**kwargs):
        return [PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart),
                        PluginDescriptor(name="Alternative services setup" , description="Defines alternatives for services.", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=AlternativeZappingSetup)]
index 3db703979cc622e281d34f2de4003d2852a7efa5..2c8d9296f111c2209dd6b2df5cc67b3279097e0b 100644 (file)
@@ -11,6 +11,8 @@ class PluginDescriptor:
        #   servicereference
        #   reason
        
+       # you have to ignore unknown kwargs!
+       
        # argument: session
        WHERE_BLUEMENU = 0
        WHERE_MAINMENU = 1
@@ -44,7 +46,7 @@ class PluginDescriptor:
 
        def updateIcon(self, path):
                if type(self.iconstr) is str:
-                       self.icon = loadPNG(path + self.iconstr)
+                       self.icon = loadPNG(path + "/" + self.iconstr)
                else:
                        self.icon = None
 
index fea384240168014ae0d84c31f014a160a38dae74..94c81c05453f14d34fd61900f2cc4a6b3af13603 100644 (file)
@@ -44,7 +44,7 @@ class FPUpgrade(Screen):
        def ok(self):
                self.close(4)
 
-def Plugins():
+def Plugins(**kwargs):
        from Tools.DreamboxHardware import getFPVersion
        version = getFPVersion()
        newversion = getUpgradeVersion() or 0
index 0dc53a6c39f2d7ccc0d811c05ff6546c9866ded1..72279c1a11ce11fe2d63eeac1b4752c115df7815 100644 (file)
@@ -166,12 +166,12 @@ class Ipkg(Screen):
                else:
                        self.close()
 
-def UpgradeMain(session):
+def UpgradeMain(session, **kwargs):
        session.open(Upgrade)
 
-def IpkgMain(session):
+def IpkgMain(session, **kwargs):
        session.open(Ipkg)
 
-def Plugins():
+def Plugins(**kwargs):
        return [PluginDescriptor(name="Old Softwareupdate", description="Updates your receiver's software", icon="update.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=UpgradeMain),
                        PluginDescriptor(name="IPKG", description="IPKG frontend", icon="update.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=IpkgMain)]
index cd39fecf48c2f1fa6e99508f9c8ce147a2c014b5..579f6c99972de18da5819f1e3ed3674a2e3f6ded 100644 (file)
@@ -129,9 +129,8 @@ class PositionerSetup(Screen):
                else:
                        self.status.setText("not moving")
                
-def PositionerMain(session):
+def PositionerMain(session, **kwargs):
        session.open(PositionerSetup)
 
-def Plugins():
+def Plugins(**kwargs):
        return PluginDescriptor(name="Positioner setup", description="Setup your positioner", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=PositionerMain)
-
index 00f8e18527281e8ea5e74e5dd6751961d36359c1..af4d8982c73b42008d35b644072caf3d983ce123 100644 (file)
@@ -219,8 +219,8 @@ class Ipkg(Screen):
                else:
                        self.close()
 
-def UpgradeMain(session):
+def UpgradeMain(session, **kwargs):
        session.open(UpdatePluginMenu)
 
-def Plugins():
+def Plugins(**kwargs):
        return PluginDescriptor(name="Softwareupdate", description="Updates your receiver's software", icon="update.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=UpgradeMain)