diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java index 12ff54ac..a68d5405 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java @@ -8,7 +8,6 @@ import android.text.Html; import com.afollestad.materialdialogs.MaterialDialog; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.PlaylistSong; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.util.PlaylistUtil; @@ -39,7 +38,7 @@ public class RemoveFromPlaylistDialog extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - final List songs = getArguments().getParcelableArrayList("songs"); + final List songs = getArguments().getParcelableArrayList("songs"); int title; CharSequence content; @@ -59,7 +58,7 @@ public class RemoveFromPlaylistDialog extends DialogFragment { .onPositive((dialog, which) -> { if (getActivity() == null) return; - PlaylistSong song = (PlaylistSong) songs.get(0); + PlaylistSong song = songs.get(0); PlaylistUtil.deleteItems(songs, song.playlistId); }) .build(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java index 9a30780a..b838b0f9 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java @@ -8,6 +8,7 @@ import android.text.InputType; import com.afollestad.materialdialogs.MaterialDialog; import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.util.PlaylistUtil; public class RenamePlaylistDialog extends DialogFragment { @@ -15,10 +16,12 @@ public class RenamePlaylistDialog extends DialogFragment { private static final String PLAYLIST_ID = "playlist_id"; @NonNull - public static RenamePlaylistDialog create(long playlistId) { + public static RenamePlaylistDialog create(Playlist playlist) { RenamePlaylistDialog dialog = new RenamePlaylistDialog(); + Bundle args = new Bundle(); - args.putLong(PLAYLIST_ID, playlistId); + args.putString(PLAYLIST_ID, playlist.id); + dialog.setArguments(args); return dialog; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/menu/PlaylistMenuHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/menu/PlaylistMenuHelper.java index 78f0156f..7b9da97e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/menu/PlaylistMenuHelper.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/menu/PlaylistMenuHelper.java @@ -1,7 +1,6 @@ package com.kabouzeid.gramophone.helper.menu; import android.app.Activity; -import android.content.Context; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.view.MenuItem; @@ -33,7 +32,7 @@ public class PlaylistMenuHelper { AddToPlaylistDialog.create(new ArrayList<>(getPlaylistSongs(activity, playlist))).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); return true; case R.id.action_rename_playlist: - RenamePlaylistDialog.create(playlist.id.hashCode()).show(activity.getSupportFragmentManager(), "RENAME_PLAYLIST"); + RenamePlaylistDialog.create(playlist).show(activity.getSupportFragmentManager(), "RENAME_PLAYLIST"); return true; case R.id.action_delete_playlist: DeletePlaylistDialog.create(playlist).show(activity.getSupportFragmentManager(), "DELETE_PLAYLIST"); diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java b/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java index 1a1f55c0..42740978 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java @@ -6,10 +6,13 @@ import org.jellyfin.apiclient.model.dto.BaseItemDto; public class PlaylistSong extends Song { public final String playlistId; + public final String indexId; - public PlaylistSong(BaseItemDto itemDto, String playlistId) { + public PlaylistSong(BaseItemDto itemDto, String playlist) { super(itemDto); - this.playlistId = playlistId; + + this.playlistId = playlist; + this.indexId = itemDto.getPlaylistItemId(); } @Override @@ -17,12 +20,14 @@ public class PlaylistSong extends Song { super.writeToParcel(dest, flags); dest.writeString(this.playlistId); + dest.writeString(this.indexId); } protected PlaylistSong(Parcel in) { super(in); this.playlistId = in.readString(); + this.indexId = in.readString(); } public static final Creator CREATOR = new Creator() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java index 2c396627..139235b5 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java @@ -35,7 +35,7 @@ import com.kabouzeid.gramophone.util.PlaylistUtil; import com.kabouzeid.gramophone.util.ViewUtil; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; -import org.jellyfin.apiclient.model.querying.ItemQuery; +import org.jellyfin.apiclient.model.playlists.PlaylistItemQuery; import java.util.ArrayList; import java.util.List; @@ -78,8 +78,8 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme setUpRecyclerView(); setUpToolbar(); - ItemQuery query = new ItemQuery(); - query.setParentId(playlist.id); + PlaylistItemQuery query = new PlaylistItemQuery(); + query.setId(playlist.id); PlaylistUtil.getPlaylist(query, new MediaCallback() { @Override public void onLoadMedia(List media) { @@ -104,7 +104,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme recyclerViewDragDropManager = new RecyclerViewDragDropManager(); final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator(); adapter = new OrderablePlaylistSongAdapter(this, new ArrayList<>(), R.layout.item_list, false, this, (fromPosition, toPosition) -> { - PlaylistUtil.moveItem(playlist.id, adapter.getDataSet().get(fromPosition), toPosition); + PlaylistUtil.moveItem(playlist.id, (PlaylistSong) adapter.getDataSet().get(fromPosition), toPosition); Song song = adapter.getDataSet().remove(fromPosition); adapter.getDataSet().add(toPosition, song); adapter.notifyItemMoved(fromPosition, toPosition); diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistUtil.java index 5c4d5e02..7b91d75a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistUtil.java @@ -10,25 +10,22 @@ import org.jellyfin.apiclient.interaction.EmptyResponse; import org.jellyfin.apiclient.interaction.Response; import org.jellyfin.apiclient.model.dto.BaseItemDto; import org.jellyfin.apiclient.model.playlists.PlaylistCreationRequest; -import org.jellyfin.apiclient.model.querying.ItemQuery; +import org.jellyfin.apiclient.model.playlists.PlaylistItemQuery; import org.jellyfin.apiclient.model.querying.ItemsResult; import java.util.ArrayList; import java.util.List; public class PlaylistUtil { - public static void getPlaylist(ItemQuery query, MediaCallback callback) { - query.setIncludeItemTypes(new String[]{"Audio"}); + public static void getPlaylist(PlaylistItemQuery query, MediaCallback callback) { query.setUserId(App.getApiClient().getCurrentUserId()); query.setLimit(100); - query.setRecursive(true); - if (QueryUtil.currentLibrary != null && query.getParentId() == null) query.setParentId(QueryUtil.currentLibrary.getId()); - App.getApiClient().GetItemsAsync(query, new Response() { + App.getApiClient().GetPlaylistItems(query, new Response() { @Override public void onResponse(ItemsResult result) { List songs = new ArrayList<>(); for (BaseItemDto itemDto : result.getItems()) { - songs.add(new PlaylistSong(itemDto, query.getParentId())); + songs.add(new PlaylistSong(itemDto, query.getId())); } callback.onLoadMedia(songs); @@ -70,16 +67,17 @@ public class PlaylistUtil { App.getApiClient().AddToPlaylist(playlist, ids, user, new EmptyResponse()); } - public static void deleteItems(final List songs, final String playlist) { + public static void deleteItems(final List songs, final String playlist) { String[] ids = new String[songs.size()]; for (int i = 0; i < songs.size(); i++) { - ids[i] = songs.get(i).id; + ids[i] = songs.get(i).indexId; } App.getApiClient().RemoveFromPlaylist(playlist, ids, new EmptyResponse()); } - public static void moveItem(final String playlist, final Song song, int to) { + public static void moveItem(final String playlist, final PlaylistSong song, int to) { + App.getApiClient().MoveItem(playlist, song.indexId, to, new EmptyResponse()); } public static void renamePlaylist(final String playlist, final String name) { @@ -99,7 +97,7 @@ public class PlaylistUtil { } public static void renamePlaylistInner(final BaseItemDto itemDto) { - // TODO find a method to upload metadata changes - // at some point this could become metadata utilities + // TODO at some point this should become metadata utilities + App.getApiClient().UpdateItem(itemDto.getId(), itemDto, new EmptyResponse()); } } \ No newline at end of file