package com.sleazyweasel.applescriptifier;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class MusicPlayerState {
private final boolean currentSongIsLoved;
private final String title;
private final String artist;
private final String station;
private final String album;
private final MusicPlayerInputType inputTypeRequested;
private final Map<Integer, String> stations;
private final String albumArtUrl;
private final String detailUrl;
private final String currentTimeInTrack;
private final boolean playing;
private final double volume;
public MusicPlayerState(boolean currentSongIsLoved, String title, String artist, String station, String album, MusicPlayerInputType inputTypeRequested, Map<Integer, String> stations, String albumArtUrl, String currentTimeInTrack, boolean isPlaying, String detailUrl, double volume) {
this.currentSongIsLoved = currentSongIsLoved;
this.title = title;
this.artist = artist;
this.station = station;
this.album = album;
this.inputTypeRequested = inputTypeRequested;
this.stations = stations;
this.albumArtUrl = albumArtUrl;
this.detailUrl = detailUrl;
this.volume = volume;
currentTimeInTrack = currentTimeInTrack.trim();
if (currentTimeInTrack.startsWith("-")) {
currentTimeInTrack = currentTimeInTrack.substring(1);
}
this.currentTimeInTrack = currentTimeInTrack;
this.playing = isPlaying;
}
public boolean isCurrentSongIsLoved() {
return currentSongIsLoved;
}
public String getTitle() {
return title;
}
public String getArtist() {
return artist;
}
public String getStation() {
return station;
}
public String getAlbum() {
return album;
}
public MusicPlayerInputType getInputTypeRequested() {
return inputTypeRequested;
}
public boolean isInputRequested() {
return !MusicPlayerInputType.NONE.equals(getInputTypeRequested());
}
public Map<Integer, String> getStations() {
return stations;
}
public String getAlbumArtUrl() {
return albumArtUrl;
}
public String getCurrentTimeInTrack() {
return currentTimeInTrack;
}
public boolean isPlaying() {
return playing;
}
public String getDetailUrl() {
return detailUrl;
}
public List<StationChoice> getStationChoices() {
List<StationChoice> choices = new ArrayList<StationChoice>();
for (Map.Entry<Integer, String> stationEntry : stations.entrySet()) {
choices.add(new StationChoice(stationEntry.getKey(), stationEntry.getValue()));
}
return choices;
}
public StationChoice getCurrentStation() {
for (Map.Entry<Integer, String> entry : stations.entrySet()) {
if (station.equals(entry.getValue())) {
return new StationChoice(entry.getKey(), entry.getValue());
}
}
return null;
}
public int getCurrentTime() {
if (currentTimeInTrack != null && currentTimeInTrack.length() > 0) {
String[] parts = currentTimeInTrack.split("/");
String totalTimePart = parts[0];
return parseTime(totalTimePart);
}
return 0;
}
public int getDuration() {
if (currentTimeInTrack != null && currentTimeInTrack.length() > 0) {
String[] parts = currentTimeInTrack.split("/");
if (parts.length > 1) {
String totalTimePart = parts[1];
return parseTime(totalTimePart);
}
}
return 0;
}
//todo this is ridiculous...why are we storing the formatted data, instead of the ints?
private int parseTime(String totalTimePart) {
String[] minutesAndSeconds = totalTimePart.split(":");
int minutes = Integer.parseInt(minutesAndSeconds[0]);
int seconds = Integer.parseInt(minutesAndSeconds[1]);
return minutes * 60 + seconds;
}
public double getVolume() {
return volume;
}
}