fix(iP): Set default version for UHD

This commit is contained in:
stabbedbybrick 2024-07-17 10:21:41 +02:00
parent fea45c5ed6
commit 3095165f8c

View File

@ -143,21 +143,29 @@ class iP(Service):
def get_tracks(self, title: Union[Movie, Episode]) -> Tracks: def get_tracks(self, title: Union[Movie, Episode]) -> Tracks:
r = self.session.get(url=self.config["endpoints"]["playlist"].format(pid=title.id)) r = self.session.get(url=self.config["endpoints"]["playlist"].format(pid=title.id))
r.raise_for_status() r.raise_for_status()
playlist = r.json()
versions = r.json().get("allAvailableVersions") versions = playlist.get("allAvailableVersions")
if not versions: if not versions:
# If API returns no versions, try to fetch from site source code # If API returns no versions, try to fetch from site source code
r = self.session.get(self.config["base_url"].format(type="episode", pid=title.id)) r = self.session.get(self.config["base_url"].format(type="episode", pid=title.id))
redux = re.search("window.__IPLAYER_REDUX_STATE__ = (.*?);</script>", r.text).group(1) redux = re.search("window.__IPLAYER_REDUX_STATE__ = (.*?);</script>", r.text).group(1)
data = json.loads(redux) data = json.loads(redux)
versions = [{"pid": x.get("id") for x in data["versions"] if not x.get("kind") == "audio-described"}] versions = [{"pid": x.get("id") for x in data.get("versions", {}) if not x.get("kind") == "audio-described"}]
if self.vcodec == "H.265":
versions = [{"pid": playlist.get("defaultAvailableVersion", {}).get("pid")}]
if not versions:
self.log.error(" - No available versions for this title was found")
sys.exit(1)
connections = [self.check_all_versions(version) for version in (x.get("pid") for x in versions)] connections = [self.check_all_versions(version) for version in (x.get("pid") for x in versions)]
quality = [connection.get("height") for i in connections for connection in i if connection.get("height")] quality = [connection.get("height") for i in connections for connection in i if connection.get("height")]
max_quality = max((h for h in quality if h < "1080"), default=None) max_quality = max((h for h in quality if h < "1080"), default=None)
media = next( media = next(
(i for i in connections if any(connection.get("height") == max_quality or "2160" for connection in i)), (i for i in connections if any(connection.get("height") == max_quality for connection in i)),
None, None,
) )