From 67db796958a074bfdad296d980de99b7936f73d0 Mon Sep 17 00:00:00 2001 From: Broque Thomas <26755000+Nezreka@users.noreply.github.com> Date: Fri, 20 Mar 2026 07:28:32 -0700 Subject: [PATCH] Fix Tidal token refresh hammering when client credentials removed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Skip refresh attempt if client_id/secret not configured — clears stale tokens to stop retry loop permanently. Add 5-minute backoff after failed refresh to prevent hammering Tidal API every 2 seconds. --- core/tidal_client.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/core/tidal_client.py b/core/tidal_client.py index 14d2b704..61cbe1c2 100644 --- a/core/tidal_client.py +++ b/core/tidal_client.py @@ -406,6 +406,14 @@ class TidalClient: if not self.refresh_token: logger.error("No Tidal refresh token available") return False + + if not self.client_id or not self.client_secret: + logger.debug("Tidal client_id/secret not configured — skipping token refresh") + # Clear stale tokens so we stop retrying + self.access_token = None + self.refresh_token = None + self.token_expires_at = 0 + return False data = { 'grant_type': 'refresh_token', @@ -493,10 +501,18 @@ class TidalClient: if self.access_token and time.time() < self.token_expires_at: return True + # Backoff: if refresh recently failed, don't retry for 5 minutes + if hasattr(self, '_refresh_failed_at') and self._refresh_failed_at: + if time.time() - self._refresh_failed_at < 300: + return False + # Token expired but refresh token available — try silent refresh if self.access_token and self.refresh_token: logger.info("Tidal access token expired — attempting silent refresh...") - return self._refresh_access_token() + result = self._refresh_access_token() + if not result: + self._refresh_failed_at = time.time() + return result return False