implement functionality to add items to playlists
This commit is contained in:
parent
656cb8df9e
commit
3ca2b750ff
9 changed files with 86 additions and 85 deletions
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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<Song> 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<Song> songs = getArguments().getParcelableArrayList(SONGS);
|
||||
if (songs != null && !songs.isEmpty()) {
|
||||
PlaylistUtil.createPlaylist(name, songs);
|
||||
}
|
||||
})
|
||||
.build();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Song> 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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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<Song> songs) {
|
||||
ArrayList<String> 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<Playlist> playlists) {
|
||||
for (Playlist playlist : playlists) {
|
||||
App.getApiClient().DeleteItem(playlist.id, new EmptyResponse());
|
||||
}
|
||||
}
|
||||
|
||||
public static void addItems(final List<Song> 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<Song> 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) {
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Playlist> 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<Song> 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 "";
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue