X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/e68a1617b7c1efbedf8b28309943dd7669daaad0..2ea3c0f4cdde1978d6517e8f8fae16a8070cb792:/lib/python/Screens/PluginBrowser.py diff --git a/lib/python/Screens/PluginBrowser.py b/lib/python/Screens/PluginBrowser.py old mode 100644 new mode 100755 index cd17e2e0..3a7df9fb --- a/lib/python/Screens/PluginBrowser.py +++ b/lib/python/Screens/PluginBrowser.py @@ -12,6 +12,7 @@ from Plugins.Plugin import PluginDescriptor from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE from Tools.LoadPixmap import LoadPixmap +from time import time class PluginBrowser(Screen): def __init__(self, session): @@ -22,7 +23,6 @@ class PluginBrowser(Screen): self.list = [] self["list"] = PluginList(self.list) - self.updateList() self["actions"] = ActionMap(["WizardActions", "ColorActions"], { @@ -31,7 +31,8 @@ class PluginBrowser(Screen): "red": self.delete, "green": self.download }) - self.onExecBegin.append(self.checkWarnings) + self.onFirstExecBegin.append(self.checkWarnings) + self.onShown.append(self.updateList) def checkWarnings(self): if len(plugins.warnings): @@ -47,25 +48,29 @@ class PluginBrowser(Screen): def run(self): plugin = self["list"].l.getCurrentSelection()[0] - plugin(session=self.session) def updateList(self): self.pluginlist = plugins.getPlugins(PluginDescriptor.WHERE_PLUGINMENU) self.list = [PluginEntryComponent(plugin) for plugin in self.pluginlist] - self["list"].l.setList(self.list) 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) @@ -130,14 +135,25 @@ 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.remove(self.runFinished) @@ -149,10 +165,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() @@ -174,10 +190,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:]) @@ -192,7 +209,7 @@ class PluginDownloadBrowser(Screen): 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]):