add currently playing cache to spotify

This commit is contained in:
Lee 2024-07-06 00:31:48 +01:00
parent 9395ae73b9
commit de1da2391d

@ -36,6 +36,13 @@ public class SpotifyService {
.expiration(30, TimeUnit.MINUTES) .expiration(30, TimeUnit.MINUTES)
.build(); .build();
/**
* A cache of the currently playing track for each user.
*/
private final Map<BatUser, CurrentlyPlaying> currentlyPlayingCache = ExpiringMap.builder()
.expiration(30, TimeUnit.SECONDS)
.build();
/** /**
* The client ID. * The client ID.
*/ */
@ -98,7 +105,12 @@ public class SpotifyService {
*/ */
@SneakyThrows @SneakyThrows
public CurrentlyPlaying getCurrentlyPlayingTrack(BatUser user) { public CurrentlyPlaying getCurrentlyPlayingTrack(BatUser user) {
return getSpotifyApi(user).getUsersCurrentlyPlayingTrack().build().execute(); if (currentlyPlayingCache.containsKey(user)) {
return currentlyPlayingCache.get(user);
}
CurrentlyPlaying currentlyPlaying = getSpotifyApi(user).getUsersCurrentlyPlayingTrack().build().execute();
currentlyPlayingCache.put(user, currentlyPlaying);
return currentlyPlaying;
} }
/** /**
@ -191,7 +203,7 @@ public class SpotifyService {
AuthorizationCodeCredentials credentials = api.authorizationCodeRefresh().build().execute(); AuthorizationCodeCredentials credentials = api.authorizationCodeRefresh().build().execute();
profile.setAccessToken(credentials.getAccessToken()); profile.setAccessToken(credentials.getAccessToken());
profile.setExpiresAt(System.currentTimeMillis() + (credentials.getExpiresIn() * 1000)); profile.setExpiresAt(System.currentTimeMillis() + (credentials.getExpiresIn() * 1000));
log.info("Refreshed Spotify token for user {}", user.getName()); log.info("Refreshed Spotify token for user \"{}\"", user.getName());
} catch (SpotifyWebApiException ex) { } catch (SpotifyWebApiException ex) {
log.error("Failed to refresh Spotify token", ex); log.error("Failed to refresh Spotify token", ex);
} }