@@ -100,13 +100,41 @@ def hoster_sort_key(_hoster: str) -> int:
100100 return sorted (hoster_list , key = hoster_sort_key )
101101
102102
103- async def get_working_direct_link (hosters : list [Hoster ]) -> Union [DirectLink , None ]:
103+ async def get_working_direct_link (hosters : list [Hoster ], app : "GuckenApp" ) -> Union [DirectLink , None ]:
104104 for hoster in hosters :
105- direct_link = await hoster .get_direct_link ()
105+ name = type (hoster ).__name__
106+ try :
107+ direct_link = await hoster .get_direct_link ()
108+ except Exception :
109+ logging .warning (
110+ "%s: failed to retrieve video URL from: \" %s\" " ,
111+ name ,
112+ hoster .url ,
113+ exc_info = True
114+ )
115+ app .notify (
116+ "Failed to retrieve video URL" ,
117+ title = f"{ name } error" ,
118+ severity = "warning" ,
119+ )
120+ continue
121+ if direct_link is None :
122+ logging .warning (
123+ "%s: failed to retrieve video URL from: \" %s\" " ,
124+ name ,
125+ hoster .url ,
126+ exc_info = True
127+ )
128+ app .notify (
129+ "Failed to retrieve video URL" ,
130+ title = f"{ name } error" ,
131+ severity = "warning" ,
132+ )
133+ continue
106134 is_working = await direct_link .check_is_working ()
107135 logging .info (
108136 'Check: "%s" Working: "%s" URL: "%s"' ,
109- type ( hoster ). __name__ ,
137+ name ,
110138 is_working ,
111139 direct_link ,
112140 )
@@ -716,7 +744,7 @@ async def play(
716744
717745 lang = sort_favorite_lang (episode .available_language , self .language )[0 ]
718746 sorted_hoster = sort_favorite_hoster (processed_hoster .get (lang ), self .hoster )
719- direct_link = await get_working_direct_link (sorted_hoster )
747+ direct_link = await get_working_direct_link (sorted_hoster , self )
720748
721749 # TODO: check for header support
722750 syncplay = gucken_settings_manager .settings ["settings" ]["syncplay" ]
0 commit comments