1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
from Screen import Screen
from enigma import eConsoleAppContainer
from Components.MenuList import MenuList
from Components.ActionMap import ActionMap
from Components.PluginComponent import plugins
from Components.PluginList import *
from Components.config import config
from Components.Label import Label
from Screens.MessageBox import MessageBox
from Screens.Console import Console
from Plugins.Plugin import PluginDescriptor
class PluginBrowser(Screen):
def __init__(self, session):
Screen.__init__(self, session)
self["red"] = Label(_("Delete"))
self["green"] = Label(_("Download Plugins"))
self.list = []
self["list"] = PluginList(self.list)
self.updateList()
self["actions"] = ActionMap(["WizardActions", "ColorActions"],
{
"ok": self.save,
"back": self.close,
"red": self.delete,
"green": self.download
})
def save(self):
#self.close()
self.run()
def run(self):
plugin = self["list"].l.getCurrentSelection()[0]
plugin(session=self.session)
def updateList(self):
self.list = [ ]
self.pluginlist = plugins.getPlugins(PluginDescriptor.WHERE_PLUGINMENU)
for plugin in self.pluginlist:
self.list.append(PluginEntryComponent(plugin))
self["list"].l.setList(self.list)
def delete(self):
pass
def download(self):
self.session.open(PluginDownloadBrowser)
class PluginDownloadBrowser(Screen):
def __init__(self, session):
Screen.__init__(self, session)
self.container = eConsoleAppContainer()
self.container.appClosed.get().append(self.runFinished)
self.container.dataAvail.get().append(self.dataAvail)
self.onLayoutFinish.append(self.startRun)
self.list = []
self["list"] = PluginList(self.list)
self.pluginlist = []
self["text"] = Label(_("Downloading plugin information. Please wait..."))
self.run = 0
self["actions"] = ActionMap(["WizardActions"],
{
"ok": self.go,
"back": self.close,
})
def go(self):
print "plugin: installing:", self.pluginlist[self["list"].l.getCurrentSelectionIndex()]
self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to download\nthe plugin \"" + self.pluginlist[self["list"].l.getCurrentSelectionIndex()][3] + "\"?"))
def runInstall(self, val):
if val:
self.session.open(Console, ["ipkg install " + self.pluginlist[self["list"].l.getCurrentSelectionIndex()][0]])
def startRun(self):
self["list"].instance.hide()
self.container.execute("ipkg update")
def runFinished(self, retval):
if self.run == 0:
self.run = 1
self.container.execute("ipkg list enigma2-plugin-*")
else:
if len(self.pluginlist) > 0:
self.updateList()
self["list"].instance.show()
else:
self["text"].setText("No plugins found")
def dataAvail(self, str):
for x in str.split('\n'):
plugin = x.split(" - ")
if len(plugin) == 3:
plugin.append(plugin[0][15:])
self.pluginlist.append(plugin)
def updateList(self):
for x in self.pluginlist:
plugin = PluginDescriptor(name = x[3], description = x[2])
self.list.append(PluginEntryComponent(plugin))
self["list"].l.setList(self.list)
|