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, \
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
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)
if self.instance is not None:
self.instance.moveSelectionTo(idx)
+class NFOViewer(Screen):
+ skin = """
+ <screen name="NFOViewer" position="110,115" size="540,400" title="Changelog viewer" >
+ <widget name="changelog" position="10,10" size="520,380" font="Regular;16" />
+ </screen>"""
+
+ 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
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:
def feed_finished(self, feedhtml):
print "[feed_finished] " + str(feedhtml)
self.downloading(False)
- fileresultmask = re.compile("<a href=[\'\"](?P<url>.*?)[\'\"]>(?P<name>.*?.nfi)</a>", re.DOTALL)
+ fileresultmask = re.compile("<a class=[\'\"]nfi[\'\"] href=[\'\"](?P<url>.*?)[\'\"]>(?P<name>.*?.nfi)</a>", re.DOTALL)
searchresults = fileresultmask.finditer(feedhtml)
fileresultlist = []
if searchresults:
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:
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)