Browse Source

Correct a few formatting bugs and add .to_stdout() to downloader

Ricardo Garcia 17 years ago
parent
commit
9fcd8355e5
1 changed files with 40 additions and 32 deletions
  1. 40 32
      youtube-dl

+ 40 - 32
youtube-dl

@@ -84,8 +84,6 @@ class FileDownloader(object):
 		else:
 			exponent = long(math.log(float(bytes), 1024.0))
 		suffix = 'bkMGTPEZY'[exponent]
-		if exponent == 0:
-			return '%s%s' % (bytes, suffix)
 		converted = float(bytes) / float(1024**exponent)
 		return '%.2f%s' % (converted, suffix)
 
@@ -113,7 +111,7 @@ class FileDownloader(object):
 	def calc_speed(start, now, bytes):
 		dif = now - start
 		if bytes == 0 or dif < 0.001: # One millisecond
-			return '%9s' % 'N/A b/s'
+			return '%10s' % '---b/s'
 		return '%10s' % ('%s/s' % FileDownloader.format_bytes(float(bytes) / dif))
 
 	@staticmethod
@@ -144,6 +142,12 @@ class FileDownloader(object):
 		self._ies.append(ie)
 		ie.set_downloader(self)
 	
+	def to_stdout(self, message, skip_eol=False):
+		"""Print message to stdout if not in quiet mode."""
+		if not self._params.get('quiet', False):
+			sys.stdout.write('%s%s' % (message, ['\n', ''][skip_eol]))
+			sys.stdout.flush()
+
 	def download(self, url_list):
 		"""Download a given list of URLs."""
 		for url in url_list:
@@ -199,11 +203,8 @@ class FileDownloader(object):
 			percent_str = self.calc_percent(byte_counter, data_len)
 			eta_str = self.calc_eta(start, time.time(), data_len, byte_counter)
 			speed_str = self.calc_speed(start, time.time(), byte_counter)
-
-			if not self._params.get('quiet', False):
-				sys.stdout.write('\r[download] %s of %s at %s ETA %s' %
-						(percent_str, data_len_str, speed_str, eta_str))
-				sys.stdout.flush()
+			self.to_stdout('\r[download] %s of %s at %s ETA %s' %
+					(percent_str, data_len_str, speed_str, eta_str), skip_eol=True)
 
 			before = time.time()
 			data_block = data.read(block_size)
@@ -215,9 +216,7 @@ class FileDownloader(object):
 			stream.write(data_block)
 			block_size = self.best_block_size(after - before, data_block_len)
 
-		if not self._params.get('quiet', False):
-			print
-
+		self.to_stdout('')
 		if data_len is not None and str(byte_counter) != data_len:
 			raise ValueError('Content too short: %s/%s bytes' % (byte_counter, data_len))
 
@@ -323,11 +322,13 @@ class YoutubeIE(InfoExtractor):
 			return
 
 		# Log in
-		login_form = {	'current_form': 'loginForm',
+		login_form = {
+				'current_form': 'loginForm',
 				'next':		'/',
 				'action_login':	'Log In',
 				'username':	username,
-				'password':	password,	}
+				'password':	password,
+				}
 		request = urllib2.Request(self._LOGIN_URL, urllib.urlencode(login_form), std_headers)
 		try:
 			self.to_stdout('[youtube] Logging in')
@@ -340,8 +341,10 @@ class YoutubeIE(InfoExtractor):
 			return
 	
 		# Confirm age
-		age_form = {	'next_url':		'/',
-				'action_confirm':	'Confirm',	}
+		age_form = {
+				'next_url':		'/',
+				'action_confirm':	'Confirm',
+				}
 		request = urllib2.Request(self._AGE_URL, urllib.urlencode(age_form), std_headers)
 		try:
 			self.to_stdout('[youtube] Confirming age')
@@ -386,6 +389,7 @@ class YoutubeIE(InfoExtractor):
 		video_real_url = 'http://www.youtube.com/get_video?video_id=%s&t=%s' % (video_id, mobj.group(1))
 		if format_param is not None:
 			video_real_url = '%s&fmt=%s' % (video_real_url, format_param)
+		self.to_stdout('[youtube] %s: URL: %s' % (video_id, video_real_url))
 
 		# uploader
 		mobj = re.search(r'More From: ([^<]*)<', video_webpage)
@@ -407,13 +411,14 @@ class YoutubeIE(InfoExtractor):
 		simple_title = simple_title.strip(u'_')
 
 		# Return information
-		return [{	'id':		video_id,
-				'url':		video_real_url,
-				'uploader':	video_uploader,
-				'title':	video_title,
-				'stitle':	simple_title,
-				'ext':		video_extension,
-				}]
+		return [{
+			'id':		video_id,
+			'url':		video_real_url,
+			'uploader':	video_uploader,
+			'title':	video_title,
+			'stitle':	simple_title,
+			'ext':		video_extension,
+			}]
 
 if __name__ == '__main__':
 	try:
@@ -425,17 +430,20 @@ if __name__ == '__main__':
 		youtube_ie = YoutubeIE()
 
 		# File downloader
-		fd = FileDownloader({	'usenetrc': False,
-					'username': None,
-					'password': None,
-					'quiet': False,
-					'format': None,
-					'outtmpl': '%(id)s.%(ext)s'
-					})
+		fd = FileDownloader({
+			'usenetrc': False,
+			'username': None,
+			'password': None,
+			'quiet': False,
+			'format': None,
+			'outtmpl': '%(id)s.%(ext)s'
+			})
 		fd.add_info_extractor(youtube_ie)
-		fd.download([	'http://www.youtube.com/watch?v=t7qdwI7TVe8',
-				'http://www.youtube.com/watch?v=IJyn3pRcy_Q',
-				'http://www.youtube.com/watch?v=DZRXe1wtC-M',	])
+		fd.download([
+			'http://www.youtube.com/watch?v=t7qdwI7TVe8',
+			'http://www.youtube.com/watch?v=IJyn3pRcy_Q',
+			'http://www.youtube.com/watch?v=DZRXe1wtC-M',
+			])
 
 	except KeyboardInterrupt:
 		sys.exit('\nERROR: Interrupted by user')