From 3517e145a68391e924429448eaea88e7714167b7 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 27 Apr 2020 00:06:08 +0900 Subject: [PATCH] sort songs by track number in album view and refactor query utils --- .../ui/activities/AlbumDetailActivity.java | 10 +++- .../ui/activities/ArtistDetailActivity.java | 21 ++++++- .../library/pager/AlbumsFragment.java | 4 +- .../library/pager/SongsFragment.java | 4 +- .../kabouzeid/gramophone/util/QueryUtil.java | 58 ++----------------- 5 files changed, 38 insertions(+), 59 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index ab485851..9853ba1a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -38,6 +38,8 @@ import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.PhonographColorUtil; import com.kabouzeid.gramophone.util.QueryUtil; +import org.jellyfin.apiclient.model.querying.ItemQuery; + import java.util.List; import butterknife.BindView; @@ -96,9 +98,13 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements @Override public void onLoadMedia(List media) { Album album = (Album) media.get(0); - setAlbum(album); - QueryUtil.getSongs(album.id, new MediaCallback() { + + ItemQuery query = new ItemQuery(); + query.setParentId(album.id); + query.setSortBy(new String[]{"IndexNumber"}); + + QueryUtil.getSongs(query, new MediaCallback() { @Override public void onLoadMedia(List media) { album.songs = (List) media; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index e3dff596..f108360a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -45,6 +45,8 @@ import com.kabouzeid.gramophone.util.PhonographColorUtil; import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.QueryUtil; +import org.jellyfin.apiclient.model.querying.ItemQuery; + public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implements PaletteColorHolder, CabHolder { public static final String EXTRA_ARTIST_ID = "extra_artist_id"; @@ -116,11 +118,28 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement @Override public void onLoadMedia(List media) { Artist artist = (Artist) media.get(0); - QueryUtil.getAlbums(artist.id, new MediaCallback() { + + ItemQuery query = new ItemQuery(); + query.setArtistIds(new String[]{artist.id}); + + QueryUtil.getAlbums(query, new MediaCallback() { @Override public void onLoadMedia(List media) { artist.albums = (List) media; setArtist(artist); + + QueryUtil.getSongs(query, new MediaCallback() { + @Override + public void onLoadMedia(List media) { + for (Album album : artist.albums) { + for (Song song : (List) media) { + if (song.albumId.equals(album.id)) album.songs.add(song); + } + } + + setArtist(artist); + } + }); } }); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/AlbumsFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/AlbumsFragment.java index 87941750..8b5e5b2c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/AlbumsFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/AlbumsFragment.java @@ -11,6 +11,8 @@ import com.kabouzeid.gramophone.model.Album; import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.QueryUtil; +import org.jellyfin.apiclient.model.querying.ItemQuery; + import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -36,7 +38,7 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra List dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet(); AlbumAdapter adapter = new AlbumAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment()); - QueryUtil.getAlbums(new MediaCallback() { + QueryUtil.getAlbums(new ItemQuery(), new MediaCallback() { @Override public void onLoadMedia(List media) { dataSet.addAll((Collection) media); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/SongsFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/SongsFragment.java index fca0aac3..160be5aa 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/SongsFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/SongsFragment.java @@ -12,6 +12,8 @@ import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.QueryUtil; +import org.jellyfin.apiclient.model.querying.ItemQuery; + import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -53,7 +55,7 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag getLibraryFragment()); } - QueryUtil.getSongs(new MediaCallback() { + QueryUtil.getSongs(new ItemQuery(), new MediaCallback() { @Override public void onLoadMedia(List media) { dataSet.addAll((Collection) media); diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/QueryUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/QueryUtil.java index f6d9d88b..007b66ce 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/QueryUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/QueryUtil.java @@ -16,11 +16,10 @@ import java.util.ArrayList; import java.util.List; public class QueryUtil { - public static void getAlbums(MediaCallback callback) { - ItemQuery query = new ItemQuery(); + public static void getAlbums(ItemQuery query, MediaCallback callback) { query.setIncludeItemTypes(new String[]{"MusicAlbum"}); query.setUserId(App.getApiClient().getCurrentUserId()); - query.setLimit(10); + query.setLimit(100); query.setRecursive(true); App.getApiClient().GetItemsAsync(query, new Response() { @Override @@ -56,59 +55,10 @@ public class QueryUtil { }); } - public static void getAlbums(String id, MediaCallback callback) { - ItemQuery query = new ItemQuery(); - query.setIncludeItemTypes(new String[]{"MusicAlbum"}); - query.setUserId(App.getApiClient().getCurrentUserId()); - query.setArtistIds(new String[]{id}); - query.setRecursive(true); - App.getApiClient().GetItemsAsync(query, new Response() { - @Override - public void onResponse(ItemsResult result) { - List albums = new ArrayList<>(); - for (BaseItemDto itemDto : result.getItems()) { - albums.add(new Album(itemDto)); - } - - callback.onLoadMedia(albums); - } - - @Override - public void onError(Exception exception) { - exception.printStackTrace(); - } - }); - } - - public static void getSongs(MediaCallback callback) { - ItemQuery query = new ItemQuery(); + public static void getSongs(ItemQuery query, MediaCallback callback) { query.setIncludeItemTypes(new String[]{"Audio"}); query.setUserId(App.getApiClient().getCurrentUserId()); - query.setRecursive(true); query.setLimit(100); - App.getApiClient().GetItemsAsync(query, new Response() { - @Override - public void onResponse(ItemsResult result) { - List songs = new ArrayList<>(); - for (BaseItemDto itemDto : result.getItems()) { - songs.add(new Song(itemDto)); - } - - callback.onLoadMedia(songs); - } - - @Override - public void onError(Exception exception) { - exception.printStackTrace(); - } - }); - } - - public static void getSongs(String album, MediaCallback callback) { - ItemQuery query = new ItemQuery(); - query.setIncludeItemTypes(new String[]{"Audio"}); - query.setUserId(App.getApiClient().getCurrentUserId()); - query.setParentId(album); query.setRecursive(true); App.getApiClient().GetItemsAsync(query, new Response() { @Override @@ -131,7 +81,7 @@ public class QueryUtil { public static void getArtists(MediaCallback callback) { ArtistsQuery query = new ArtistsQuery(); query.setUserId(App.getApiClient().getCurrentUserId()); - query.setLimit(10); + query.setLimit(100); query.setRecursive(true); App.getApiClient().GetAlbumArtistsAsync(query, new Response() { @Override