use generics for media callback and remove extra artist search
This commit is contained in:
parent
fd8e3dc50f
commit
e2dddfa57c
9 changed files with 54 additions and 90 deletions
|
|
@ -23,14 +23,11 @@ import com.dkanada.gramophone.util.QueryUtil;
|
||||||
import com.dkanada.gramophone.util.Util;
|
import com.dkanada.gramophone.util.Util;
|
||||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
|
|
||||||
import org.jellyfin.apiclient.model.querying.ArtistsQuery;
|
|
||||||
import org.jellyfin.apiclient.model.querying.ItemQuery;
|
import org.jellyfin.apiclient.model.querying.ItemQuery;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class SearchActivity extends AbsMusicServiceActivity implements SearchView.OnQueryTextListener {
|
public class SearchActivity extends AbsMusicServiceActivity implements SearchView.OnQueryTextListener {
|
||||||
public String QUERY = "query";
|
public String QUERY = "query";
|
||||||
|
|
@ -139,51 +136,36 @@ public class SearchActivity extends AbsMusicServiceActivity implements SearchVie
|
||||||
ItemQuery itemQuery = new ItemQuery();
|
ItemQuery itemQuery = new ItemQuery();
|
||||||
itemQuery.setSearchTerm(query);
|
itemQuery.setSearchTerm(query);
|
||||||
|
|
||||||
ArtistsQuery artistsQuery = new ArtistsQuery();
|
MediaCallback<Object> callback = new MediaCallback<Object>() {
|
||||||
artistsQuery.setSearchTerm(query);
|
|
||||||
|
|
||||||
MediaCallback callback = new MediaCallback() {
|
|
||||||
private final List<Object> data = new ArrayList<>();
|
|
||||||
|
|
||||||
@SuppressWarnings("ConstantConditions")
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
public void onLoadMedia(List<Object> media) {
|
||||||
data.addAll(media);
|
List<Artist> artists = new ArrayList<>();
|
||||||
|
List<Album> albums = new ArrayList<>();
|
||||||
|
List<Song> songs = new ArrayList<>();
|
||||||
|
|
||||||
Map<Class<?>, List<Object>> byClass = new HashMap<>();
|
for (Object result : media) {
|
||||||
byClass.put(Artist.class, new ArrayList<>());
|
if (result instanceof Artist) {
|
||||||
byClass.put(Album.class, new ArrayList<>());
|
artists.add((Artist) result);
|
||||||
byClass.put(Song.class, new ArrayList<>());
|
} else if (result instanceof Album) {
|
||||||
byClass.put(Object.class, new ArrayList<>());
|
albums.add((Album) result);
|
||||||
|
} else if (result instanceof Song) {
|
||||||
for (Object datum : data) {
|
songs.add((Song) result);
|
||||||
if (byClass.containsKey(datum.getClass())) {
|
|
||||||
byClass.get(datum.getClass()).add(datum);
|
|
||||||
} else {
|
|
||||||
byClass.get(Object.class).add(datum);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Collections.sort(byClass.get(Artist.class),
|
Collections.sort(artists, (one, two) -> one.name.compareTo(two.name));
|
||||||
(one, two) -> ((Artist) one).name.compareTo(((Artist) 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),
|
List<Object> sortedData = new ArrayList<>();
|
||||||
(one, two) -> ((Album) one).title.compareTo(((Album) two).title));
|
sortedData.addAll(artists);
|
||||||
|
sortedData.addAll(albums);
|
||||||
Collections.sort(byClass.get(Song.class),
|
sortedData.addAll(songs);
|
||||||
(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));
|
|
||||||
|
|
||||||
adapter.swapDataSet(sortedData);
|
adapter.swapDataSet(sortedData);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
QueryUtil.getArtists(artistsQuery, callback);
|
|
||||||
QueryUtil.getItems(itemQuery, callback);
|
QueryUtil.getItems(itemQuery, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -68,12 +68,9 @@ public class AlbumDetailActivity extends AbsMusicPanelActivity implements Palett
|
||||||
query.setParentId(album.id);
|
query.setParentId(album.id);
|
||||||
query.setSortBy(new String[]{"ParentIndexNumber", "IndexNumber"});
|
query.setSortBy(new String[]{"ParentIndexNumber", "IndexNumber"});
|
||||||
|
|
||||||
QueryUtil.getSongs(query, new MediaCallback() {
|
QueryUtil.getSongs(query, media -> {
|
||||||
@Override
|
album.songs = media;
|
||||||
public void onLoadMedia(List<?> media) {
|
setAlbum(album);
|
||||||
album.songs = (List<Song>) media;
|
|
||||||
setAlbum(album);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -72,22 +72,16 @@ public class ArtistDetailActivity extends AbsMusicPanelActivity implements Palet
|
||||||
|
|
||||||
ItemQuery albums = new ItemQuery();
|
ItemQuery albums = new ItemQuery();
|
||||||
albums.setArtistIds(new String[]{artist.id});
|
albums.setArtistIds(new String[]{artist.id});
|
||||||
QueryUtil.getAlbums(albums, new MediaCallback() {
|
QueryUtil.getAlbums(albums, media -> {
|
||||||
@Override
|
artist.albums = media;
|
||||||
public void onLoadMedia(List<?> media) {
|
setArtist(artist);
|
||||||
artist.albums = (List<Album>) media;
|
|
||||||
setArtist(artist);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
ItemQuery songs = new ItemQuery();
|
ItemQuery songs = new ItemQuery();
|
||||||
songs.setArtistIds(new String[]{artist.id});
|
songs.setArtistIds(new String[]{artist.id});
|
||||||
QueryUtil.getSongs(songs, new MediaCallback() {
|
QueryUtil.getSongs(songs, media -> {
|
||||||
@Override
|
artist.songs = media;
|
||||||
public void onLoadMedia(List<?> media) {
|
setArtist(artist);
|
||||||
artist.songs = (List<Song>) media;
|
|
||||||
setArtist(artist);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,12 +60,9 @@ public class GenreDetailActivity extends AbsMusicPanelActivity implements CabHol
|
||||||
|
|
||||||
ItemQuery query = new ItemQuery();
|
ItemQuery query = new ItemQuery();
|
||||||
query.setGenreIds(new String[]{genre.id});
|
query.setGenreIds(new String[]{genre.id});
|
||||||
QueryUtil.getSongs(query, new MediaCallback() {
|
QueryUtil.getSongs(query, media -> {
|
||||||
@Override
|
adapter.getDataSet().addAll(media);
|
||||||
public void onLoadMedia(List<?> media) {
|
adapter.notifyDataSetChanged();
|
||||||
adapter.getDataSet().addAll((List<Song>) media);
|
|
||||||
adapter.notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,12 +67,9 @@ public class PlaylistDetailActivity extends AbsMusicPanelActivity implements Cab
|
||||||
|
|
||||||
PlaylistItemQuery query = new PlaylistItemQuery();
|
PlaylistItemQuery query = new PlaylistItemQuery();
|
||||||
query.setId(playlist.id);
|
query.setId(playlist.id);
|
||||||
PlaylistUtil.getPlaylist(query, new MediaCallback() {
|
PlaylistUtil.getPlaylist(query, media -> {
|
||||||
@Override
|
adapter.getDataSet().addAll(media);
|
||||||
public void onLoadMedia(List<?> media) {
|
adapter.notifyDataSetChanged();
|
||||||
adapter.getDataSet().addAll((List<PlaylistSong>) media);
|
|
||||||
adapter.notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -57,19 +57,16 @@ public class AddToPlaylistDialog extends DialogFragment {
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
QueryUtil.getPlaylists(new MediaCallback() {
|
QueryUtil.getPlaylists(media -> {
|
||||||
@Override
|
List<String> names = new ArrayList<>();
|
||||||
public void onLoadMedia(List<?> media) {
|
|
||||||
playlists.addAll((List<Playlist>) media);
|
|
||||||
|
|
||||||
CharSequence[] names = new CharSequence[playlists.size() + 1];
|
names.add(requireActivity().getResources().getString(R.string.action_new_playlist));
|
||||||
names[0] = requireActivity().getResources().getString(R.string.action_new_playlist);
|
for (Playlist playlist : media) {
|
||||||
for (int i = 0; i < playlists.size(); i++) {
|
names.add(playlist.name);
|
||||||
names[i + 1] = playlists.get(i).name;
|
|
||||||
}
|
|
||||||
|
|
||||||
dialog.setItems(names);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
playlists.addAll(media);
|
||||||
|
dialog.setItems(names.toArray(new String[0]));
|
||||||
});
|
});
|
||||||
|
|
||||||
return dialog;
|
return dialog;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,6 @@ package com.dkanada.gramophone.interfaces;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface MediaCallback {
|
public interface MediaCallback<T> {
|
||||||
void onLoadMedia(List<?> media);
|
void onLoadMedia(List<T> media);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PlaylistUtil {
|
public class PlaylistUtil {
|
||||||
public static void getPlaylist(PlaylistItemQuery query, MediaCallback callback) {
|
public static void getPlaylist(PlaylistItemQuery query, MediaCallback<PlaylistSong> callback) {
|
||||||
query.setUserId(App.getApiClient().getCurrentUserId());
|
query.setUserId(App.getApiClient().getCurrentUserId());
|
||||||
query.setFields(new ItemFields[]{ItemFields.MediaSources});
|
query.setFields(new ItemFields[]{ItemFields.MediaSources});
|
||||||
App.getApiClient().GetPlaylistItems(query, new Response<ItemsResult>() {
|
App.getApiClient().GetPlaylistItems(query, new Response<ItemsResult>() {
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ public class QueryUtil {
|
||||||
|
|
||||||
// TODO return BaseItemDto everywhere
|
// TODO return BaseItemDto everywhere
|
||||||
// will simplify the code for the getPlaylists method
|
// will simplify the code for the getPlaylists method
|
||||||
public static void getLibraries(MediaCallback callback) {
|
public static void getLibraries(MediaCallback<BaseItemDto> callback) {
|
||||||
String id = App.getApiClient().getCurrentUserId();
|
String id = App.getApiClient().getCurrentUserId();
|
||||||
App.getApiClient().GetUserViews(id, new Response<ItemsResult>() {
|
App.getApiClient().GetUserViews(id, new Response<ItemsResult>() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -46,7 +46,7 @@ public class QueryUtil {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void getPlaylists(MediaCallback callback) {
|
public static void getPlaylists(MediaCallback<Playlist> callback) {
|
||||||
ItemQuery query = new ItemQuery();
|
ItemQuery query = new ItemQuery();
|
||||||
query.setIncludeItemTypes(new String[]{"Playlist"});
|
query.setIncludeItemTypes(new String[]{"Playlist"});
|
||||||
applyProperties(query);
|
applyProperties(query);
|
||||||
|
|
@ -68,7 +68,7 @@ public class QueryUtil {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void getGenres(MediaCallback callback) {
|
public static void getGenres(MediaCallback<Genre> callback) {
|
||||||
ItemsByNameQuery query = new ItemsByNameQuery();
|
ItemsByNameQuery query = new ItemsByNameQuery();
|
||||||
applyProperties(query);
|
applyProperties(query);
|
||||||
App.getApiClient().GetGenresAsync(query, new Response<ItemsResult>() {
|
App.getApiClient().GetGenresAsync(query, new Response<ItemsResult>() {
|
||||||
|
|
@ -89,8 +89,8 @@ public class QueryUtil {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void getItems(ItemQuery query, MediaCallback callback) {
|
public static void getItems(ItemQuery query, MediaCallback<Object> callback) {
|
||||||
query.setIncludeItemTypes(new String[]{"MusicAlbum", "Audio"});
|
query.setIncludeItemTypes(new String[]{"MusicArtist", "MusicAlbum", "Audio"});
|
||||||
query.setFields(new ItemFields[]{ItemFields.MediaSources});
|
query.setFields(new ItemFields[]{ItemFields.MediaSources});
|
||||||
query.setUserId(App.getApiClient().getCurrentUserId());
|
query.setUserId(App.getApiClient().getCurrentUserId());
|
||||||
query.setLimit(40);
|
query.setLimit(40);
|
||||||
|
|
@ -119,7 +119,7 @@ public class QueryUtil {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void getAlbums(ItemQuery query, MediaCallback callback) {
|
public static void getAlbums(ItemQuery query, MediaCallback<Album> callback) {
|
||||||
query.setIncludeItemTypes(new String[]{"MusicAlbum"});
|
query.setIncludeItemTypes(new String[]{"MusicAlbum"});
|
||||||
applyProperties(query);
|
applyProperties(query);
|
||||||
applySortMethod(query, PreferenceUtil.getInstance(App.getInstance()).getAlbumSortMethod());
|
applySortMethod(query, PreferenceUtil.getInstance(App.getInstance()).getAlbumSortMethod());
|
||||||
|
|
@ -141,7 +141,7 @@ public class QueryUtil {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void getArtists(ArtistsQuery query, MediaCallback callback) {
|
public static void getArtists(ArtistsQuery query, MediaCallback<Artist> callback) {
|
||||||
query.setFields(new ItemFields[]{ItemFields.Genres});
|
query.setFields(new ItemFields[]{ItemFields.Genres});
|
||||||
applyProperties(query);
|
applyProperties(query);
|
||||||
App.getApiClient().GetAlbumArtistsAsync(query, new Response<ItemsResult>() {
|
App.getApiClient().GetAlbumArtistsAsync(query, new Response<ItemsResult>() {
|
||||||
|
|
@ -162,7 +162,7 @@ public class QueryUtil {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void getSongs(ItemQuery query, MediaCallback callback) {
|
public static void getSongs(ItemQuery query, MediaCallback<Song> callback) {
|
||||||
query.setIncludeItemTypes(new String[]{"Audio"});
|
query.setIncludeItemTypes(new String[]{"Audio"});
|
||||||
query.setFields(new ItemFields[]{ItemFields.MediaSources});
|
query.setFields(new ItemFields[]{ItemFields.MediaSources});
|
||||||
applyProperties(query);
|
applyProperties(query);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue