Skip to content

Commit

Permalink
add way to stop _token_refresher
Browse files Browse the repository at this point in the history
  • Loading branch information
s4w3d0ff authored Feb 4, 2025
1 parent 3b4efc8 commit 4eaadf9
Showing 1 changed file with 22 additions and 13 deletions.
35 changes: 22 additions & 13 deletions spotifio/oauth.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,31 +156,40 @@ async def _token_refresher(self):
self._refresh_event.set()
logger.debug(f"_token_refresher started...")
while self._running:
time_left = self._token['expires_time'] - time.time()
time_left = self._token['expires_time'] - time.time()-60
logger.debug(f"Token expires in {time_left} seconds...")
if time_left-60 <= 0:
if time_left <= 0:
# pause 'self.get_token'
self._refresh_event.clear()
# refresh token
await self._refresh_token()
# resume 'self.get_token'
self._refresh_event.set()
continue # skip sleep to get new time_left
await asyncio.sleep(time_left-60)
await asyncio.sleep(time_left)

async def _login(self, token=None):
""" Checks storage for saved token, gets new token if one isnt found. Starts the token refresher task."""
self._token = token
async def _run(self):
self._refresh_task = None
if not self._token:
logger.debug(f"Attempting to load saved token...")
self._token = await self.storage.load_token(name="spotify")
if self._token:
logger.warning(f"Loaded saved token from storage!")
else:
self._token = await self._get_new_token()
self._refresh_task = asyncio.create_task(self._token_refresher())

async def stop(self):
self._running = False
try:
await asyncio.wait_for(self._refresh_task, timeout=15)
except TimeoutError:
logger.warning('The task was cancelled due to a timeout')

async def _login(self, token=None):
""" Checks storage for saved token, gets new token if one isnt found. Starts the token refresher task."""
logger.debug(f"Attempting to load saved token...")
self._token = await self.storage.load_token(name="spotify")
if self._token:
logger.warning(f"Loaded saved token from storage!")
else:
self._token = await self._get_new_token()
if not self._running:
await self._run()

async def get_token(self):
""" Returns current token after checking if the token needs to be refreshed """
if not self._token:
Expand Down

0 comments on commit 4eaadf9

Please sign in to comment.