diff options
| author | ghost <andreas.monzner@multimedia-labs.de> | 2009-05-12 12:54:28 +0200 |
|---|---|---|
| committer | ghost <andreas.monzner@multimedia-labs.de> | 2009-05-12 12:54:28 +0200 |
| commit | 25461d876436a7332decd6ac5cbbda7cd38f6cdd (patch) | |
| tree | 5a667553ac685751d2e5ba518cd02dde12a4d894 /lib/python/Tools/Downloader.py | |
| parent | 75b6f719972578d2bc553db3f30fa8a86c440df7 (diff) | |
| parent | b4f81157894ee05e23eafa5ff6accbdc280d9cc6 (diff) | |
| download | enigma2-25461d876436a7332decd6ac5cbbda7cd38f6cdd.tar.gz enigma2-25461d876436a7332decd6ac5cbbda7cd38f6cdd.zip | |
Merge branch 'master' of git.opendreambox.org:/git/enigma2
Diffstat (limited to 'lib/python/Tools/Downloader.py')
| -rw-r--r-- | lib/python/Tools/Downloader.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/lib/python/Tools/Downloader.py b/lib/python/Tools/Downloader.py new file mode 100644 index 00000000..ffc24c1c --- /dev/null +++ b/lib/python/Tools/Downloader.py @@ -0,0 +1,53 @@ +from twisted.web import client +from twisted.internet import reactor, defer +from twisted.python import failure + +class HTTPProgressDownloader(client.HTTPDownloader): + def __init__(self, url, outfile, headers=None): + client.HTTPDownloader.__init__(self, url, outfile, headers=headers, agent="Dreambox HTTP Downloader") + 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() + + def addProgress(self, progress_callback): + print "[addProgress]" + self.factory.progress_callback = progress_callback |
