use generics for media callback and remove extra artist search

This commit is contained in:
dkanada 2021-04-24 13:08:17 +09:00
commit e2dddfa57c
9 changed files with 54 additions and 90 deletions

View file

@ -23,14 +23,11 @@ import com.dkanada.gramophone.util.QueryUtil;
import com.dkanada.gramophone.util.Util;
import com.kabouzeid.appthemehelper.ThemeStore;
import org.jellyfin.apiclient.model.querying.ArtistsQuery;
import org.jellyfin.apiclient.model.querying.ItemQuery;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SearchActivity extends AbsMusicServiceActivity implements SearchView.OnQueryTextListener {
public String QUERY = "query";
@ -139,51 +136,36 @@ public class SearchActivity extends AbsMusicServiceActivity implements SearchVie
ItemQuery itemQuery = new ItemQuery();
itemQuery.setSearchTerm(query);
ArtistsQuery artistsQuery = new ArtistsQuery();
artistsQuery.setSearchTerm(query);
MediaCallback callback = new MediaCallback() {
private final List<Object> data = new ArrayList<>();
@SuppressWarnings("ConstantConditions")
MediaCallback<Object> callback = new MediaCallback<Object>() {
@Override
public void onLoadMedia(List<?> media) {
data.addAll(media);
public void onLoadMedia(List<Object> media) {
List<Artist> artists = new ArrayList<>();
List<Album> albums = new ArrayList<>();
List<Song> songs = new ArrayList<>();
Map<Class<?>, List<Object>> byClass = new HashMap<>();
byClass.put(Artist.class, new ArrayList<>());
byClass.put(Album.class, new ArrayList<>());
byClass.put(Song.class, new ArrayList<>());
byClass.put(Object.class, new ArrayList<>());
for (Object datum : data) {
if (byClass.containsKey(datum.getClass())) {
byClass.get(datum.getClass()).add(datum);
} else {
byClass.get(Object.class).add(datum);
for (Object result : media) {
if (result instanceof Artist) {
artists.add((Artist) result);
} else if (result instanceof Album) {
albums.add((Album) result);
} else if (result instanceof Song) {
songs.add((Song) result);
}
}
Collections.sort(byClass.get(Artist.class),
(one, two) -> ((Artist) one).name.compareTo(((Artist) two).name));
Collections.sort(artists, (one, two) -> one.name.compareTo(two.name));
Collections.sort(albums, (one, two) -> one.title.compareTo(two.title));
Collections.sort(songs, (one, two) -> one.title.compareTo(two.title));
Collections.sort(byClass.get(Album.class),
(one, two) -> ((Album) one).title.compareTo(((Album) two).title));
Collections.sort(byClass.get(Song.class),
(one, two) -> ((Song) one).title.compareTo(((Song) two).title));
List<Object> sortedData = byClass.get(Artist.class);
sortedData.addAll(byClass.get(Album.class));
sortedData.addAll(byClass.get(Song.class));
sortedData.addAll(byClass.get(Object.class));
List<Object> sortedData = new ArrayList<>();
sortedData.addAll(artists);
sortedData.addAll(albums);
sortedData.addAll(songs);
adapter.swapDataSet(sortedData);
}
};
QueryUtil.getArtists(artistsQuery, callback);
QueryUtil.getItems(itemQuery, callback);
}

View file

@ -68,12 +68,9 @@ public class AlbumDetailActivity extends AbsMusicPanelActivity implements Palett
query.setParentId(album.id);
query.setSortBy(new String[]{"ParentIndexNumber", "IndexNumber"});
QueryUtil.getSongs(query, new MediaCallback() {
@Override
public void onLoadMedia(List<?> media) {
album.songs = (List<Song>) media;
setAlbum(album);
}
QueryUtil.getSongs(query, media -> {
album.songs = media;
setAlbum(album);
});
}

View file

@ -72,22 +72,16 @@ public class ArtistDetailActivity extends AbsMusicPanelActivity implements Palet
ItemQuery albums = new ItemQuery();
albums.setArtistIds(new String[]{artist.id});
QueryUtil.getAlbums(albums, new MediaCallback() {
@Override
public void onLoadMedia(List<?> media) {
artist.albums = (List<Album>) media;
setArtist(artist);
}
QueryUtil.getAlbums(albums, media -> {
artist.albums = media;
setArtist(artist);
});
ItemQuery songs = new ItemQuery();
songs.setArtistIds(new String[]{artist.id});
QueryUtil.getSongs(songs, new MediaCallback() {
@Override
public void onLoadMedia(List<?> media) {
artist.songs = (List<Song>) media;
setArtist(artist);
}
QueryUtil.getSongs(songs, media -> {
artist.songs = media;
setArtist(artist);
});
}

View file

@ -60,12 +60,9 @@ public class GenreDetailActivity extends AbsMusicPanelActivity implements CabHol
ItemQuery query = new ItemQuery();
query.setGenreIds(new String[]{genre.id});
QueryUtil.getSongs(query, new MediaCallback() {
@Override
public void onLoadMedia(List<?> media) {
adapter.getDataSet().addAll((List<Song>) media);
adapter.notifyDataSetChanged();
}
QueryUtil.getSongs(query, media -> {
adapter.getDataSet().addAll(media);
adapter.notifyDataSetChanged();
});
}

View file

@ -67,12 +67,9 @@ public class PlaylistDetailActivity extends AbsMusicPanelActivity implements Cab
PlaylistItemQuery query = new PlaylistItemQuery();
query.setId(playlist.id);
PlaylistUtil.getPlaylist(query, new MediaCallback() {
@Override
public void onLoadMedia(List<?> media) {
adapter.getDataSet().addAll((List<PlaylistSong>) media);
adapter.notifyDataSetChanged();
}
PlaylistUtil.getPlaylist(query, media -> {
adapter.getDataSet().addAll(media);
adapter.notifyDataSetChanged();
});
}