X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/ccb8d260ed5e51f6f65205be04744a9e8322aa6f..d27d90f79580afe6699bc3bd416c4ea2549ecbd1:/lib/python/Screens/PluginBrowser.py diff --git a/lib/python/Screens/PluginBrowser.py b/lib/python/Screens/PluginBrowser.py index c03aa910..c0e85c87 100644 --- a/lib/python/Screens/PluginBrowser.py +++ b/lib/python/Screens/PluginBrowser.py @@ -1,46 +1,140 @@ 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 +from Tools.Directories import resolveFilename, SCOPE_PLUGINS class PluginBrowser(Screen): def __init__(self, session): Screen.__init__(self, session) + self["red"] = Label(_("Remove Plugins")) + self["green"] = Label(_("Download Plugins")) + self.list = [] self["list"] = PluginList(self.list) self.updateList() - self["actions"] = ActionMap(["WizardActions"], + self["actions"] = ActionMap(["WizardActions", "ColorActions"], { "ok": self.save, "back": self.close, - "up": self.up, - "down": self.down - }, -1) + "red": self.delete, + "green": self.download + }) def save(self): #self.close() self.run() def run(self): - plugin = self.pluginlist[self["list"].l.getCurrentSelectionIndex()] - plugins.runPlugin(plugin, self.session) + 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): + self.session.openWithCallback(self.updateList, PluginDownloadBrowser, PluginDownloadBrowser.REMOVE) + + def download(self): + self.session.openWithCallback(self.updateList, PluginDownloadBrowser, PluginDownloadBrowser.DOWNLOAD) + +class PluginDownloadBrowser(Screen): + DOWNLOAD = 0 + REMOVE = 1 + + def __init__(self, session, type): + Screen.__init__(self, session) + + self.type = type + + 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.pluginlist = plugins.getPluginList() + self["list"] = PluginList(self.list) + self.pluginlist = [] + + if self.type == self.DOWNLOAD: + self.session.currentDialog.instance.setTitle(_("Downloadale new plugins")) + self["text"] = Label(_("Downloading plugin information. Please wait...")) + elif self.type == self.REMOVE: + self.session.currentDialog.instance.setTitle(_("Remove plugins")) + self["text"] = Label(_("Getting 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()] + if self.type == self.DOWNLOAD: + self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to download\nthe plugin \"" + self.pluginlist[self["list"].l.getCurrentSelectionIndex()][3] + "\"?")) + elif self.type == self.REMOVE: + self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to REMOVE\nthe plugin \"" + self.pluginlist[self["list"].l.getCurrentSelectionIndex()][3] + "\"?")) + + def runInstall(self, val): + if val: + if self.type == self.DOWNLOAD: + self.session.openWithCallback(self.installFinished, Console, ["ipkg install " + self.pluginlist[self["list"].l.getCurrentSelectionIndex()][0]]) + elif self.type == self.REMOVE: + self.session.openWithCallback(self.installFinished, Console, ["ipkg remove " + self.pluginlist[self["list"].l.getCurrentSelectionIndex()][0]]) + + def startRun(self): + self["list"].instance.hide() + self.container.execute("ipkg update") + + def installFinished(self): + plugins.readPluginList(resolveFilename(SCOPE_PLUGINS)) + + def runFinished(self, retval): + if self.run == 0: + self.run = 1 + if self.type == self.DOWNLOAD: + self.container.execute("ipkg list enigma2-plugin-*") + elif self.type == self.REMOVE: + self.container.execute("ipkg list_installed 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: - self.list.append(PluginEntryComponent(x[0], x[1])) + plugin = PluginDescriptor(name = x[3], description = x[2]) + self.list.append(PluginEntryComponent(plugin)) self["list"].l.setList(self.list) - def up(self): - self["list"].instance.moveSelection(self["list"].instance.moveUp) - - def down(self): - self["list"].instance.moveSelection(self["list"].instance.moveDown)