Handle file open mode correctly (fixes issue #76)
This commit is contained in:
		
							
								
								
									
										12
									
								
								youtube-dl
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								youtube-dl
									
									
									
									
									
								
							@@ -392,19 +392,21 @@ class FileDownloader(object):
 | 
			
		||||
	
 | 
			
		||||
	def _do_download(self, filename, url):
 | 
			
		||||
		stream = None
 | 
			
		||||
		open_mode = 'ab'
 | 
			
		||||
 | 
			
		||||
		open_mode = 'wb'
 | 
			
		||||
		basic_request = urllib2.Request(url, None, std_headers)
 | 
			
		||||
		request = urllib2.Request(url, None, std_headers)
 | 
			
		||||
 | 
			
		||||
		# Attempt to resume download with "continuedl" option
 | 
			
		||||
		# Establish possible resume length
 | 
			
		||||
		if os.path.isfile(filename):
 | 
			
		||||
			resume_len = os.path.getsize(filename)
 | 
			
		||||
		else:
 | 
			
		||||
			resume_len = 0
 | 
			
		||||
 | 
			
		||||
		# Request parameters in case of being able to resume
 | 
			
		||||
		if self.params.get('continuedl', False) and resume_len != 0:
 | 
			
		||||
			self.report_resuming_byte(resume_len)
 | 
			
		||||
			request.add_header('Range','bytes=%d-' % resume_len)
 | 
			
		||||
			open_mode = 'ab'
 | 
			
		||||
 | 
			
		||||
		# Establish connection
 | 
			
		||||
		try:
 | 
			
		||||
@@ -412,12 +414,16 @@ class FileDownloader(object):
 | 
			
		||||
		except (urllib2.HTTPError, ), err:
 | 
			
		||||
			if err.code != 416: #  416 is 'Requested range not satisfiable'
 | 
			
		||||
				raise
 | 
			
		||||
			# Unable to resume
 | 
			
		||||
			data = urllib2.urlopen(basic_request)
 | 
			
		||||
			content_length = data.info()['Content-Length']
 | 
			
		||||
 | 
			
		||||
			if content_length is not None and long(content_length) == resume_len:
 | 
			
		||||
				# Because the file had already been fully downloaded
 | 
			
		||||
				self.report_file_already_downloaded(filename)
 | 
			
		||||
				return True
 | 
			
		||||
			else:
 | 
			
		||||
				# Because the server didn't let us
 | 
			
		||||
				self.report_unable_to_resume()
 | 
			
		||||
				open_mode = 'wb'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user