fix remaining issues with playlist updates

This commit is contained in:
dkanada 2020-05-01 22:58:33 +09:00
commit 5826430751
6 changed files with 29 additions and 25 deletions

View file

@ -8,7 +8,6 @@ import android.text.Html;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.PlaylistSong; import com.kabouzeid.gramophone.model.PlaylistSong;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.PlaylistUtil; import com.kabouzeid.gramophone.util.PlaylistUtil;
@ -39,7 +38,7 @@ public class RemoveFromPlaylistDialog extends DialogFragment {
@NonNull @NonNull
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
final List<Song> songs = getArguments().getParcelableArrayList("songs"); final List<PlaylistSong> songs = getArguments().getParcelableArrayList("songs");
int title; int title;
CharSequence content; CharSequence content;
@ -59,7 +58,7 @@ public class RemoveFromPlaylistDialog extends DialogFragment {
.onPositive((dialog, which) -> { .onPositive((dialog, which) -> {
if (getActivity() == null) return; if (getActivity() == null) return;
PlaylistSong song = (PlaylistSong) songs.get(0); PlaylistSong song = songs.get(0);
PlaylistUtil.deleteItems(songs, song.playlistId); PlaylistUtil.deleteItems(songs, song.playlistId);
}) })
.build(); .build();

View file

@ -8,6 +8,7 @@ import android.text.InputType;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.util.PlaylistUtil; import com.kabouzeid.gramophone.util.PlaylistUtil;
public class RenamePlaylistDialog extends DialogFragment { public class RenamePlaylistDialog extends DialogFragment {
@ -15,10 +16,12 @@ public class RenamePlaylistDialog extends DialogFragment {
private static final String PLAYLIST_ID = "playlist_id"; private static final String PLAYLIST_ID = "playlist_id";
@NonNull @NonNull
public static RenamePlaylistDialog create(long playlistId) { public static RenamePlaylistDialog create(Playlist playlist) {
RenamePlaylistDialog dialog = new RenamePlaylistDialog(); RenamePlaylistDialog dialog = new RenamePlaylistDialog();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLong(PLAYLIST_ID, playlistId); args.putString(PLAYLIST_ID, playlist.id);
dialog.setArguments(args); dialog.setArguments(args);
return dialog; return dialog;
} }

View file

@ -1,7 +1,6 @@
package com.kabouzeid.gramophone.helper.menu; package com.kabouzeid.gramophone.helper.menu;
import android.app.Activity; import android.app.Activity;
import android.content.Context;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import android.view.MenuItem; import android.view.MenuItem;
@ -33,7 +32,7 @@ public class PlaylistMenuHelper {
AddToPlaylistDialog.create(new ArrayList<>(getPlaylistSongs(activity, playlist))).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); AddToPlaylistDialog.create(new ArrayList<>(getPlaylistSongs(activity, playlist))).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST");
return true; return true;
case R.id.action_rename_playlist: 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; return true;
case R.id.action_delete_playlist: case R.id.action_delete_playlist:
DeletePlaylistDialog.create(playlist).show(activity.getSupportFragmentManager(), "DELETE_PLAYLIST"); DeletePlaylistDialog.create(playlist).show(activity.getSupportFragmentManager(), "DELETE_PLAYLIST");

View file

@ -6,10 +6,13 @@ import org.jellyfin.apiclient.model.dto.BaseItemDto;
public class PlaylistSong extends Song { public class PlaylistSong extends Song {
public final String playlistId; public final String playlistId;
public final String indexId;
public PlaylistSong(BaseItemDto itemDto, String playlistId) { public PlaylistSong(BaseItemDto itemDto, String playlist) {
super(itemDto); super(itemDto);
this.playlistId = playlistId;
this.playlistId = playlist;
this.indexId = itemDto.getPlaylistItemId();
} }
@Override @Override
@ -17,12 +20,14 @@ public class PlaylistSong extends Song {
super.writeToParcel(dest, flags); super.writeToParcel(dest, flags);
dest.writeString(this.playlistId); dest.writeString(this.playlistId);
dest.writeString(this.indexId);
} }
protected PlaylistSong(Parcel in) { protected PlaylistSong(Parcel in) {
super(in); super(in);
this.playlistId = in.readString(); this.playlistId = in.readString();
this.indexId = in.readString();
} }
public static final Creator<PlaylistSong> CREATOR = new Creator<PlaylistSong>() { public static final Creator<PlaylistSong> CREATOR = new Creator<PlaylistSong>() {

View file

@ -35,7 +35,7 @@ import com.kabouzeid.gramophone.util.PlaylistUtil;
import com.kabouzeid.gramophone.util.ViewUtil; import com.kabouzeid.gramophone.util.ViewUtil;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; 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.ArrayList;
import java.util.List; import java.util.List;
@ -78,8 +78,8 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
setUpRecyclerView(); setUpRecyclerView();
setUpToolbar(); setUpToolbar();
ItemQuery query = new ItemQuery(); PlaylistItemQuery query = new PlaylistItemQuery();
query.setParentId(playlist.id); query.setId(playlist.id);
PlaylistUtil.getPlaylist(query, new MediaCallback() { PlaylistUtil.getPlaylist(query, new MediaCallback() {
@Override @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
@ -104,7 +104,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
recyclerViewDragDropManager = new RecyclerViewDragDropManager(); recyclerViewDragDropManager = new RecyclerViewDragDropManager();
final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator(); final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator();
adapter = new OrderablePlaylistSongAdapter(this, new ArrayList<>(), R.layout.item_list, false, this, (fromPosition, toPosition) -> { 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); Song song = adapter.getDataSet().remove(fromPosition);
adapter.getDataSet().add(toPosition, song); adapter.getDataSet().add(toPosition, song);
adapter.notifyItemMoved(fromPosition, toPosition); adapter.notifyItemMoved(fromPosition, toPosition);

View file

@ -10,25 +10,22 @@ import org.jellyfin.apiclient.interaction.EmptyResponse;
import org.jellyfin.apiclient.interaction.Response; import org.jellyfin.apiclient.interaction.Response;
import org.jellyfin.apiclient.model.dto.BaseItemDto; import org.jellyfin.apiclient.model.dto.BaseItemDto;
import org.jellyfin.apiclient.model.playlists.PlaylistCreationRequest; 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 org.jellyfin.apiclient.model.querying.ItemsResult;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class PlaylistUtil { public class PlaylistUtil {
public static void getPlaylist(ItemQuery query, MediaCallback callback) { public static void getPlaylist(PlaylistItemQuery query, MediaCallback callback) {
query.setIncludeItemTypes(new String[]{"Audio"});
query.setUserId(App.getApiClient().getCurrentUserId()); query.setUserId(App.getApiClient().getCurrentUserId());
query.setLimit(100); query.setLimit(100);
query.setRecursive(true); App.getApiClient().GetPlaylistItems(query, new Response<ItemsResult>() {
if (QueryUtil.currentLibrary != null && query.getParentId() == null) query.setParentId(QueryUtil.currentLibrary.getId());
App.getApiClient().GetItemsAsync(query, new Response<ItemsResult>() {
@Override @Override
public void onResponse(ItemsResult result) { public void onResponse(ItemsResult result) {
List<PlaylistSong> songs = new ArrayList<>(); List<PlaylistSong> songs = new ArrayList<>();
for (BaseItemDto itemDto : result.getItems()) { for (BaseItemDto itemDto : result.getItems()) {
songs.add(new PlaylistSong(itemDto, query.getParentId())); songs.add(new PlaylistSong(itemDto, query.getId()));
} }
callback.onLoadMedia(songs); callback.onLoadMedia(songs);
@ -70,16 +67,17 @@ public class PlaylistUtil {
App.getApiClient().AddToPlaylist(playlist, ids, user, new EmptyResponse()); App.getApiClient().AddToPlaylist(playlist, ids, user, new EmptyResponse());
} }
public static void deleteItems(final List<Song> songs, final String playlist) { public static void deleteItems(final List<PlaylistSong> songs, final String playlist) {
String[] ids = new String[songs.size()]; String[] ids = new String[songs.size()];
for (int i = 0; i < songs.size(); i++) { 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()); 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) { public static void renamePlaylist(final String playlist, final String name) {
@ -99,7 +97,7 @@ public class PlaylistUtil {
} }
public static void renamePlaylistInner(final BaseItemDto itemDto) { public static void renamePlaylistInner(final BaseItemDto itemDto) {
// TODO find a method to upload metadata changes // TODO at some point this should become metadata utilities
// at some point this could become metadata utilities App.getApiClient().UpdateItem(itemDto.getId(), itemDto, new EmptyResponse());
} }
} }