10e1b59d6f6a6a5bc8e0c2b3dcee7122b2cc7228
[enigma2.git] / lib / python / Components / PluginComponent.py
1 import os
2
3 from Tools.Directories import *
4 from Screens.Menu import menuupdater
5
6 class PluginComponent:
7         def __init__(self):
8                 self.plugins = []
9                 self.setPluginPrefix("Plugins.")
10                 self.menuEntries = []
11                 
12         def setPluginPrefix(self, prefix):
13                 self.prefix = prefix
14
15         def getPluginList(self, runAutostartPlugins=False, runAutoendPlugins=False):
16                 list = []
17                 dir = os.listdir(resolveFilename(SCOPE_PLUGINS))
18                 self.menuDelete()
19                 self.menuEntries = []
20
21                 for x in dir:
22                         path = resolveFilename(SCOPE_PLUGINS, x) + "/"
23                         try:
24                                 if os.path.exists(path):
25                                         if fileExists(path + "plugin.py"):
26                                                 pluginmodule = self.prefix + x + ".plugin"
27                                                 print "trying to import " + pluginmodule
28                                                 exec "import " + pluginmodule
29                                                 plugin = eval(pluginmodule)
30                                                 picturepath = plugin.getPicturePath()
31                                                 pluginname = plugin.getPluginName()
32                                                 try:
33                                                         for menuEntry in plugin.getMenuRegistrationList():
34                                                                 self.menuEntries.append([menuEntry, pluginmodule])
35                                                 except:
36                                                         pass
37                 
38                                                 list.append((picturepath, pluginname , x))
39                                                 if runAutostartPlugins:
40                                                         try: plugin.autostart()
41                                                         except: pass
42                                                 if runAutoendPlugins:
43                                                         try: plugin.autoend()
44                                                         except: pass
45                                                         
46                         except:
47                                 print "Directory", path, "contains a faulty plugin"
48                 self.menuUpdate()
49                 return list
50         
51         def menuDelete(self):
52                 for menuEntry in self.menuEntries:
53                         menuupdater.delMenuItem(menuEntry[0][0], menuEntry[0][2], menuEntry[1], menuEntry[0][3])
54
55         def menuUpdate(self):
56                 for menuEntry in self.menuEntries:
57                         menuupdater.addMenuItem(menuEntry[0][0], menuEntry[0][2], menuEntry[1], menuEntry[0][3])
58         
59         def runPlugin(self, plugin, session):
60                 try:
61                         exec "import " + self.prefix + plugin[2] + ".plugin"
62                         eval(self.prefix + plugin[2] + ".plugin").main(session)
63                 except:
64                         print "exec of plugin failed!"
65
66 plugins = PluginComponent()