Ejemplo n.º 1
0
	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)
Ejemplo n.º 2
0
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)