mirror of
				https://github.com/ytdl-org/youtube-dl
				synced 2025-10-31 01:33:15 +00:00 
			
		
		
		
	[downloader/fragment] Restart download if .ytdl file is corrupt (closes #16312)
This commit is contained in:
		
							parent
							
								
									7dd6ab4a47
								
							
						
					
					
						commit
						500a86a52e
					
				| @ -74,8 +74,13 @@ class FragmentFD(FileDownloader): | ||||
|         return not ctx['live'] and not ctx['tmpfilename'] == '-' | ||||
| 
 | ||||
|     def _read_ytdl_file(self, ctx): | ||||
|         assert 'ytdl_corrupt' not in ctx | ||||
|         stream, _ = sanitize_open(self.ytdl_filename(ctx['filename']), 'r') | ||||
|         try: | ||||
|             ctx['fragment_index'] = json.loads(stream.read())['downloader']['current_fragment']['index'] | ||||
|         except Exception: | ||||
|             ctx['ytdl_corrupt'] = True | ||||
|         finally: | ||||
|             stream.close() | ||||
| 
 | ||||
|     def _write_ytdl_file(self, ctx): | ||||
| @ -158,11 +163,17 @@ class FragmentFD(FileDownloader): | ||||
|         if self.__do_ytdl_file(ctx): | ||||
|             if os.path.isfile(encodeFilename(self.ytdl_filename(ctx['filename']))): | ||||
|                 self._read_ytdl_file(ctx) | ||||
|                 if ctx['fragment_index'] > 0 and resume_len == 0: | ||||
|                 is_corrupt = ctx.get('ytdl_corrupt') is True | ||||
|                 is_inconsistent = ctx['fragment_index'] > 0 and resume_len == 0 | ||||
|                 if is_corrupt or is_inconsistent: | ||||
|                     message = ( | ||||
|                         '.ytdl file is corrupt' if is_corrupt else | ||||
|                         'Inconsistent state of incomplete fragment download') | ||||
|                     self.report_warning( | ||||
|                         'Inconsistent state of incomplete fragment download. ' | ||||
|                         'Restarting from the beginning...') | ||||
|                         '%s. Restarting from the beginning...' % message) | ||||
|                     ctx['fragment_index'] = resume_len = 0 | ||||
|                     if 'ytdl_corrupt' in ctx: | ||||
|                         del ctx['ytdl_corrupt'] | ||||
|                     self._write_ytdl_file(ctx) | ||||
|             else: | ||||
|                 self._write_ytdl_file(ctx) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Sergey M․
						Sergey M․