1
0
mirror of https://github.com/TeamNewPipe/NewPipe synced 2024-12-23 08:30:44 +00:00

Started working on a way to show that items are already in a playlist

This commit is contained in:
Jared Fantaye 2022-12-10 13:15:49 +01:00 committed by Stypox
parent fdfeac081a
commit ac15339911
No known key found for this signature in database
GPG Key ID: 4BDF1B40A49FDD23
5 changed files with 66 additions and 1 deletions

View File

@ -59,6 +59,14 @@ public interface PlaylistStreamDAO extends BasicDAO<PlaylistStreamEntity> {
) )
Flowable<Integer> getDuplicates(long playlistId, String streamURL); Flowable<Integer> getDuplicates(long playlistId, String streamURL);
@Query("SELECT " + JOIN_PLAYLIST_ID
+ " FROM " + STREAM_TABLE
+ " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE
+ " ON " + STREAM_ID + " = " + JOIN_STREAM_ID
+ " WHERE " + STREAM_URL + " = :streamURL"
)
Flowable<List<Long>> getDuplicatePlaylists(String streamURL);
@Query("SELECT COALESCE(MAX(" + JOIN_INDEX + "), -1)" @Query("SELECT COALESCE(MAX(" + JOIN_INDEX + "), -1)"
+ " FROM " + PLAYLIST_STREAM_JOIN_TABLE + " FROM " + PLAYLIST_STREAM_JOIN_TABLE

View File

@ -11,6 +11,7 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import org.schabi.newpipe.database.LocalItem; import org.schabi.newpipe.database.LocalItem;
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
import org.schabi.newpipe.database.stream.model.StreamStateEntity; import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.local.holder.LocalItemHolder; import org.schabi.newpipe.local.holder.LocalItemHolder;
@ -344,6 +345,16 @@ public class LocalItemListAdapter extends RecyclerView.Adapter<RecyclerView.View
} }
} }
@Override
public long getItemId(final int position) {
final LocalItem item = localItems.get(0);
if (item != null && item.getLocalItemType() == LocalItem.LocalItemType.
PLAYLIST_LOCAL_ITEM) {
return ((PlaylistMetadataEntry) item).uid;
}
return super.getItemId(position);
}
public GridLayoutManager.SpanSizeLookup getSpanSizeLookup(final int spanCount) { public GridLayoutManager.SpanSizeLookup getSpanSizeLookup(final int spanCount) {
return new GridLayoutManager.SpanSizeLookup() { return new GridLayoutManager.SpanSizeLookup() {
@Override @Override

View File

@ -19,6 +19,7 @@ import org.schabi.newpipe.database.stream.model.StreamEntity;
import org.schabi.newpipe.local.LocalItemListAdapter; import org.schabi.newpipe.local.LocalItemListAdapter;
import org.schabi.newpipe.local.playlist.LocalPlaylistManager; import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
import java.util.HashMap;
import java.util.List; import java.util.List;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
@ -62,6 +63,7 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
new LocalPlaylistManager(NewPipeDatabase.getInstance(requireContext())); new LocalPlaylistManager(NewPipeDatabase.getInstance(requireContext()));
playlistAdapter = new LocalItemListAdapter(getActivity()); playlistAdapter = new LocalItemListAdapter(getActivity());
playlistAdapter.setHasStableIds(true);
playlistAdapter.setSelectedListener(selectedItem -> { playlistAdapter.setSelectedListener(selectedItem -> {
final List<StreamEntity> entities = getStreamEntities(); final List<StreamEntity> entities = getStreamEntities();
if (selectedItem instanceof PlaylistMetadataEntry && entities != null) { if (selectedItem instanceof PlaylistMetadataEntry && entities != null) {
@ -123,6 +125,35 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
playlistAdapter.clearStreamItemList(); playlistAdapter.clearStreamItemList();
playlistAdapter.addItems(playlists); playlistAdapter.addItems(playlists);
playlistRecyclerView.setVisibility(View.VISIBLE); playlistRecyclerView.setVisibility(View.VISIBLE);
final LocalPlaylistManager playlistManager =
new LocalPlaylistManager(NewPipeDatabase.getInstance(requireContext()));
final List<Long> duplicateIds = playlistManager.getDuplicatePlaylist(getStreamEntities()
.get(0).getUrl()).blockingFirst();
final HashMap<Integer, Long> map = new HashMap<>();
for (int i = 0; i < playlists.size(); i++) {
map.put(i, playlists.get(i).uid);
}
playlistRecyclerView.postDelayed(new Runnable() {
@Override
public void run() {
if (playlistRecyclerView.getAdapter() == null) {
return;
}
final int count = playlistRecyclerView.getAdapter().getItemCount();
System.out.println(" kasjdflkalk" + playlistRecyclerView.getAdapter()
.getItemId(0));
for (int i = 0; i < count; i++) {
if (playlistRecyclerView.findViewHolderForAdapterPosition(i) != null
&& duplicateIds.contains(playlistAdapter.getItemId(i))) {
playlistRecyclerView.findViewHolderForAdapterPosition(i).itemView
.findViewById(R.id.checkmark2).setVisibility(View.VISIBLE);
}
}
}
}, 1000);
} }
} }
@ -163,7 +194,6 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
@NonNull final LocalPlaylistManager manager, @NonNull final LocalPlaylistManager manager,
@NonNull final PlaylistMetadataEntry playlist, @NonNull final PlaylistMetadataEntry playlist,
@NonNull final List<StreamEntity> streams) { @NonNull final List<StreamEntity> streams) {
//TODO: change color
final AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity()); final AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity());
builder.setTitle(R.string.duplicate_stream_in_playlist_title); builder.setTitle(R.string.duplicate_stream_in_playlist_title);
builder.setMessage(getString(R.string.duplicate_stream_in_playlist_description, builder.setMessage(getString(R.string.duplicate_stream_in_playlist_description,

View File

@ -95,6 +95,10 @@ public class LocalPlaylistManager {
return playlistStreamTable.getDuplicates(playlistId, streamURL); return playlistStreamTable.getDuplicates(playlistId, streamURL);
} }
public Flowable<List<Long>> getDuplicatePlaylist(final String streamURL) {
return playlistStreamTable.getDuplicatePlaylists(streamURL);
}
public Single<Integer> deletePlaylist(final long playlistId) { public Single<Integer> deletePlaylist(final long playlistId) {
return Single.fromCallable(() -> playlistTable.deletePlaylist(playlistId)) return Single.fromCallable(() -> playlistTable.deletePlaylist(playlistId))
.subscribeOn(Schedulers.io()); .subscribeOn(Schedulers.io());

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/itemRoot" android:id="@+id/itemRoot"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -21,6 +22,17 @@
android:src="@drawable/placeholder_thumbnail_playlist" android:src="@drawable/placeholder_thumbnail_playlist"
tools:ignore="RtlHardcoded" /> tools:ignore="RtlHardcoded" />
<ImageView
android:id="@+id/checkmark2"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignBottom="@id/itemThumbnailView"
android:layout_marginBottom="-1dp"
android:src="@drawable/ic_done"
android:visibility="gone"
app:tint="#E81111" />
<org.schabi.newpipe.views.NewPipeTextView <org.schabi.newpipe.views.NewPipeTextView
android:id="@+id/itemStreamCountView" android:id="@+id/itemStreamCountView"
android:layout_width="45dp" android:layout_width="45dp"