@@ -22,9 +22,9 @@ def __init__(self, job):
2222 DownloaderBase .__init__ (self , job )
2323
2424 extractor = job .extractor
25- retries = self .config ("retries" , extractor ._retries )
25+ self . retries = self .config ("retries" , extractor ._retries )
2626 self .ytdl_opts = {
27- "retries" : retries + 1 if retries >= 0 else float ("inf" ),
27+ "retries" : self . retries + 1 if self . retries >= 0 else float ("inf" ),
2828 "socket_timeout" : self .config ("timeout" , extractor ._timeout ),
2929 "nocheckcertificate" : not self .config ("verify" , extractor ._verify ),
3030 "proxy" : self .proxies .get ("http" ) if self .proxies else None ,
@@ -77,19 +77,26 @@ def download(self, url, pathfmt):
7777 for cookie in self .session .cookies :
7878 set_cookie (cookie )
7979
80+ tries = 0
8081 url = url [5 :]
8182 manifest = kwdict .get ("_ytdl_manifest" )
82- try :
83- if manifest is None :
84- info_dict = self ._extract_url (
85- ytdl_instance , url )
86- else :
87- info_dict = self ._extract_manifest (
88- ytdl_instance , url , kwdict )
89- except Exception as exc :
90- self .log .traceback (exc )
91- self .log .warning ("%s: %s" , exc .__class__ .__name__ , exc )
92- return False
83+ while True :
84+ try :
85+ if manifest is None :
86+ info_dict = self ._extract_url (
87+ ytdl_instance , url )
88+ else :
89+ info_dict = self ._extract_manifest (
90+ ytdl_instance , url , kwdict )
91+ break
92+ except Exception as exc :
93+ tries += 1
94+ self .log .traceback (exc )
95+ self .log .error ("%s: %s (%s/%s)" ,
96+ exc .__class__ .__name__ , exc ,
97+ tries , self .retries + 1 )
98+ if tries > self .retries :
99+ return False
93100
94101 if "__gdl_initialize" in ytdl_instance .params :
95102 del ytdl_instance .params ["__gdl_initialize" ]
@@ -102,9 +109,21 @@ def download(self, url, pathfmt):
102109 if extra := kwdict .get ("_ytdl_extra" ):
103110 info_dict .update (extra )
104111
105- if "entries" in info_dict :
106- return self ._download_playlist (ytdl_instance , pathfmt , info_dict )
107- return self ._download_video (ytdl_instance , pathfmt , info_dict )
112+ while True :
113+ try :
114+ if "entries" in info_dict :
115+ return self ._download_playlist (
116+ ytdl_instance , pathfmt , info_dict )
117+ return self ._download_video (
118+ ytdl_instance , pathfmt , info_dict )
119+ except Exception as exc :
120+ tries += 1
121+ self .log .traceback (exc )
122+ self .log .error ("%s: %s (%s/%s)" ,
123+ exc .__class__ .__name__ , exc ,
124+ tries , self .retries + 1 )
125+ if tries > self .retries :
126+ return False
108127
109128 def _extract_url (self , ytdl , url ):
110129 return ytdl .extract_info (url , download = False )
0 commit comments