diff --git a/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewCustomGridSizeFragment.java b/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewCustomGridSizeFragment.java
index c22272c2..03276326 100644
--- a/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewCustomGridSizeFragment.java
+++ b/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewCustomGridSizeFragment.java
@@ -9,7 +9,7 @@ import android.view.View;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.util.Util;
-public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment extends AbsLibraryPagerRecyclerViewFragment {
+public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment extends AbsLibraryPagerRecyclerViewFragment {
private int gridSize;
private String sortMethod;
diff --git a/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewFragment.java b/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewFragment.java
index c6f57340..7c62628a 100644
--- a/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewFragment.java
+++ b/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewFragment.java
@@ -4,8 +4,14 @@ import android.os.Bundle;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
+
+import com.dkanada.gramophone.App;
+import com.dkanada.gramophone.util.PreferenceUtil;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.AppBarLayout.OnOffsetChangedListener;
+
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
@@ -21,7 +27,7 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
-public abstract class AbsLibraryPagerRecyclerViewFragment extends AbsLibraryPagerFragment implements OnOffsetChangedListener {
+public abstract class AbsLibraryPagerRecyclerViewFragment extends AbsLibraryPagerFragment implements OnOffsetChangedListener {
private Unbinder unbinder;
@@ -34,6 +40,10 @@ public abstract class AbsLibraryPagerRecyclerViewFragment total - page / 2 && total < size) {
+ query = createQuery();
+ loading = true;
+ loadItems();
+ }
}
@Override
@@ -134,4 +168,11 @@ public abstract class AbsLibraryPagerRecyclerViewFragment {
+public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
@@ -35,19 +37,44 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
protected AlbumAdapter createAdapter() {
int itemLayoutRes = getItemLayoutRes();
notifyLayoutResChanged(itemLayoutRes);
- List dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
- AlbumAdapter adapter = new AlbumAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment());
- QueryUtil.getAlbums(new ItemQuery(), new MediaCallback() {
+ List dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
+ return new AlbumAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment());
+ }
+
+ @NonNull
+ @Override
+ protected ItemQuery createQuery() {
+ ItemQuery query = new ItemQuery();
+
+ query.setIncludeItemTypes(new String[]{"MusicAlbum"});
+ query.setUserId(App.getApiClient().getCurrentUserId());
+ query.setRecursive(true);
+ query.setLimit(PreferenceUtil.getInstance(App.getInstance()).getMaximumListSize());
+ query.setStartIndex(getAdapter().getItemCount());
+ query.setParentId(QueryUtil.currentLibrary.getId());
+
+ return query;
+ }
+
+ protected void loadItems() {
+ App.getApiClient().GetItemsAsync(getQuery(), new Response() {
@Override
- public void onLoadMedia(List> media) {
- dataSet.clear();
- dataSet.addAll((Collection) media);
- adapter.notifyDataSetChanged();
+ public void onResponse(ItemsResult result) {
+ for (BaseItemDto itemDto : result.getItems()) {
+ getAdapter().getDataSet().add(new Album(itemDto));
+ }
+
+ size = result.getTotalRecordCount();
+ getAdapter().notifyDataSetChanged();
+ loading = false;
+ }
+
+ @Override
+ public void onError(Exception exception) {
+ exception.printStackTrace();
}
});
-
- return adapter;
}
@Override
diff --git a/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/ArtistsFragment.java b/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/ArtistsFragment.java
index 424df8c0..a4ba6505 100644
--- a/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/ArtistsFragment.java
+++ b/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/ArtistsFragment.java
@@ -6,21 +6,24 @@ import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.GridLayoutManager;
+import com.dkanada.gramophone.App;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.adapter.artist.ArtistAdapter;
import com.dkanada.gramophone.helper.sort.SortMethod;
-import com.dkanada.gramophone.interfaces.MediaCallback;
import com.dkanada.gramophone.model.Artist;
import com.dkanada.gramophone.util.PreferenceUtil;
import com.dkanada.gramophone.util.QueryUtil;
+import org.jellyfin.apiclient.interaction.Response;
+import org.jellyfin.apiclient.model.dto.BaseItemDto;
import org.jellyfin.apiclient.model.querying.ArtistsQuery;
+import org.jellyfin.apiclient.model.querying.ItemFields;
+import org.jellyfin.apiclient.model.querying.ItemsResult;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
-public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFragment {
+public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
@@ -37,18 +40,45 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
protected ArtistAdapter createAdapter() {
int itemLayoutRes = getItemLayoutRes();
notifyLayoutResChanged(itemLayoutRes);
- List dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
- ArtistAdapter adapter = new ArtistAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment());
- QueryUtil.getArtists(new ArtistsQuery(), new MediaCallback() {
+ List dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
+ return new ArtistAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment());
+ }
+
+ @NonNull
+ @Override
+ protected ArtistsQuery createQuery() {
+ ArtistsQuery query = new ArtistsQuery();
+
+ query.setFields(new ItemFields[]{ItemFields.Genres});
+ query.setParentId(QueryUtil.currentLibrary.getId());
+ query.setLimit(PreferenceUtil.getInstance(App.getInstance()).getMaximumListSize());
+ query.setStartIndex(getAdapter().getItemCount());
+ query.setUserId(App.getApiClient().getCurrentUserId());
+ query.setRecursive(true);
+
+ return query;
+ }
+
+ @Override
+ protected void loadItems() {
+ App.getApiClient().GetAlbumArtistsAsync(getQuery(), new Response() {
@Override
- public void onLoadMedia(List> media) {
- dataSet.addAll((Collection) media);
- adapter.notifyDataSetChanged();
+ public void onResponse(ItemsResult result) {
+ for (BaseItemDto itemDto : result.getItems()) {
+ getAdapter().getDataSet().add(new Artist(itemDto));
+ }
+
+ size = result.getTotalRecordCount();
+ getAdapter().notifyDataSetChanged();
+ loading = false;
+ }
+
+ @Override
+ public void onError(Exception exception) {
+ exception.printStackTrace();
}
});
-
- return adapter;
}
@Override
diff --git a/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/GenresFragment.java b/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/GenresFragment.java
index 077ef874..e97cc416 100644
--- a/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/GenresFragment.java
+++ b/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/GenresFragment.java
@@ -4,16 +4,22 @@ import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
+import com.dkanada.gramophone.App;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.adapter.GenreAdapter;
-import com.dkanada.gramophone.interfaces.MediaCallback;
import com.dkanada.gramophone.model.Genre;
+import com.dkanada.gramophone.util.PreferenceUtil;
import com.dkanada.gramophone.util.QueryUtil;
+import org.jellyfin.apiclient.interaction.Response;
+import org.jellyfin.apiclient.model.dto.BaseItemDto;
+import org.jellyfin.apiclient.model.querying.ItemsByNameQuery;
+import org.jellyfin.apiclient.model.querying.ItemsResult;
+
import java.util.ArrayList;
import java.util.List;
-public class GenresFragment extends AbsLibraryPagerRecyclerViewFragment {
+public class GenresFragment extends AbsLibraryPagerRecyclerViewFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
@@ -29,17 +35,42 @@ public class GenresFragment extends AbsLibraryPagerRecyclerViewFragment dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
+ return new GenreAdapter(getLibraryFragment().getMainActivity(), dataSet, R.layout.item_list_single_row);
+ }
- GenreAdapter adapter = new GenreAdapter(getLibraryFragment().getMainActivity(), dataSet, R.layout.item_list_single_row);
- QueryUtil.getGenres(new MediaCallback() {
+ @NonNull
+ @Override
+ protected ItemsByNameQuery createQuery() {
+ ItemsByNameQuery query = new ItemsByNameQuery();
+
+ query.setParentId(QueryUtil.currentLibrary.getId());
+ query.setLimit(PreferenceUtil.getInstance(App.getInstance()).getMaximumListSize());
+ query.setUserId(App.getApiClient().getCurrentUserId());
+ query.setStartIndex(getAdapter().getItemCount());
+ query.setRecursive(true);
+
+ return query;
+ }
+
+ @Override
+ protected void loadItems() {
+ App.getApiClient().GetGenresAsync(getQuery(), new Response() {
@Override
- public void onLoadMedia(List> media) {
- dataSet.addAll((List) media);
- adapter.notifyDataSetChanged();
+ public void onResponse(ItemsResult result) {
+ for (BaseItemDto itemDto : result.getItems()) {
+ getAdapter().getDataSet().add(new Genre(itemDto));
+ }
+
+ size = result.getTotalRecordCount();
+ getAdapter().notifyDataSetChanged();
+ loading = false;
+ }
+
+ @Override
+ public void onError(Exception exception) {
+ exception.printStackTrace();
}
});
-
- return adapter;
}
@Override
diff --git a/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/PlaylistsFragment.java b/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/PlaylistsFragment.java
index 064e3a83..2e890b24 100644
--- a/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/PlaylistsFragment.java
+++ b/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/PlaylistsFragment.java
@@ -5,16 +5,22 @@ import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
+import com.dkanada.gramophone.App;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.adapter.PlaylistAdapter;
-import com.dkanada.gramophone.interfaces.MediaCallback;
import com.dkanada.gramophone.model.Playlist;
+import com.dkanada.gramophone.util.PreferenceUtil;
import com.dkanada.gramophone.util.QueryUtil;
+import org.jellyfin.apiclient.interaction.Response;
+import org.jellyfin.apiclient.model.dto.BaseItemDto;
+import org.jellyfin.apiclient.model.querying.ItemQuery;
+import org.jellyfin.apiclient.model.querying.ItemsResult;
+
import java.util.ArrayList;
import java.util.List;
-public class PlaylistsFragment extends AbsLibraryPagerRecyclerViewFragment {
+public class PlaylistsFragment extends AbsLibraryPagerRecyclerViewFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
@@ -30,17 +36,43 @@ public class PlaylistsFragment extends AbsLibraryPagerRecyclerViewFragment dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
+ return new PlaylistAdapter(getLibraryFragment().getMainActivity(), dataSet, R.layout.item_list_single_row, getLibraryFragment());
+ }
- PlaylistAdapter adapter = new PlaylistAdapter(getLibraryFragment().getMainActivity(), dataSet, R.layout.item_list_single_row, getLibraryFragment());
- QueryUtil.getPlaylists(new MediaCallback() {
+ @NonNull
+ @Override
+ protected ItemQuery createQuery() {
+ ItemQuery query = new ItemQuery();
+
+ query.setIncludeItemTypes(new String[]{"Playlist"});
+ query.setParentId(QueryUtil.currentLibrary.getId());
+ query.setLimit(PreferenceUtil.getInstance(App.getInstance()).getMaximumListSize());
+ query.setStartIndex(getAdapter().getItemCount());
+ query.setUserId(App.getApiClient().getCurrentUserId());
+ query.setRecursive(true);
+
+ return query;
+ }
+
+ @Override
+ protected void loadItems() {
+ App.getApiClient().GetItemsAsync(getQuery(), new Response() {
@Override
- public void onLoadMedia(List> media) {
- dataSet.addAll((List) media);
- adapter.notifyDataSetChanged();
+ public void onResponse(ItemsResult result) {
+ for (BaseItemDto itemDto : result.getItems()) {
+ getAdapter().getDataSet().add(new Playlist(itemDto));
+ }
+
+ size = result.getTotalRecordCount();
+ getAdapter().notifyDataSetChanged();
+ loading = false;
+ }
+
+ @Override
+ public void onError(Exception exception) {
+ exception.printStackTrace();
}
});
-
- return adapter;
}
@Override
diff --git a/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/SongsFragment.java b/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/SongsFragment.java
index b7dbf467..33ed4d35 100644
--- a/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/SongsFragment.java
+++ b/app/src/main/java/com/dkanada/gramophone/ui/fragments/mainactivity/library/pager/SongsFragment.java
@@ -4,21 +4,23 @@ import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.GridLayoutManager;
+import com.dkanada.gramophone.App;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.adapter.song.ShuffleButtonSongAdapter;
import com.dkanada.gramophone.adapter.song.SongAdapter;
-import com.dkanada.gramophone.interfaces.MediaCallback;
import com.dkanada.gramophone.model.Song;
import com.dkanada.gramophone.util.PreferenceUtil;
import com.dkanada.gramophone.util.QueryUtil;
+import org.jellyfin.apiclient.interaction.Response;
+import org.jellyfin.apiclient.model.dto.BaseItemDto;
import org.jellyfin.apiclient.model.querying.ItemQuery;
+import org.jellyfin.apiclient.model.querying.ItemsResult;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
-public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFragment {
+public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
@@ -36,9 +38,10 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
int itemLayoutRes = getItemLayoutRes();
notifyLayoutResChanged(itemLayoutRes);
boolean usePalette = loadUsePalette();
- List dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
+ List dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
SongAdapter adapter;
+
if (getGridSize() <= getMaxGridSizeForList()) {
adapter = new ShuffleButtonSongAdapter(
getLibraryFragment().getMainActivity(),
@@ -55,16 +58,43 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
getLibraryFragment());
}
- QueryUtil.getSongs(new ItemQuery(), new MediaCallback() {
+ return adapter;
+ }
+
+ @NonNull
+ @Override
+ protected ItemQuery createQuery() {
+ ItemQuery query = new ItemQuery();
+
+ query.setIncludeItemTypes(new String[]{"Audio"});
+ query.setUserId(App.getApiClient().getCurrentUserId());
+ query.setRecursive(true);
+ query.setLimit(PreferenceUtil.getInstance(App.getInstance()).getMaximumListSize());
+ query.setStartIndex(getAdapter().getItemCount());
+ query.setParentId(QueryUtil.currentLibrary.getId());
+
+ return query;
+ }
+
+ @Override
+ protected void loadItems() {
+ App.getApiClient().GetItemsAsync(getQuery(), new Response() {
@Override
- public void onLoadMedia(List> media) {
- dataSet.clear();
- dataSet.addAll((Collection) media);
- adapter.notifyDataSetChanged();
+ public void onResponse(ItemsResult result) {
+ for (BaseItemDto itemDto : result.getItems()) {
+ getAdapter().getDataSet().add(new Song(itemDto));
+ }
+
+ size = result.getTotalRecordCount();
+ getAdapter().notifyDataSetChanged();
+ loading = false;
+ }
+
+ @Override
+ public void onError(Exception exception) {
+ exception.printStackTrace();
}
});
-
- return adapter;
}
@Override