|  | @@ -210,6 +210,7 @@ class FileDownloader(object):
 | 
	
		
			
				|  |  |  	playlistend:      Playlist item to end at.
 | 
	
		
			
				|  |  |  	logtostderr:      Log messages to stderr instead of stdout.
 | 
	
		
			
				|  |  |  	consoletitle:     Display progress in console window's titlebar.
 | 
	
		
			
				|  |  | +	nopart:           Do not use temporary .part files.
 | 
	
		
			
				|  |  |  	"""
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	params = None
 | 
	
	
		
			
				|  | @@ -237,14 +238,7 @@ class FileDownloader(object):
 | 
	
		
			
				|  |  |  		for dir in aggregate:
 | 
	
		
			
				|  |  |  			if not os.path.exists(dir):
 | 
	
		
			
				|  |  |  				os.mkdir(dir)
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -	@staticmethod
 | 
	
		
			
				|  |  | -	def temp_name(filename):
 | 
	
		
			
				|  |  | -		"""Returns a temporary filename for the given filename."""
 | 
	
		
			
				|  |  | -		if filename == u'-' or (os.path.exists(filename) and not os.path.isfile(filename)):
 | 
	
		
			
				|  |  | -			return filename
 | 
	
		
			
				|  |  | -		return filename + u'.part'
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	@staticmethod
 | 
	
		
			
				|  |  |  	def format_bytes(bytes):
 | 
	
		
			
				|  |  |  		if bytes is None:
 | 
	
	
		
			
				|  | @@ -374,7 +368,14 @@ class FileDownloader(object):
 | 
	
		
			
				|  |  |  		speed = float(byte_counter) / elapsed
 | 
	
		
			
				|  |  |  		if speed > rate_limit:
 | 
	
		
			
				|  |  |  			time.sleep((byte_counter - rate_limit * (now - start_time)) / rate_limit)
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	def temp_name(self, filename):
 | 
	
		
			
				|  |  | +		"""Returns a temporary filename for the given filename."""
 | 
	
		
			
				|  |  | +		if self.params.get('nopart', False) or filename == u'-' or \
 | 
	
		
			
				|  |  | +				(os.path.exists(filename) and not os.path.isfile(filename)):
 | 
	
		
			
				|  |  | +			return filename
 | 
	
		
			
				|  |  | +		return filename + u'.part'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	def try_rename(self, old_filename, new_filename):
 | 
	
		
			
				|  |  |  		try:
 | 
	
		
			
				|  |  |  			if old_filename == new_filename:
 | 
	
	
		
			
				|  | @@ -547,7 +548,7 @@ class FileDownloader(object):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	def _do_download(self, filename, url, player_url):
 | 
	
		
			
				|  |  |  		# Check file already present
 | 
	
		
			
				|  |  | -		if self.params.get('continuedl', False) and os.path.isfile(filename):
 | 
	
		
			
				|  |  | +		if self.params.get('continuedl', False) and os.path.isfile(filename) and not self.params.get('nopart', False):
 | 
	
		
			
				|  |  |  			self.report_file_already_downloaded(filename)
 | 
	
		
			
				|  |  |  			return True
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2329,6 +2330,8 @@ if __name__ == '__main__':
 | 
	
		
			
				|  |  |  				action='store_true', dest='continue_dl', help='resume partially downloaded files', default=False)
 | 
	
		
			
				|  |  |  		filesystem.add_option('--cookies',
 | 
	
		
			
				|  |  |  				dest='cookiefile', metavar='FILE', help='file to dump cookie jar to')
 | 
	
		
			
				|  |  | +		filesystem.add_option('--no-part',
 | 
	
		
			
				|  |  | +				action='store_true', dest='nopart', help='do not use .part files', default=False)
 | 
	
		
			
				|  |  |  		parser.add_option_group(filesystem)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		(opts, args) = parser.parse_args()
 | 
	
	
		
			
				|  | @@ -2452,6 +2455,7 @@ if __name__ == '__main__':
 | 
	
		
			
				|  |  |  			'playlistend': opts.playlistend,
 | 
	
		
			
				|  |  |  			'logtostderr': opts.outtmpl == '-',
 | 
	
		
			
				|  |  |  			'consoletitle': opts.consoletitle,
 | 
	
		
			
				|  |  | +			'nopart': opts.nopart,
 | 
	
		
			
				|  |  |  			})
 | 
	
		
			
				|  |  |  		fd.add_info_extractor(youtube_search_ie)
 | 
	
		
			
				|  |  |  		fd.add_info_extractor(youtube_pl_ie)
 |