aboutsummaryrefslogtreecommitdiff
path: root/lib/python/Screens/PluginBrowser.py
blob: 67aac07656906a6d853edc200a63990f24e52512 (plain)
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)