summary refs log tree commit diff
diff options
context:
space:
mode:
authorRicardo Garcia <sarbalap+freshmeat@gmail.com>2009-04-10 00:59:59 +0200
committerRicardo Garcia <sarbalap+freshmeat@gmail.com>2010-10-31 11:24:08 +0100
commitc8619e01637ae33ff6ed2a770a6222d792cf0771 (patch)
treee53dcc7c1ae4e1c9a9128f7a6bd7cc693b443c14
parent257453b92bf07920814ce68620ee8fe0949fb6de (diff)
downloadyoutube-dl-c8619e01637ae33ff6ed2a770a6222d792cf0771.tar.gz
youtube-dl-c8619e01637ae33ff6ed2a770a6222d792cf0771.tar.xz
youtube-dl-c8619e01637ae33ff6ed2a770a6222d792cf0771.zip
Move the code to process an InfoExtractor result to its own method
-rwxr-xr-xyoutube-dl100
1 files changed, 57 insertions, 43 deletions
diff --git a/youtube-dl b/youtube-dl
index 6757a896c..c526071e5 100755
--- a/youtube-dl
+++ b/youtube-dl
@@ -239,6 +239,48 @@ class FileDownloader(object):
 		"""Report download finished."""
 		self.to_stdout(u'')
 
+	def process_info(self, info_dict):
+		"""Process a single dictionary returned by an InfoExtractor."""
+		# Forced printings
+		if self.params.get('forcetitle', False):
+			print info_dict['title']
+		if self.params.get('forceurl', False):
+			print info_dict['url']
+			
+		# Do nothing else if in simulate mode
+		if self.params.get('simulate', False):
+			return 0
+
+		try:
+			filename = self.params['outtmpl'] % info_dict
+			self.report_destination(filename)
+		except (ValueError, KeyError), err:
+			return self.trouble('ERROR: invalid output template or system charset: %s' % str(err))
+		if self.params['nooverwrites'] and os.path.exists(filename):
+			self.to_stderr('WARNING: file exists: %s; skipping' % filename)
+			return 0
+		try:
+			self.pmkdir(filename)
+		except (OSError, IOError), err:
+			return self.trouble('ERROR: unable to create directories: %s' % str(err))
+		try:
+			outstream = open(filename, 'wb')
+		except (OSError, IOError), err:
+			return self.trouble('ERROR: unable to open for writing: %s' % str(err))
+		try:
+			self._do_download(outstream, info_dict['url'])
+			outstream.close()
+		except (OSError, IOError), err:
+			return self.trouble('ERROR: unable to write video data: %s' % str(err))
+		except (urllib2.URLError, httplib.HTTPException, socket.error), err:
+			return self.trouble('ERROR: unable to download video data: %s' % str(err))
+		try:
+			self.post_process(filename, info_dict)
+		except (PostProcessingError), err:
+			return self.trouble('ERROR: postprocessing: %s' % str(err))
+
+		return 0
+
 	def download(self, url_list):
 		"""Download a given list of URLs."""
 		retcode = 0
@@ -248,64 +290,36 @@ class FileDownloader(object):
 		for url in url_list:
 			suitable_found = False
 			for ie in self._ies:
+				# Go to next InfoExtractor if not suitable
 				if not ie.suitable(url):
 					continue
+
 				# Suitable InfoExtractor found
 				suitable_found = True
+
+				# Extract information from URL
 				all_results = ie.extract(url)
 				results = [x for x in all_results if x is not None]
+
+				# See if there were problems extracting any information
 				if len(results) != len(all_results):
 					retcode = self.trouble()
 
+				# Two results could go to the same file
 				if len(results) > 1 and self.fixed_template():
 					raise SameFileError(self.params['outtmpl'])
 
+				# Process each result
 				for result in results:
-					# Forced printings
-					if self.params.get('forcetitle', False):
-						print result['title']
-					if self.params.get('forceurl', False):
-						print result['url']
-						
-					# Do nothing else if in simulate mode
-					if self.params.get('simulate', False):
-						continue
-
-					try:
-						filename = self.params['outtmpl'] % result
-						self.report_destination(filename)
-					except (ValueError, KeyError), err:
-						retcode = self.trouble('ERROR: invalid output template or system charset: %s' % str(err))
-						continue
-					if self.params['nooverwrites'] and os.path.exists(filename):
-						self.to_stderr('WARNING: file exists: %s; skipping' % filename)
-						continue
-					try:
-						self.pmkdir(filename)
-					except (OSError, IOError), err:
-						retcode = self.trouble('ERROR: unable to create directories: %s' % str(err))
-						continue
-					try:
-						outstream = open(filename, 'wb')
-					except (OSError, IOError), err:
-						retcode = self.trouble('ERROR: unable to open for writing: %s' % str(err))
-						continue
-					try:
-						self._do_download(outstream, result['url'])
-						outstream.close()
-					except (OSError, IOError), err:
-						retcode = self.trouble('ERROR: unable to write video data: %s' % str(err))
-						continue
-					except (urllib2.URLError, httplib.HTTPException, socket.error), err:
-						retcode = self.trouble('ERROR: unable to download video data: %s' % str(err))
-						continue
-					try:
-						self.post_process(filename, result)
-					except (PostProcessingError), err:
-						retcode = self.trouble('ERROR: postprocessing: %s' % str(err))
-						continue
+					result = self.process_info(result)
+
+					# Do not overwrite an error code with a success code
+					if result != 0:
+						retcode = result
 
+				# Suitable InfoExtractor had been found; go to next URL
 				break
+
 			if not suitable_found:
 				retcode = self.trouble('ERROR: no suitable InfoExtractor: %s' % url)