X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/aaa2366d5a85764feb76a1615a6c557a75c82894..5274c69abf4cb2b99ab9d92ac0081c0ec49bd2e4:/lib/python/Screens/PluginBrowser.py diff --git a/lib/python/Screens/PluginBrowser.py b/lib/python/Screens/PluginBrowser.py index f5d0c8a1..fbbc128d 100644 --- a/lib/python/Screens/PluginBrowser.py +++ b/lib/python/Screens/PluginBrowser.py @@ -1,17 +1,17 @@ from Screen import Screen -from enigma import eConsoleAppContainer, loadPNG +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, SCOPE_SKIN_IMAGE +from Tools.LoadPixmap import LoadPixmap + class PluginBrowser(Screen): def __init__(self, session): @@ -83,6 +83,7 @@ class PluginDownloadBrowser(Screen): self["list"] = PluginList(self.list) self.pluginlist = [] self.expanded = [] + self.installedplugins = [] if self.type == self.DOWNLOAD: self["text"] = Label(_("Downloading plugin information. Please wait...")) @@ -90,7 +91,9 @@ class PluginDownloadBrowser(Screen): self["text"] = Label(_("Getting plugin information. Please wait...")) self.run = 0 - + + self.remainingdata = "" + self["actions"] = ActionMap(["WizardActions"], { "ok": self.go, @@ -98,17 +101,22 @@ class PluginDownloadBrowser(Screen): }) def go(self): - if type(self["list"].l.getCurrentSelection()[0]) is str: # category - if self["list"].l.getCurrentSelection()[0] in self.expanded: - self.expanded.remove(self["list"].l.getCurrentSelection()[0]) + sel = self["list"].l.getCurrentSelection() + + if sel is None: + return + + if type(sel[0]) is str: # category + if sel[0] in self.expanded: + self.expanded.remove(sel[0]) else: - self.expanded.append(self["list"].l.getCurrentSelection()[0]) + self.expanded.append(sel[0]) self.updateList() else: if self.type == self.DOWNLOAD: - self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to download\nthe plugin \"" + self["list"].l.getCurrentSelection()[0].name + "\"?")) + self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to download\nthe plugin \"" + sel[0].name + "\"?")) elif self.type == self.REMOVE: - self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to REMOVE\nthe plugin \"" + self["list"].l.getCurrentSelection()[0].name + "\"?")) + self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to REMOVE\nthe plugin \"" + sel[0].name + "\"?")) def runInstall(self, val): if val: @@ -136,30 +144,50 @@ class PluginDownloadBrowser(Screen): self.close() def runFinished(self, retval): + self.remainingdata = "" if self.run == 0: self.run = 1 if self.type == self.DOWNLOAD: - self.container.execute("ipkg list enigma2-plugin-*") + self.container.execute("ipkg list_installed enigma2-plugin-*") + elif self.run == 1 and self.type == self.DOWNLOAD: + self.run = 2 + 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") + self["text"].setText("No new plugins found") def dataAvail(self, str): - for x in str.split('\n'): + #prepend any remaining data from the previous call + str = self.remainingdata + str + #split in lines + lines = str.split('\n') + #'str' should end with '\n', so when splitting, the last line should be empty. If this is not the case, we received an incomplete line + if len(lines[-1]): + #remember this data for next time + self.remainingdata = lines[-1] + lines = lines[0:-1] + else: + self.remainingdata = "" + + for x in lines: plugin = x.split(" - ") if len(plugin) == 3: - plugin.append(plugin[0][15:]) + if self.run == 1 and self.type == self.DOWNLOAD: + self.installedplugins.append(plugin[0]) + else: + if plugin[0] not in self.installedplugins: + plugin.append(plugin[0][15:]) - self.pluginlist.append(plugin) + self.pluginlist.append(plugin) def updateList(self): self.list = [] - expandableIcon = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "expandable-plugins.png")) - expandedIcon = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "expanded-plugins.png")) - verticallineIcon = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "verticalline-plugins.png")) + expandableIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "expandable-plugins.png")) + expandedIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "expanded-plugins.png")) + verticallineIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "verticalline-plugins.png")) self.plugins = {} for x in self.pluginlist: