44import android .view .LayoutInflater ;
55import android .view .View ;
66import android .view .ViewGroup ;
7+ import android .widget .TextView ;
78import android .widget .Toast ;
89
910import androidx .annotation .NonNull ;
1314
1415import org .schabi .newpipe .NewPipeDatabase ;
1516import org .schabi .newpipe .R ;
16- import org .schabi .newpipe .database .playlist .PlaylistMetadataEntry ;
1717import org .schabi .newpipe .database .playlist .model .PlaylistEntity ;
18+ import org .schabi .newpipe .database .playlist .PlaylistDuplicatesEntry ;
1819import org .schabi .newpipe .database .stream .model .StreamEntity ;
1920import org .schabi .newpipe .local .LocalItemListAdapter ;
2021import org .schabi .newpipe .local .playlist .LocalPlaylistManager ;
@@ -29,6 +30,7 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
2930
3031 private RecyclerView playlistRecyclerView ;
3132 private LocalItemListAdapter playlistAdapter ;
33+ private TextView playlistDuplicateIndicator ;
3234
3335 private final CompositeDisposable playlistDisposables = new CompositeDisposable ();
3436
@@ -64,19 +66,23 @@ public void onViewCreated(@NonNull final View view, @Nullable final Bundle saved
6466 playlistAdapter = new LocalItemListAdapter (getActivity ());
6567 playlistAdapter .setSelectedListener (selectedItem -> {
6668 final List <StreamEntity > entities = getStreamEntities ();
67- if (selectedItem instanceof PlaylistMetadataEntry && entities != null ) {
68- onPlaylistSelected (playlistManager , (PlaylistMetadataEntry ) selectedItem , entities );
69+ if (selectedItem instanceof PlaylistDuplicatesEntry && entities != null ) {
70+ onPlaylistSelected (playlistManager ,
71+ (PlaylistDuplicatesEntry ) selectedItem , entities );
6972 }
7073 });
7174
7275 playlistRecyclerView = view .findViewById (R .id .playlist_list );
7376 playlistRecyclerView .setLayoutManager (new LinearLayoutManager (requireContext ()));
7477 playlistRecyclerView .setAdapter (playlistAdapter );
7578
79+ playlistDuplicateIndicator = view .findViewById (R .id .playlist_duplicate );
80+
7681 final View newPlaylistButton = view .findViewById (R .id .newPlaylist );
7782 newPlaylistButton .setOnClickListener (ignored -> openCreatePlaylistDialog ());
7883
79- playlistDisposables .add (playlistManager .getPlaylists ()
84+ playlistDisposables .add (playlistManager
85+ .getPlaylistDuplicates (getStreamEntities ().get (0 ).getUrl ())
8086 .observeOn (AndroidSchedulers .mainThread ())
8187 .subscribe (this ::onPlaylistsReceived ));
8288 }
@@ -118,19 +124,36 @@ public void openCreatePlaylistDialog() {
118124 requireDialog ().dismiss ();
119125 }
120126
121- private void onPlaylistsReceived (@ NonNull final List <PlaylistMetadataEntry > playlists ) {
122- if (playlistAdapter != null && playlistRecyclerView != null ) {
127+ private void onPlaylistsReceived (@ NonNull final List <PlaylistDuplicatesEntry > playlists ) {
128+ if (playlistAdapter != null
129+ && playlistRecyclerView != null
130+ && playlistDuplicateIndicator != null ) {
123131 playlistAdapter .clearStreamItemList ();
124132 playlistAdapter .addItems (playlists );
125133 playlistRecyclerView .setVisibility (View .VISIBLE );
134+ playlistDuplicateIndicator .setVisibility (
135+ anyPlaylistContainsDuplicates (playlists ) ? View .VISIBLE : View .GONE );
126136 }
127137 }
128138
139+ private boolean anyPlaylistContainsDuplicates (final List <PlaylistDuplicatesEntry > playlists ) {
140+ return playlists .stream ()
141+ .anyMatch (playlist -> playlist .timesStreamIsContained > 0 );
142+ }
143+
129144 private void onPlaylistSelected (@ NonNull final LocalPlaylistManager manager ,
130- @ NonNull final PlaylistMetadataEntry playlist ,
145+ @ NonNull final PlaylistDuplicatesEntry playlist ,
131146 @ NonNull final List <StreamEntity > streams ) {
132- final Toast successToast = Toast .makeText (getContext (),
133- R .string .playlist_add_stream_success , Toast .LENGTH_SHORT );
147+
148+ final String toastText ;
149+ if (playlist .timesStreamIsContained > 0 ) {
150+ toastText = getString (R .string .playlist_add_stream_success_duplicate ,
151+ playlist .timesStreamIsContained );
152+ } else {
153+ toastText = getString (R .string .playlist_add_stream_success );
154+ }
155+
156+ final Toast successToast = Toast .makeText (getContext (), toastText , Toast .LENGTH_SHORT );
134157
135158 playlistDisposables .add (manager .appendToPlaylist (playlist .uid , streams )
136159 .observeOn (AndroidSchedulers .mainThread ())
0 commit comments