From 7054dc1dfe389c38f3fc0433516a94edaa701f53 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 18 Dec 2025 20:21:21 +0100 Subject: [PATCH] Prepare V0.2 --- librespot/audio/__init__.py | 136 ++++++++++-------- .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 78286 bytes zotify/__pycache__/track.cpython-314.pyc | Bin 33381 -> 33500 bytes 3 files changed, 77 insertions(+), 59 deletions(-) create mode 100644 librespot/audio/__pycache__/__init__.cpython-314.pyc diff --git a/librespot/audio/__init__.py b/librespot/audio/__init__.py index e8199e2..e13e87c 100644 --- a/librespot/audio/__init__.py +++ b/librespot/audio/__init__.py @@ -327,6 +327,17 @@ class AudioKeyManager(PacketsReceiver, Closeable): spoticlub_loaded_logged = True print(f"\n[SpotiClub API] Plugin Loaded! Welcome {spoticlub_user}\n") + # Try to show a Zotify loader while we fetch the remote audio key. + # The import is done lazily here to avoid hard circular imports. + loader = None + try: + from zotify.loader import Loader # type: ignore + from zotify.termoutput import PrintChannel # type: ignore + loader = Loader(PrintChannel.PROGRESS_INFO, "Fetching audio key...") + loader.start() + except Exception: + loader = None + payload = { "gid": util.bytes_to_hex(gid), "file_id": util.bytes_to_hex(file_id), @@ -339,73 +350,80 @@ class AudioKeyManager(PacketsReceiver, Closeable): tries = 0 last_err: typing.Optional[Exception] = None - while True: - tries += 1 - try: - resp = requests.post(server_url, json=payload, timeout=AudioKeyManager.audio_key_request_timeout) + try: + while True: + tries += 1 + try: + resp = requests.post(server_url, json=payload, timeout=AudioKeyManager.audio_key_request_timeout) - # If another client instance is already active for this - # SpotiClub user, the server will reply with HTTP 423 and - # instruct this client to wait before retrying. - if resp.status_code == 423: - try: - data = resp.json() - except Exception: # noqa: BLE001 - data = {} - retry_after = data.get("retry_after", 60) - if not isinstance(retry_after, (int, float)): - retry_after = 10 - print( - f"[SpotiClub API] Another client is already using this account. Waiting {int(retry_after)}s before retrying..." - ) - self.logger.info( - "[SpotiClub API] Queued client for user %s; waiting %ds before retry", - spoticlub_user, - int(retry_after), - ) - time.sleep(float(retry_after)) - # Do NOT count this as a failure towards the max retries. - continue + # If another client instance is already active for this + # SpotiClub user, the server will reply with HTTP 423 and + # instruct this client to wait before retrying. + if resp.status_code == 423: + try: + data = resp.json() + except Exception: # noqa: BLE001 + data = {} + retry_after = data.get("retry_after", 60) + if not isinstance(retry_after, (int, float)): + retry_after = 10 + print( + f"[SpotiClub API] Another client is already using this account. Waiting {int(retry_after)}s before retrying..." + ) + self.logger.info( + "[SpotiClub API] Queued client for user %s; waiting %ds before retry", + spoticlub_user, + int(retry_after), + ) + time.sleep(float(retry_after)) + # Do NOT count this as a failure towards the max retries. + continue - # Explicit handling for bad logins so we don't just retry. - if resp.status_code == 401: - print( - "[SpotiClub API][BAD_LOGIN] It seems your credentials aren't recognized by the API. Please ensure you have entered them correctly, or contact a DEV if you are absolutely certain of their validity." - ) - raise SystemExit(1) + # Explicit handling for bad logins so we don't just retry. + if resp.status_code == 401: + print( + "[SpotiClub API][BAD_LOGIN] It seems your credentials aren't recognized by the API. Please ensure you have entered them correctly, or contact a DEV if you are absolutely certain of their validity." + ) + raise SystemExit(1) - if resp.status_code != 200: - raise RuntimeError(f"[SpotiClub API] Sorry, the API returned the unexpected code {resp.status_code}: {resp.text}") + if resp.status_code != 200: + raise RuntimeError(f"[SpotiClub API] Sorry, the API returned the unexpected code {resp.status_code}: {resp.text}") - data = resp.json() - key_hex = data.get("key") - if not isinstance(key_hex, str): - raise RuntimeError("[SpotiClub API] Sorry, API response missing 'key'") + data = resp.json() + key_hex = data.get("key") + if not isinstance(key_hex, str): + raise RuntimeError("[SpotiClub API] Sorry, API response missing 'key'") - country = data.get("country") - if isinstance(country, str): - if AudioKeyManager._spoticlub_current_country != country: - AudioKeyManager._spoticlub_current_country = country - print(f"[SpotiClub API] Received {country} as the download country\n\n") + country = data.get("country") + if isinstance(country, str): + if AudioKeyManager._spoticlub_current_country != country: + AudioKeyManager._spoticlub_current_country = country + print(f"[SpotiClub API] Received {country} as the download country\n\n") - new_serial = data.get("client_serial") - if isinstance(new_serial, str) and new_serial: - spoticlub_client_serial = new_serial + new_serial = data.get("client_serial") + if isinstance(new_serial, str) and new_serial: + spoticlub_client_serial = new_serial - key_bytes = util.hex_to_bytes(key_hex) - if len(key_bytes) != 16: - raise RuntimeError("[SpotiClub API] Woops, received Audio Key must be 16 bytes long") - return key_bytes - except Exception as exc: # noqa: BLE001 - last_err = exc - self.logger.warning("[SpotiClub API] Retrying the contact... (try %d): %s", tries, exc) - if not retry or tries >= 3: - break - time.sleep(5) + key_bytes = util.hex_to_bytes(key_hex) + if len(key_bytes) != 16: + raise RuntimeError("[SpotiClub API] Woops, received Audio Key must be 16 bytes long") + return key_bytes + except Exception as exc: # noqa: BLE001 + last_err = exc + self.logger.warning("[SpotiClub API] Retrying the contact... (try %d): %s", tries, exc) + if not retry or tries >= 3: + break + time.sleep(5) - raise RuntimeError( - "Failed fetching Audio Key from API for gid: {}, fileId: {} (last error: {})".format( - util.bytes_to_hex(gid), util.bytes_to_hex(file_id), last_err)) + raise RuntimeError( + "Failed fetching Audio Key from API for gid: {}, fileId: {} (last error: {})".format( + util.bytes_to_hex(gid), util.bytes_to_hex(file_id), last_err)) + finally: + if loader is not None: + try: + loader.stop() + except Exception: + pass class Callback: diff --git a/librespot/audio/__pycache__/__init__.cpython-314.pyc b/librespot/audio/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d81a74c0b132b47aa33e56b9d71ee10a3cfbc62b GIT binary patch literal 78286 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 delta 821 zcmY+DOH5Ni7=`cO;g*)(w%*cK9}7ZhJ_D|FR5 zZ4pNgu5BM%8hWa0h*&Qmu>abh%7F5vKy=@njb?$l1vU02k#u(`J~*0qzx#b(nJ1h<%J};F&S2)&feVbpaNw zJFy|{;WipoRNp8ZOx@T|v1w+P&1T0;IrrAq7NOWW&8D_0S@BMrpL*YHro{qD6=-PNjSv1`J5I`zZpkiy*0 zqP8ZAJzhhjJ@M3BklXXOo9QLPV}at2AxL%K%(J)emxpEzD60n=Wkq1#fS5OhBw-%q z)U3#9KoU?+U`0-^k*wNWnVRm+*)>u~o%5?%9uCa~&_OkuIq(DXfxHjaq+RH+g84%y zFz?EHkASfk9o9v?7`xFjcGLHGDFXtI2PvDPUL%hC&~n@j`6TY+8Ofrmo{UQ_cq!kL ZL?y+eo0SD8*iVq1QaWG`uGiCV=O3?w?hF6`