package com.simplecity.amp_library.model; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.annimon.stream.Stream; import com.simplecity.amp_library.ShuttleApplication; import com.simplecity.amp_library.http.HttpClient; import com.simplecity.amp_library.lastfm.ItunesResult; import com.simplecity.amp_library.lastfm.LastFmResult; import com.simplecity.amp_library.utils.ComparisonUtils; import com.simplecity.amp_library.utils.DataManager; import com.simplecity.amp_library.utils.StringUtils; import java.io.File; import java.io.InputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import retrofit2.Call; import rx.Observable; public class AlbumArtist implements Serializable, Comparable<AlbumArtist>, ArtworkProvider, Sortable { public String name; public List<Album> albums = new ArrayList<>(); private String sortKey; public AlbumArtist(String name, List<Album> albums) { this.name = name; this.albums = albums; } public Observable<List<Song>> getSongsObservable() { return DataManager.getInstance().getSongsObservable(song -> Stream.of(albums) .map(album -> album.id) .anyMatch(albumId -> albumId == song.albumId)); } @Override public String getSortKey() { if (sortKey == null) { setSortKey(); } return sortKey; } @Override public void setSortKey() { sortKey = StringUtils.keyFor(name); } @Override public String getArtworkKey() { return name; } public static class Builder { private String name; private List<Album> albums = new ArrayList<>(); public Builder name(String name) { this.name = name; return this; } public Builder albums(List<Album> albums) { this.albums = albums; return this; } public Builder album(Album album) { this.albums.add(album); return this; } public AlbumArtist build() { return new AlbumArtist(this.name, this.albums); } } public int getNumAlbums() { return albums.size(); } public int getNumSongs() { int numSongs = 0; for (Album album : albums) { numSongs += album.numSongs; } return numSongs; } public String getNumAlbumsSongsLabel() { return StringUtils.makeAlbumAndSongsLabel(ShuttleApplication.getInstance(), getNumAlbums(), getNumSongs()); } @Override public String toString() { return "AlbumArtist{" + "name='" + name + '\'' + ", albums=" + albums + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; AlbumArtist that = (AlbumArtist) o; if (name != null ? !name.equals(that.name) : that.name != null) return false; return albums != null ? albums.equals(that.albums) : that.albums == null; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + (albums != null ? albums.hashCode() : 0); return result; } @Nullable @Override public Call<? extends LastFmResult> getLastFmArtwork() { return HttpClient.getInstance().lastFmService.getLastFmArtistResult(name); } @Nullable @Override public Call<ItunesResult> getItunesArtwork() { return null; } @Nullable @Override public InputStream getMediaStoreArtwork() { return null; } @Nullable @Override public InputStream getFolderArtwork() { return null; } @Nullable @Override public InputStream getTagArtwork() { return null; } @Nullable @Override public List<File> getFolderArtworkFiles() { return null; } @Override public int compareTo(@NonNull AlbumArtist albumArtist) { return ComparisonUtils.compare(getSortKey(), albumArtist.getSortKey()); } }