sort songs by track number in album view and refactor query utils

This commit is contained in:
dkanada 2020-04-27 00:06:08 +09:00
commit 3517e145a6
5 changed files with 38 additions and 59 deletions

View file

@ -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<Song>) media;

View file

@ -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<Album>) media;
setArtist(artist);
QueryUtil.getSongs(query, new MediaCallback() {
@Override
public void onLoadMedia(List<?> media) {
for (Album album : artist.albums) {
for (Song song : (List<Song>) media) {
if (song.albumId.equals(album.id)) album.songs.add(song);
}
}
setArtist(artist);
}
});
}
});
}

View file

@ -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<Album> 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<Album>) media);

View file

@ -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<Song>) media);

View file

@ -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<ItemsResult>() {
@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<ItemsResult>() {
@Override
public void onResponse(ItemsResult result) {
List<Album> 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<ItemsResult>() {
@Override
public void onResponse(ItemsResult result) {
List<Song> 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<ItemsResult>() {
@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<ItemsResult>() {
@Override