diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java index 8134945e..74dfba8f 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java @@ -9,7 +9,7 @@ import com.afollestad.materialdialogs.MaterialDialog; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.util.PlaylistsUtil; +import com.kabouzeid.gramophone.util.PlaylistUtil; import java.util.ArrayList; import java.util.List; @@ -56,7 +56,7 @@ public class AddToPlaylistDialog extends DialogFragment { CreatePlaylistDialog.create(songs).show(getActivity().getSupportFragmentManager(), "ADD_TO_PLAYLIST"); } else { materialDialog.dismiss(); - PlaylistsUtil.addToPlaylist(getActivity(), songs, playlists.get(i - 1).id, true); + PlaylistUtil.addItems(songs, playlists.get(i - 1).id); } }) .build(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java index 789a4e25..49784e00 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java @@ -6,12 +6,11 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.DialogFragment; import android.text.InputType; -import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.util.PlaylistsUtil; +import com.kabouzeid.gramophone.util.PlaylistUtil; import java.util.ArrayList; import java.util.List; @@ -49,27 +48,13 @@ public class CreatePlaylistDialog extends DialogFragment { .title(R.string.action_new_playlist) .positiveText(R.string.create_action) .negativeText(android.R.string.cancel) - .inputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_VARIATION_PERSON_NAME | - InputType.TYPE_TEXT_FLAG_CAP_WORDS) + .inputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME | InputType.TYPE_TEXT_FLAG_CAP_WORDS) .input(R.string.playlist_name_empty, 0, false, (materialDialog, charSequence) -> { - if (getActivity() == null) - return; final String name = charSequence.toString().trim(); - if (!name.isEmpty()) { - if (!PlaylistsUtil.doesPlaylistExist(getActivity(), name)) { - final String playlistId = PlaylistsUtil.createPlaylist(getActivity(), name); - if (getActivity() != null) { - // noinspection unchecked - List songs = getArguments().getParcelableArrayList(SONGS); - if (songs != null && !songs.isEmpty()) { - PlaylistsUtil.addToPlaylist(getActivity(), songs, playlistId, true); - } - } - } else { - Toast.makeText(getActivity(), getActivity().getResources().getString( - R.string.playlist_exists, name), Toast.LENGTH_SHORT).show(); - } + if (getActivity() == null || getArguments() == null || name.isEmpty()) return; + List songs = getArguments().getParcelableArrayList(SONGS); + if (songs != null && !songs.isEmpty()) { + PlaylistUtil.createPlaylist(name, songs); } }) .build(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java index befa849d..42bff67a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java @@ -9,7 +9,7 @@ import android.text.Html; import com.afollestad.materialdialogs.MaterialDialog; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.model.Playlist; -import com.kabouzeid.gramophone.util.PlaylistsUtil; +import com.kabouzeid.gramophone.util.PlaylistUtil; import java.util.ArrayList; import java.util.List; @@ -54,7 +54,7 @@ public class DeletePlaylistDialog extends DialogFragment { .negativeText(android.R.string.cancel) .onPositive((dialog, which) -> { if (getActivity() == null) return; - PlaylistsUtil.deletePlaylist(getActivity(), playlists); + PlaylistUtil.deletePlaylist(playlists); }) .build(); } 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 2a64fff4..7aa6f3f6 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java @@ -9,7 +9,7 @@ import android.text.Html; import com.afollestad.materialdialogs.MaterialDialog; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.util.PlaylistsUtil; +import com.kabouzeid.gramophone.util.PlaylistUtil; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ public class RemoveFromPlaylistDialog extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - //noinspection unchecked final List songs = getArguments().getParcelableArrayList("songs"); int title; CharSequence content; @@ -54,7 +53,7 @@ public class RemoveFromPlaylistDialog extends DialogFragment { .negativeText(android.R.string.cancel) .onPositive((dialog, which) -> { if (getActivity() == null) return; - PlaylistsUtil.removeFromPlaylist(getActivity(), songs.get(0), songs.get(0).id); + PlaylistUtil.deleteItems(songs, songs.get(0).id); }) .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 6891c343..9a30780a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java @@ -8,7 +8,7 @@ import android.text.InputType; import com.afollestad.materialdialogs.MaterialDialog; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.util.PlaylistsUtil; +import com.kabouzeid.gramophone.util.PlaylistUtil; public class RenamePlaylistDialog extends DialogFragment { @@ -26,21 +26,19 @@ public class RenamePlaylistDialog extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - long playlistId = getArguments().getLong(PLAYLIST_ID); + String playlistId = getArguments().getString(PLAYLIST_ID); return new MaterialDialog.Builder(getActivity()) .title(R.string.rename_playlist_title) .positiveText(R.string.rename_action) .negativeText(android.R.string.cancel) - .inputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_VARIATION_PERSON_NAME | - InputType.TYPE_TEXT_FLAG_CAP_WORDS) - .input(getString(R.string.playlist_name_empty), PlaylistsUtil.getNameForPlaylist(getActivity(), playlistId), false, + .inputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME | InputType.TYPE_TEXT_FLAG_CAP_WORDS) + .input(getString(R.string.playlist_name_empty), "", false, (materialDialog, charSequence) -> { final String name = charSequence.toString().trim(); if (!name.isEmpty()) { - long playlistId1 = getArguments().getLong(PLAYLIST_ID); - PlaylistsUtil.renamePlaylist(getActivity(), playlistId1, name); + String id = getArguments().getString(PLAYLIST_ID); + PlaylistUtil.renamePlaylist(id, name); } }) .build(); 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 168df360..9e2f357c 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 @@ -31,7 +31,7 @@ import com.kabouzeid.gramophone.model.playlist.AbsSmartPlaylist; import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity; import com.kabouzeid.gramophone.util.QueryUtil; import com.kabouzeid.gramophone.util.ThemeUtil; -import com.kabouzeid.gramophone.util.PlaylistsUtil; +import com.kabouzeid.gramophone.util.PlaylistUtil; import com.kabouzeid.gramophone.util.ViewUtil; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; @@ -104,11 +104,10 @@ 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) -> { - if (PlaylistsUtil.moveItem(PlaylistDetailActivity.this, playlist.id, fromPosition, toPosition)) { - Song song = adapter.getDataSet().remove(fromPosition); - adapter.getDataSet().add(toPosition, song); - adapter.notifyItemMoved(fromPosition, toPosition); - } + PlaylistUtil.moveItem(playlist.id, adapter.getDataSet().get(fromPosition), toPosition); + Song song = adapter.getDataSet().remove(fromPosition); + adapter.getDataSet().add(toPosition, song); + adapter.notifyItemMoved(fromPosition, toPosition); }); wrappedAdapter = recyclerViewDragDropManager.createWrappedAdapter(adapter); diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistUtil.java new file mode 100644 index 00000000..d21043b9 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistUtil.java @@ -0,0 +1,58 @@ +package com.kabouzeid.gramophone.util; + +import com.kabouzeid.gramophone.App; +import com.kabouzeid.gramophone.model.Playlist; +import com.kabouzeid.gramophone.model.Song; + +import org.jellyfin.apiclient.interaction.EmptyResponse; +import org.jellyfin.apiclient.interaction.Response; +import org.jellyfin.apiclient.model.playlists.PlaylistCreationRequest; + +import java.util.ArrayList; +import java.util.List; + +public class PlaylistUtil { + public static void createPlaylist(final String name, final List songs) { + ArrayList ids = new ArrayList<>(); + for (Song song : songs) { + ids.add(song.id); + } + + PlaylistCreationRequest request = new PlaylistCreationRequest(); + request.setUserId(App.getApiClient().getCurrentUserId()); + request.setName(name); + request.setItemIdList(ids); + App.getApiClient().CreatePlaylist(request, new Response<>()); + } + + public static void deletePlaylist(final List playlists) { + for (Playlist playlist : playlists) { + App.getApiClient().DeleteItem(playlist.id, new EmptyResponse()); + } + } + + public static void addItems(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; + } + + String user = App.getApiClient().getCurrentUserId(); + App.getApiClient().AddToPlaylist(playlist, ids, user, new EmptyResponse()); + } + + 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; + } + + App.getApiClient().RemoveFromPlaylist(playlist, ids, new EmptyResponse()); + } + + public static void moveItem(final String playlist, final Song song, int to) { + } + + public static void renamePlaylist(final String playlist, final String name) { + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java deleted file mode 100644 index 11001eef..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.kabouzeid.gramophone.util; - -import android.content.Context; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.kabouzeid.gramophone.model.Playlist; -import com.kabouzeid.gramophone.model.Song; - -import java.util.List; - -public class PlaylistsUtil { - public static boolean doesPlaylistExist(@NonNull final Context context, final String name) { - return false; - } - - public static String createPlaylist(@NonNull final Context context, @Nullable final String name) { - return ""; - } - - public static void deletePlaylist(@NonNull final Context context, @NonNull final List playlists) { - } - - public static void addToPlaylist(@NonNull final Context context, final Song song, final String playlistId, final boolean showToastOnFinish) { - } - - public static void addToPlaylist(@NonNull final Context context, @NonNull final List songs, final String playlistId, final boolean showToastOnFinish) { - } - - public static void removeFromPlaylist(@NonNull final Context context, @NonNull final Song song, String playlistId) { - } - - public static boolean moveItem(@NonNull final Context context, String playlistId, int from, int to) { - return true; - } - - public static void renamePlaylist(@NonNull final Context context, final long id, final String newName) { - } - - public static String getNameForPlaylist(@NonNull final Context context, final long id) { - return ""; - } -} \ No newline at end of file diff --git a/app/src/main/res/menu/menu_drawer.xml b/app/src/main/res/menu/menu_drawer.xml index 0bfab658..15e4594d 100644 --- a/app/src/main/res/menu/menu_drawer.xml +++ b/app/src/main/res/menu/menu_drawer.xml @@ -4,23 +4,28 @@ + + + + +