X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FScreens%2FPluginBrowser.py;h=cce08aed3340e7ee801a45a2b2f838458faaafcb;hp=3b4ff116c98f5be68ecf6d2ada13cc900c861abb;hb=c2b5a1188c0b989e8983d362e23a5c499eb6cca7;hpb=8c2a83d6b2a60b2bd408ccdc6d5afd6da506912f diff --git a/lib/python/Screens/PluginBrowser.py b/lib/python/Screens/PluginBrowser.py old mode 100644 new mode 100755 index 3b4ff11..cce08ae --- a/lib/python/Screens/PluginBrowser.py +++ b/lib/python/Screens/PluginBrowser.py @@ -1,5 +1,5 @@ from Screen import Screen - +from Components.Language import language from enigma import eConsoleAppContainer from Components.ActionMap import ActionMap @@ -9,29 +9,38 @@ 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.Directories import resolveFilename, fileExists, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE from Tools.LoadPixmap import LoadPixmap +from time import time + +def languageChanged(): + plugins.clearPluginList() + plugins.readPluginList(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["red"] = Label() + self["green"] = Label() self.list = [] self["list"] = PluginList(self.list) - self.updateList() - self["actions"] = ActionMap(["WizardActions", "ColorActions"], + self["actions"] = ActionMap(["WizardActions"], { "ok": self.save, "back": self.close, + }) + self["PluginDownloadActions"] = ActionMap(["ColorActions"], + { "red": self.delete, "green": self.download }) - self.onExecBegin.append(self.checkWarnings) + self["PluginDownloadActions"].setEnabled(False) + self.onFirstExecBegin.append(self.checkWarnings) + self.onShown.append(self.updateList) def checkWarnings(self): if len(plugins.warnings): @@ -42,40 +51,49 @@ class PluginBrowser(Screen): self.session.open(MessageBox, text = text, type = MessageBox.TYPE_WARNING) 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 = [PluginEntryComponent(plugin) for plugin in self.pluginlist] self["list"].l.setList(self.list) - + if fileExists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/plugin.py")): + self["red"].setText("") + self["green"].setText("") + self["PluginDownloadActions"].setEnabled(False) + else: + self["red"].setText(_("Remove Plugins")) + self["green"].setText(_("Download Plugins")) + self["PluginDownloadActions"].setEnabled(True) + def delete(self): - self.session.openWithCallback(self.updateList, PluginDownloadBrowser, PluginDownloadBrowser.REMOVE) + self.session.openWithCallback(self.PluginDownloadBrowserClosed, PluginDownloadBrowser, PluginDownloadBrowser.REMOVE) def download(self): - self.session.openWithCallback(self.updateList, PluginDownloadBrowser, PluginDownloadBrowser.DOWNLOAD) + self.session.openWithCallback(self.PluginDownloadBrowserClosed, PluginDownloadBrowser, PluginDownloadBrowser.DOWNLOAD) + + def PluginDownloadBrowserClosed(self): + self.updateList() + self.checkWarnings() + class PluginDownloadBrowser(Screen): DOWNLOAD = 0 REMOVE = 1 - + lastDownloadDate = None + 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.container.appClosed.append(self.runFinished) + self.container.dataAvail.append(self.dataAvail) self.onLayoutFinish.append(self.startRun) self.onShown.append(self.setWindowTitle) @@ -106,17 +124,18 @@ class PluginDownloadBrowser(Screen): if sel is None: return - if type(sel[0]) is str: # category - if sel[0] in self.expanded: - self.expanded.remove(sel[0]) + sel = sel[0] + if isinstance(sel, str): # category + if sel in self.expanded: + self.expanded.remove(sel) else: - self.expanded.append(sel[0]) + self.expanded.append(sel) self.updateList() else: if self.type == self.DOWNLOAD: - self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to download\nthe plugin \"" + sel[0].name + "\"?")) + self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to download\nthe plugin \"%s\"?") % sel.name) elif self.type == self.REMOVE: - self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to REMOVE\nthe plugin \"" + sel[0].name + "\"?")) + self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to REMOVE\nthe plugin \"%s\"?") % sel.name) def runInstall(self, val): if val: @@ -131,18 +150,29 @@ class PluginDownloadBrowser(Screen): elif self.type == self.REMOVE: self.setTitle(_("Remove plugins")) + def startIpkgListInstalled(self): + self.container.execute("ipkg list_installed enigma2-plugin-*") + + def startIpkgListAvailable(self): + self.container.execute("ipkg list enigma2-plugin-*") + def startRun(self): self["list"].instance.hide() if self.type == self.DOWNLOAD: - self.container.execute("ipkg update") + if not PluginDownloadBrowser.lastDownloadDate or (time() - PluginDownloadBrowser.lastDownloadDate) > 3600: + # Only update from internet once per hour + self.container.execute("ipkg update") + PluginDownloadBrowser.lastDownloadDate = time() + else: + self.startIpkgListAvailable() elif self.type == self.REMOVE: self.run = 1 - self.container.execute("ipkg list_installed enigma2-plugin-*") - + self.startIpkgListInstalled() + def installFinished(self): plugins.readPluginList(resolveFilename(SCOPE_PLUGINS)) - self.container.appClosed.get().remove(self.runFinished) - self.container.dataAvail.get().remove(self.dataAvail) + self.container.appClosed.remove(self.runFinished) + self.container.dataAvail.remove(self.dataAvail) self.close() def runFinished(self, retval): @@ -150,10 +180,10 @@ class PluginDownloadBrowser(Screen): if self.run == 0: self.run = 1 if self.type == self.DOWNLOAD: - self.container.execute("ipkg list_installed enigma2-plugin-*") + self.startIpkgListInstalled() elif self.run == 1 and self.type == self.DOWNLOAD: self.run = 2 - self.container.execute("ipkg list enigma2-plugin-*") + self.startIpkgListAvailable() else: if len(self.pluginlist) > 0: self.updateList() @@ -175,10 +205,11 @@ class PluginDownloadBrowser(Screen): self.remainingdata = "" for x in lines: - plugin = x.split(" - ") + plugin = x.split(" - ", 2) if len(plugin) == 3: if self.run == 1 and self.type == self.DOWNLOAD: - self.installedplugins.append(plugin[0]) + if plugin[0] not in self.installedplugins: + self.installedplugins.append(plugin[0]) else: if plugin[0] not in self.installedplugins: plugin.append(plugin[0][15:]) @@ -186,14 +217,14 @@ class PluginDownloadBrowser(Screen): self.pluginlist.append(plugin) def updateList(self): - self.list = [] - 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")) + list = [] + expandableIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/expandable-plugins.png")) + expandedIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/expanded-plugins.png")) + verticallineIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/verticalline-plugins.png")) self.plugins = {} for x in self.pluginlist: - split = x[3].split('-') + split = x[3].split('-', 1) if len(split) < 2: continue if not self.plugins.has_key(split[0]): @@ -203,10 +234,11 @@ class PluginDownloadBrowser(Screen): for x in self.plugins.keys(): if x in self.expanded: - self.list.append(PluginCategoryComponent(x, expandedIcon)) - for plugin in self.plugins[x]: - self.list.append(PluginDownloadComponent(plugin[0], plugin[1])) + list.append(PluginCategoryComponent(x, expandedIcon)) + list.extend([PluginDownloadComponent(plugin[0], plugin[1]) for plugin in self.plugins[x]]) else: - self.list.append(PluginCategoryComponent(x, expandableIcon)) - self["list"].l.setList(self.list) + list.append(PluginCategoryComponent(x, expandableIcon)) + self.list = list + self["list"].l.setList(list) +language.addCallback(languageChanged) \ No newline at end of file