package cc.fascinated.bat.common; import cc.fascinated.bat.model.BatUser; import cc.fascinated.bat.service.SpotifyService; import lombok.NonNull; import lombok.extern.log4j.Log4j2; import se.michaelthelin.spotify.model_objects.miscellaneous.CurrentlyPlaying; import se.michaelthelin.spotify.model_objects.specification.Track; /** * @author Fascinated (fascinated7) */ @Log4j2 public class SpotifyUtils { /** * Gets the URL of the track that is currently playing. * * @param currentlyPlaying The currently playing object. * @return The URL of the track that is currently playing. */ public static String getTrackUrl(CurrentlyPlaying currentlyPlaying) { return "https://open.spotify.com/track/" + currentlyPlaying.getItem().getId(); } /** * Gets the formatted time of the currently playing track * * @param currentlyPlaying the currently playing track * @return the formatted time */ public static String getFormattedTime(@NonNull CurrentlyPlaying currentlyPlaying) { Track track = (Track) currentlyPlaying.getItem(); int currentMinutes = currentlyPlaying.getProgress_ms() / 1000 / 60; int currentSeconds = currentlyPlaying.getProgress_ms() / 1000 % 60; int totalMinutes = track.getDurationMs() / 1000 / 60; int totalSeconds = track.getDurationMs() / 1000 % 60; return "`%02d:%02d`/`%02d:%02d`".formatted(currentMinutes, currentSeconds, totalMinutes, totalSeconds); } /** * Get the next track that is playing * * @param user The user to get the track for * @param oldName The name of the old track * @return The new track */ public static CurrentlyPlaying getNewTrack(@NonNull SpotifyService spotifyService, @NonNull BatUser user, @NonNull String oldName) { int checks = 0; try { Thread.sleep(150); while (checks < 10) { CurrentlyPlaying currentlyPlaying = spotifyService.getCurrentlyPlayingTrack(user); Track track = (Track) currentlyPlaying.getItem(); if (track.getName().equals(oldName)) { Thread.sleep(250); checks++; } else { log.info("Found new track \"{}\" in {} check{}", track.getName(), checks, checks == 1 ? "" : "s"); return currentlyPlaying; } } } catch (InterruptedException e) { e.printStackTrace(); } return null; } }