X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/88b281557a05fb785a42274bf0f3bc328f9eebfd..1afe4083af2355924c810b478f0655d695e50c45:/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py b/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py index c91c8588..ba668f8b 100644 --- a/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py +++ b/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py @@ -9,6 +9,7 @@ from Components.Sources.Progress import Progress from Components.Label import Label from Components.FileList import FileList from Components.MultiContent import MultiContentEntryText +from Components.ScrollLabel import ScrollLabel from Tools.Directories import fileExists from Tools.HardwareInfo import HardwareInfo from enigma import eConsoleAppContainer, eListbox, gFont, eListboxPythonMultiContent, \ @@ -16,6 +17,7 @@ from enigma import eConsoleAppContainer, eListbox, gFont, eListboxPythonMultiCon from os import system, remove import re import urllib +from Tools.Downloader import downloadWithProgress from twisted.web import client from twisted.internet import reactor, defer from twisted.python import failure @@ -24,57 +26,6 @@ from Plugins.SystemPlugins.Hotplug.plugin import hotplugNotifier class UserRequestedCancel(Exception): pass -class HTTPProgressDownloader(client.HTTPDownloader): - def __init__(self, url, outfile, headers=None): - client.HTTPDownloader.__init__(self, url, outfile, headers=headers, agent="Dreambox .NFI Download Plugin") - self.status = None - self.progress_callback = None - self.deferred = defer.Deferred() - - def noPage(self, reason): - if self.status == "304": - print reason.getErrorMessage() - client.HTTPDownloader.page(self, "") - else: - client.HTTPDownloader.noPage(self, reason) - - def gotHeaders(self, headers): - if self.status == "200": - if headers.has_key("content-length"): - self.totalbytes = int(headers["content-length"][0]) - else: - self.totalbytes = 0 - self.currentbytes = 0.0 - return client.HTTPDownloader.gotHeaders(self, headers) - - def pagePart(self, packet): - if self.status == "200": - self.currentbytes += len(packet) - if self.totalbytes and self.progress_callback: - self.progress_callback(self.currentbytes, self.totalbytes) - return client.HTTPDownloader.pagePart(self, packet) - - def pageEnd(self): - return client.HTTPDownloader.pageEnd(self) - -class downloadWithProgress: - def __init__(self, url, outputfile, contextFactory=None, *args, **kwargs): - scheme, host, port, path = client._parse(url) - self.factory = HTTPProgressDownloader(url, outputfile, *args, **kwargs) - self.connection = reactor.connectTCP(host, port, self.factory) - - def start(self): - return self.factory.deferred - - def stop(self): - print "[stop]" - self.connection.disconnect() - #self.factory.deferred.errback(failure.Failure(UserRequestedCancel)) - - def addProgress(self, progress_callback): - print "[addProgress]" - self.factory.progress_callback = progress_callback - class Feedlist(MenuList): def __init__(self, list=[], enableWrapAround = False): MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent) @@ -112,6 +63,34 @@ class Feedlist(MenuList): if self.instance is not None: self.instance.moveSelectionTo(idx) +class NFOViewer(Screen): + skin = """ + + + """ + + def __init__(self, session, nfo): + Screen.__init__(self, session) + self["changelog"] = ScrollLabel(nfo) + + self["ViewerActions"] = ActionMap(["SetupActions", "ColorActions", "DirectionActions"], + { + "green": self.exit, + "red": self.exit, + "ok": self.exit, + "cancel": self.exit, + "down": self.pageDown, + "up": self.pageUp + }) + def pageUp(self): + self["changelog"].pageUp() + + def pageDown(self): + self["changelog"].pageDown() + + def exit(self): + self.close(False) + class NFIDownload(Screen): LIST_SOURCE = 1 LIST_DEST = 2 @@ -280,6 +259,8 @@ class NFIDownload(Screen): self["destlist"].pageDown() def ok(self): + if self.focus is self.LIST_SOURCE and self.nfo: + self.session.open(NFOViewer, self.nfo) if self.download: return if self.focus is self.LIST_DEST: @@ -299,7 +280,7 @@ class NFIDownload(Screen): def feed_finished(self, feedhtml): print "[feed_finished] " + str(feedhtml) self.downloading(False) - fileresultmask = re.compile(".*?)[\'\"]>(?P.*?.nfi)", re.DOTALL) + fileresultmask = re.compile(".*?)[\'\"]>(?P.*?.nfi)", re.DOTALL) searchresults = fileresultmask.finditer(feedhtml) fileresultlist = [] if searchresults: @@ -358,7 +339,7 @@ class NFIDownload(Screen): else: self.nfofilename = "" self["infolabel"].text = _("No details for this image file") - self["statusbar"].text = "" + self["statusbar"].text = _("Press OK to view full changelog") def nfi_download(self): if self["destlist"].getCurrentDirectory() is None: @@ -544,7 +525,7 @@ class NFIDownload(Screen): self.taskstring = "" self.container.appClosed.append(self.fdisk_finished) self.container.execute("fdisk " + self.stickdevice + "/disc") - self.container.write("d\nn\np\n1\n\n\nt\n6\nw\n") + self.container.write("d\n4\nd\n3\nd\n2\nd\nn\np\n1\n\n\nt\n6\nw\n") self.delayTimer = eTimer() self.delayTimer.callback.append(self.progress_increment) self.delayTimer.start(105, False)