44from xml .etree import ElementTree
55from tqdm .auto import tqdm
66import os
7+ import re
78import argparse
89
910class PlexDownloader :
@@ -16,6 +17,8 @@ class PlexDownloader:
1617 base_url = ""
1718
1819 servers = {}
20+
21+ error_reg = re .compile (r"hostname '[^']+' doesn't match '\*([^']+)'" )
1922
2023 def login (self ):
2124 if self .token :
@@ -80,23 +83,25 @@ def _generate_baseurl(self):
8083 return url
8184 except requests .exceptions .SSLError as e :
8285 string_error = str (e )
83-
8486 if ".plex.direct" in string_error :
85- subdomain = str (e ).split ("doesn't match" )[1 ].lstrip ("'* " ).rstrip ("'\" )" )
86-
87- ip = server ['address' ].replace ('.' , '-' )
88-
89- url = "https://" + ip + subdomain + ":" + server ['port' ]
90-
91- r = requests .get (url , headers = headers )
92-
93- if r .status_code == 200 :
94- self .base_url = url
95- print ("Found Plex.Direct URL %s" % self .base_url )
96- return url
97- else :
98- print ("Couldn't find Direct.Plex url for Plex Media Server" )
99- return False
87+ error_match = self .error_reg .search (string_error )
88+
89+ if error_match is not None :
90+
91+ subdomain = error_match .group (1 )
92+
93+ ip = server ['address' ].replace ('.' , '-' )
94+
95+ url = "https://" + ip + subdomain + ":" + server ['port' ]
96+ r = requests .get (url , headers = headers )
97+
98+ if r .status_code == 200 :
99+ self .base_url = url
100+ print ("Found Plex.Direct URL %s" % self .base_url )
101+ return url
102+
103+ print ("Couldn't find Direct.Plex url for Plex Media Server" )
104+ return False
100105 else :
101106 print ("Custom cert is enabled, don't know what to do." )
102107 return False
@@ -225,7 +230,6 @@ def download(self):
225230 print ("Found %s servers" % server_count )
226231
227232 server = self .servers [self .server_hash ]
228-
229233 print ("Looking for Plex.Direct URL to %s" % server ['name' ])
230234 self ._generate_baseurl ()
231235
0 commit comments