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 ;
17+ import org .schabi .newpipe .database .playlist .PlaylistDuplicatesEntry ;
1718import org .schabi .newpipe .database .stream .model .StreamEntity ;
1819import org .schabi .newpipe .local .LocalItemListAdapter ;
1920import org .schabi .newpipe .local .playlist .LocalPlaylistManager ;
@@ -28,6 +29,7 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
2829
2930 private RecyclerView playlistRecyclerView ;
3031 private LocalItemListAdapter playlistAdapter ;
32+ private TextView playlistDuplicateIndicator ;
3133
3234 private final CompositeDisposable playlistDisposables = new CompositeDisposable ();
3335
@@ -63,19 +65,23 @@ public void onViewCreated(@NonNull final View view, @Nullable final Bundle saved
6365 playlistAdapter = new LocalItemListAdapter (getActivity ());
6466 playlistAdapter .setSelectedListener (selectedItem -> {
6567 final List <StreamEntity > entities = getStreamEntities ();
66- if (selectedItem instanceof PlaylistMetadataEntry && entities != null ) {
67- onPlaylistSelected (playlistManager , (PlaylistMetadataEntry ) selectedItem , entities );
68+ if (selectedItem instanceof PlaylistDuplicatesEntry && entities != null ) {
69+ onPlaylistSelected (playlistManager ,
70+ (PlaylistDuplicatesEntry ) selectedItem , entities );
6871 }
6972 });
7073
7174 playlistRecyclerView = view .findViewById (R .id .playlist_list );
7275 playlistRecyclerView .setLayoutManager (new LinearLayoutManager (requireContext ()));
7376 playlistRecyclerView .setAdapter (playlistAdapter );
7477
78+ playlistDuplicateIndicator = view .findViewById (R .id .playlist_duplicate );
79+
7580 final View newPlaylistButton = view .findViewById (R .id .newPlaylist );
7681 newPlaylistButton .setOnClickListener (ignored -> openCreatePlaylistDialog ());
7782
78- playlistDisposables .add (playlistManager .getPlaylists ()
83+ playlistDisposables .add (playlistManager
84+ .getPlaylistDuplicates (getStreamEntities ().get (0 ).getUrl ())
7985 .observeOn (AndroidSchedulers .mainThread ())
8086 .subscribe (this ::onPlaylistsReceived ));
8187 }
@@ -117,19 +123,36 @@ public void openCreatePlaylistDialog() {
117123 requireDialog ().dismiss ();
118124 }
119125
120- private void onPlaylistsReceived (@ NonNull final List <PlaylistMetadataEntry > playlists ) {
121- if (playlistAdapter != null && playlistRecyclerView != null ) {
126+ private void onPlaylistsReceived (@ NonNull final List <PlaylistDuplicatesEntry > playlists ) {
127+ if (playlistAdapter != null
128+ && playlistRecyclerView != null
129+ && playlistDuplicateIndicator != null ) {
122130 playlistAdapter .clearStreamItemList ();
123131 playlistAdapter .addItems (playlists );
124132 playlistRecyclerView .setVisibility (View .VISIBLE );
133+ playlistDuplicateIndicator .setVisibility (
134+ anyPlaylistContainsDuplicates (playlists ) ? View .VISIBLE : View .GONE );
125135 }
126136 }
127137
138+ private boolean anyPlaylistContainsDuplicates (final List <PlaylistDuplicatesEntry > playlists ) {
139+ return playlists .stream ()
140+ .anyMatch (playlist -> playlist .timesStreamIsContained > 0 );
141+ }
142+
128143 private void onPlaylistSelected (@ NonNull final LocalPlaylistManager manager ,
129- @ NonNull final PlaylistMetadataEntry playlist ,
144+ @ NonNull final PlaylistDuplicatesEntry playlist ,
130145 @ NonNull final List <StreamEntity > streams ) {
131- final Toast successToast = Toast .makeText (getContext (),
132- R .string .playlist_add_stream_success , Toast .LENGTH_SHORT );
146+
147+ final String toastText ;
148+ if (playlist .timesStreamIsContained > 0 ) {
149+ toastText = getString (R .string .playlist_add_stream_success_duplicate ,
150+ playlist .timesStreamIsContained );
151+ } else {
152+ toastText = getString (R .string .playlist_add_stream_success );
153+ }
154+
155+ final Toast successToast = Toast .makeText (getContext (), toastText , Toast .LENGTH_SHORT );
133156
134157 if (playlist .thumbnailUrl
135158 .equals ("drawable://" + R .drawable .placeholder_thumbnail_playlist )) {
0 commit comments