mirror of
https://github.com/antebudimir/tempus.git
synced 2025-12-31 17:43:32 +00:00
feat: Support skipping duplicates
This commit is contained in:
parent
1223062388
commit
e1d63a9eef
4 changed files with 32 additions and 6 deletions
|
|
@ -27,6 +27,8 @@ public class PlaylistChooserDialog extends DialogFragment implements ClickCallba
|
||||||
|
|
||||||
private PlaylistDialogHorizontalAdapter playlistDialogHorizontalAdapter;
|
private PlaylistDialogHorizontalAdapter playlistDialogHorizontalAdapter;
|
||||||
|
|
||||||
|
private boolean SkipDuplicates;
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
|
@ -78,10 +80,15 @@ public class PlaylistChooserDialog extends DialogFragment implements ClickCallba
|
||||||
private void initPlaylistView() {
|
private void initPlaylistView() {
|
||||||
bind.playlistDialogRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bind.playlistDialogRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bind.playlistDialogRecyclerView.setHasFixedSize(true);
|
bind.playlistDialogRecyclerView.setHasFixedSize(true);
|
||||||
|
SkipDuplicates = true;
|
||||||
|
|
||||||
playlistDialogHorizontalAdapter = new PlaylistDialogHorizontalAdapter(this);
|
playlistDialogHorizontalAdapter = new PlaylistDialogHorizontalAdapter(this);
|
||||||
bind.playlistDialogRecyclerView.setAdapter(playlistDialogHorizontalAdapter);
|
bind.playlistDialogRecyclerView.setAdapter(playlistDialogHorizontalAdapter);
|
||||||
|
|
||||||
|
bind.playlistChooserDialogSkipDuplicates.setOnCheckedChangeListener((__, isChecked) -> {
|
||||||
|
SkipDuplicates = isChecked;
|
||||||
|
});
|
||||||
|
|
||||||
playlistChooserViewModel.getPlaylistList(requireActivity()).observe(requireActivity(), playlists -> {
|
playlistChooserViewModel.getPlaylistList(requireActivity()).observe(requireActivity(), playlists -> {
|
||||||
if (playlists != null) {
|
if (playlists != null) {
|
||||||
if (!playlists.isEmpty()) {
|
if (!playlists.isEmpty()) {
|
||||||
|
|
@ -100,8 +107,7 @@ public class PlaylistChooserDialog extends DialogFragment implements ClickCallba
|
||||||
public void onPlaylistClick(Bundle bundle) {
|
public void onPlaylistClick(Bundle bundle) {
|
||||||
if (playlistChooserViewModel.getSongsToAdd() != null && !playlistChooserViewModel.getSongsToAdd().isEmpty()) {
|
if (playlistChooserViewModel.getSongsToAdd() != null && !playlistChooserViewModel.getSongsToAdd().isEmpty()) {
|
||||||
Playlist playlist = bundle.getParcelable(Constants.PLAYLIST_OBJECT);
|
Playlist playlist = bundle.getParcelable(Constants.PLAYLIST_OBJECT);
|
||||||
playlistChooserViewModel.addSongsToPlaylist(playlist.getId());
|
playlistChooserViewModel.addSongsToPlaylist(this, getDialog(), playlist.getId(), SkipDuplicates);
|
||||||
dismiss();
|
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(requireContext(), R.string.playlist_chooser_dialog_toast_add_failure, Toast.LENGTH_SHORT).show();
|
Toast.makeText(requireContext(), R.string.playlist_chooser_dialog_toast_add_failure, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.cappielloantonio.tempo.viewmodel;
|
package com.cappielloantonio.tempo.viewmodel;
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
|
import android.app.Dialog;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.AndroidViewModel;
|
import androidx.lifecycle.AndroidViewModel;
|
||||||
|
|
@ -14,7 +15,6 @@ import com.cappielloantonio.tempo.subsonic.models.Playlist;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PlaylistChooserViewModel extends AndroidViewModel {
|
public class PlaylistChooserViewModel extends AndroidViewModel {
|
||||||
|
|
@ -34,8 +34,19 @@ public class PlaylistChooserViewModel extends AndroidViewModel {
|
||||||
return playlists;
|
return playlists;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSongsToPlaylist(String playlistId) {
|
public void addSongsToPlaylist(LifecycleOwner owner, Dialog dialog, String playlistId, boolean skipDuplicates) {
|
||||||
playlistRepository.addSongToPlaylist(playlistId, new ArrayList<>(Lists.transform(toAdd, Child::getId)));
|
List<String> songIds = Lists.transform(toAdd, Child::getId);
|
||||||
|
if (skipDuplicates) {
|
||||||
|
playlistRepository.getPlaylistSongs(playlistId).observe(owner, playlistSongs -> {
|
||||||
|
List<String> playlistSongIds = Lists.transform(playlistSongs, Child::getId);
|
||||||
|
songIds.removeAll(playlistSongIds);
|
||||||
|
playlistRepository.addSongToPlaylist(playlistId, new ArrayList<>(songIds));
|
||||||
|
dialog.dismiss();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
playlistRepository.addSongToPlaylist(playlistId, new ArrayList<>(songIds));
|
||||||
|
dialog.dismiss();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSongsToAdd(ArrayList<Child> songs) {
|
public void setSongsToAdd(ArrayList<Child> songs) {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,15 @@
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/playlist_dialog_recycler_view"
|
android:id="@+id/playlist_dialog_recycler_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
android:clipToPadding="false" />
|
android:clipToPadding="false" />
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:id="@+id/playlist_chooser_dialog_skip_duplicates"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/playlist_chooser_dialog_skip_duplicates"
|
||||||
|
android:checked="true" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
@ -207,6 +207,7 @@
|
||||||
<string name="playlist_chooser_dialog_negative_button">Cancel</string>
|
<string name="playlist_chooser_dialog_negative_button">Cancel</string>
|
||||||
<string name="playlist_chooser_dialog_neutral_button">Create</string>
|
<string name="playlist_chooser_dialog_neutral_button">Create</string>
|
||||||
<string name="playlist_chooser_dialog_title">Add to a playlist</string>
|
<string name="playlist_chooser_dialog_title">Add to a playlist</string>
|
||||||
|
<string name="playlist_chooser_dialog_skip_duplicates">Skip duplicates</string>
|
||||||
<string name="playlist_chooser_dialog_toast_add_success">Added song to playlist</string>
|
<string name="playlist_chooser_dialog_toast_add_success">Added song to playlist</string>
|
||||||
<string name="playlist_chooser_dialog_toast_add_failure">Failed to add song to playlist</string>
|
<string name="playlist_chooser_dialog_toast_add_failure">Failed to add song to playlist</string>
|
||||||
<string name="playlist_counted_tracks">%1$d tracks • %2$s</string>
|
<string name="playlist_counted_tracks">%1$d tracks • %2$s</string>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue