From 1bf4ec9859f82f6d5b9a21fd4a26d4a79a7a53ba Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 18 Dec 2025 01:11:35 +0100 Subject: [PATCH] SpotiClub Patch v0.2.0 --- librespot/core.py | 34 ++++++++++++++++++++++------------ librespot/oauth.py | 4 ++++ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/librespot/core.py b/librespot/core.py index 276f526..cc87220 100644 --- a/librespot/core.py +++ b/librespot/core.py @@ -1394,7 +1394,16 @@ class Session(Closeable, MessageListener, SubListener): finally: self.connection.set_timeout(0) - # If we reach here, the handshake succeeded. + # If we reach here, the handshake succeeded; derive + # the Shannon cipher keys and mark the session as + # connected. + buffer.seek(20) + with self.__auth_lock: + self.cipher_pair = CipherPair( + buffer.read(32), buffer.read(32) + ) + self.__auth_lock_bool = True + self.logger.info("Connection successfully!") return except (ConnectionResetError, OSError, struct.error) as exc: @@ -1426,17 +1435,18 @@ class Session(Closeable, MessageListener, SubListener): ) time.sleep(1) - # All attempts failed: raise a clear error instead of crashing - # with a low-level struct.error. - raise RuntimeError( - "Failed to connect to Spotify access point after " - f"{max_attempts} attempts" - ) from last_exc - buffer.seek(20) - with self.__auth_lock: - self.cipher_pair = CipherPair(buffer.read(32), buffer.read(32)) - self.__auth_lock_bool = True - self.logger.info("Connection successfully!") + # All attempts failed: log and raise a clear, user-friendly + # error instead of crashing with a low-level struct.error. + friendly_message = ( + "Failed to connect to Spotify after " + f"{max_attempts} attempts. " + "OAuth login succeeded, but connecting to the Spotify " + "access point timed out or was refused. " + "This is usually a network or firewall issue." + ) + self.logger.error("%s Last error: %s", friendly_message, last_exc) + print(friendly_message) + raise RuntimeError(friendly_message) from last_exc def content_feeder(self) -> PlayableContentFeeder: """ """ diff --git a/librespot/oauth.py b/librespot/oauth.py index 3522551..2540f0c 100644 --- a/librespot/oauth.py +++ b/librespot/oauth.py @@ -53,6 +53,8 @@ class OAuth: def set_code(self, code): self.__code = code + logging.info("OAuth: Callback received, attempting to connect to Spotify...") + print("OAuth: Callback received, attempting to connect to Spotify...") def request_token(self): if not self.__code: @@ -97,6 +99,8 @@ class OAuth: self.end_headers() self.wfile.write(b"Request doesn't contain 'code'") return + # Store the authorization code and notify the main + # process that the callback has been received. self.server.set_code(query.get("code")[0]) self.send_response(200) self.send_header('Content-type', 'text/html')