From 7563dcd23663f18992e0893caf4622a7a4457490 Mon Sep 17 00:00:00 2001
From: stabbedbybrick <stabbedbybrick@proton.me>
Date: Tue, 8 Apr 2025 11:56:34 +0200
Subject: [PATCH] AUBC -> v1.0.1

Check status before loading manifest
---
 services/AUBC/__init__.py | 34 ++++++++++++++++------------------
 1 file changed, 16 insertions(+), 18 deletions(-)

diff --git a/services/AUBC/__init__.py b/services/AUBC/__init__.py
index 85df6c3..f08c512 100644
--- a/services/AUBC/__init__.py
+++ b/services/AUBC/__init__.py
@@ -24,7 +24,7 @@ class AUBC(Service):
     Service code for ABC iView streaming service (https://iview.abc.net.au/).
 
     \b
-    Version: 1.0.0
+    Version: 1.0.1
     Author: stabbedbybrick
     Authorization: None
     Robustness:
@@ -117,8 +117,19 @@ class AUBC(Service):
 
         streams = next(x["streams"]["mpegdash"] for x in playlist if x["type"] == "program")
         captions = next((x.get("captions") for x in playlist if x["type"] == "program"), None)
-        manifest = streams["720"].replace("720", "1080") if streams.get("720") else streams["sd"]
-        title.data["protected"] = True if streams.get("protected") else False
+        title.data["protected"] = streams.get("protected", False)
+
+        if "720" in streams:
+            streams["1080"] = streams["720"].replace("720", "1080")
+
+        manifest = next(
+            (url for key in ["1080", "720", "sd", "sd-low"] if key in streams
+            for url in [streams[key]] 
+            if self.session.head(url).status_code == 200),
+            None
+        )
+        if not manifest:
+            raise ValueError("Could not find a manifest for this title")
 
         tracks = DASH.from_url(manifest, self.session).to_tracks(title.language)
 
@@ -221,23 +232,10 @@ class AUBC(Service):
             language=language,
         )
 
-    def _request(
-        self,
-        method: str,
-        api: str,
-        params: dict = None,
-        headers: dict = None,
-        data: dict = None,
-        payload: dict = None,
-    ) -> Any[dict | str]:
+    def _request(self, method: str, api: str, **kwargs: Any) -> Any[dict | str]:
         url = urljoin(self.config["endpoints"]["base_url"], api)
 
-        if params:
-            self.session.params.update(params)
-        if headers:
-            self.session.headers.update(headers)
-
-        prep = self.session.prepare_request(Request(method, url, data=data, json=payload))
+        prep = self.session.prepare_request(Request(method, url, **kwargs))
 
         response = self.session.send(prep)
         if response.status_code != 200: