def __init__(self, *args, **kw_args): TwAgentHelper.__init__(self, *args, **kw_args) import mp_globals from simpleevent import SimpleEvent self.length = 0 self.cancel_event = SimpleEvent() self.downloadTimer = eTimer() if mp_globals.isDreamOS: self.downloadTimer_conn = self.downloadTimer.timeout.connect(self.__updateProgress) else: self.downloadTimer.callback.append(self.__updateProgress)
class TwDownloadAgent(TwAgentHelper): def __init__(self, *args, **kw_args): TwAgentHelper.__init__(self, *args, **kw_args) import mp_globals from simpleevent import SimpleEvent self.length = 0 self.cancel_event = SimpleEvent() self.downloadTimer = eTimer() if mp_globals.isDreamOS: self.downloadTimer_conn = self.downloadTimer.timeout.connect(self.__updateProgress) else: self.downloadTimer.callback.append(self.__updateProgress) def downloadPage(self, url, file_nm, pre_callback): d_print( "downloadPage: ", url) import mp_globals self.filepath = config.mediaportal.storagepath.value + file_nm try: self.file = open(self.filepath, 'wb') except: err = 'downloadPage: Cannot create:\n%s' % self.filepath mp_globals.yt_tmp_storage_dirty |= True self.downloadTimer.start(1000, False) return self.agent.request('GET', url, headers=self.headers).addCallback(self.__downloadResource, pre_callback, self.file, self.filepath, self.cancel_event).addCallback(self.__downloadFinished) def __downloadResource(self, response, callback, file, filepath, event): self.length = response.length finished = Deferred() response.deliverBody(DownloadResource(response.code, response.phrase, finished, callback, file, filepath, event)) return finished def cancelDownload(self, callback=None): import mp_globals self.downloadTimer.stop() if mp_globals.yt_download_runs: self.cancel_event.genEvent(callback) elif callback: callback() def __downloadFinished(self, data): import re import mp_globals m = re.search('(File=".*?") buffering="(.*?)"', data) if m: d_print( '%s downloaded, "%s": %d of %d bytes loaded' % (m.group(1), m.group(2), mp_globals.yt_bytes_downloaded, self.length)) self.downloadTimer.stop() if mp_globals.yt_download_progress_widget: reactor.callLater(1, self.__updateProgressbar, mp_globals.yt_bytes_downloaded, self.length) return data def __updateProgress(self): import mp_globals #d_print( 'Download-Stat: %d of %d bytes' % (mp_globals.yt_bytes_downloaded, self.length)) if mp_globals.yt_download_progress_widget: reactor.callLater(0, self.__updateProgressbar, mp_globals.yt_bytes_downloaded, self.length) def __updateProgressbar(self, size_downloaded, size): import mp_globals if size > 0 and size_downloaded >= 0: progress = int(100 * round(float(size_downloaded) / size, 2)) if progress > 100: progress = 100 mp_globals.yt_download_progress_widget.setValue(progress)