From bf1ebf8733c3d55a8443aa13bf599cbff2fa1981 Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Thu, 8 Dec 2022 23:31:20 +0100 Subject: [PATCH] Fixed some bugs and improved code quality --- .../playlist/dao/PlaylistStreamDAO.java | 10 +++ .../local/bookmark/BookmarkFragment.java | 62 ++++++++++--------- .../local/playlist/LocalPlaylistManager.java | 7 +++ 3 files changed, 51 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java b/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java index 4941d9395..df4ef2e52 100644 --- a/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java +++ b/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java @@ -25,6 +25,7 @@ import static org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity.JO import static org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity.PLAYLIST_STREAM_JOIN_TABLE; import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_ID; import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_TABLE; +import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_THUMBNAIL_URL; import static org.schabi.newpipe.database.stream.model.StreamStateEntity.JOIN_STREAM_ID_ALIAS; import static org.schabi.newpipe.database.stream.model.StreamStateEntity.STREAM_PROGRESS_MILLIS; import static org.schabi.newpipe.database.stream.model.StreamStateEntity.STREAM_STATE_TABLE; @@ -53,6 +54,15 @@ public interface PlaylistStreamDAO extends BasicDAO { + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId") Flowable getMaximumIndexOf(long playlistId); + @Query("SELECT CASE WHEN COUNT(*) != 0 then " + STREAM_THUMBNAIL_URL + " ELSE :defaultUrl END" + + " FROM " + STREAM_TABLE + + " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE + + " ON " + STREAM_ID + " = " + JOIN_STREAM_ID + + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId " + + " LIMIT 1" + ) + Flowable getAutomaticThumbnailUrl(long playlistId, String defaultUrl); + @RewriteQueriesToDropUnusedColumns @Transaction @Query("SELECT * FROM " + STREAM_TABLE + " INNER JOIN " diff --git a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java index 65db40d16..1ef61bf31 100644 --- a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java +++ b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java @@ -259,11 +259,42 @@ public final class BookmarkFragment extends BaseLocalListFragment arrayAdapter = new ArrayAdapter<>(getContext(), + final ArrayAdapter arrayAdapter = getLocalDialogArrayAdapter(isPlaylistThumbnailSet, + unsetThumbnail); + arrayAdapter.addAll(rename, delete, unsetThumbnail); + + final DialogInterface.OnClickListener action = (dialog, index) -> { + if (index == arrayAdapter.getPosition(rename)) { + showRenameDialog(selectedItem); + } else if (index == arrayAdapter.getPosition(delete)) { + showDeleteDialog(selectedItem.name, localPlaylistManager + .deletePlaylist(selectedItem.uid)); + dialog.dismiss(); + } else if (isPlaylistThumbnailSet) { + final String thumbnail_url = localPlaylistManager + .getAutomaticPlaylistThumbnail(selectedItem.uid); + localPlaylistManager.changePlaylistThumbnail(selectedItem.uid, thumbnail_url, false) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(); + } + }; + + builder.setAdapter(arrayAdapter, action) + .create() + .show(); + } + + private ArrayAdapter getLocalDialogArrayAdapter(final boolean isPlaylistThumbnailSet, + final String unsetThumbnail) { + return new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1) { @Override public View getView(final int position, final View convertView, @@ -271,7 +302,8 @@ public final class BookmarkFragment extends BaseLocalListFragment { - switch (index) { - case 0: showRenameDialog(selectedItem); - break; - case 1: - showDeleteDialog(selectedItem.name, - localPlaylistManager.deletePlaylist(selectedItem.uid)); - dialog.dismiss(); - break; - case 2: - if (isPlaylistThumbnailSet) { - final String ur = "drawable://" + R.drawable.placeholder_thumbnail_playlist; - localPlaylistManager.changePlaylistThumbnail(selectedItem.uid, ur, - false).observeOn(AndroidSchedulers.mainThread()).subscribe(); - } - break; - } - }; - - builder.setAdapter(arrayAdapter, action) - .create() - .show(); } private void showRenameDialog(final PlaylistMetadataEntry selectedItem) { diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java index 2510b284d..8d975241b 100644 --- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java +++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java @@ -2,6 +2,7 @@ package org.schabi.newpipe.local.playlist; import androidx.annotation.Nullable; +import org.schabi.newpipe.R; import org.schabi.newpipe.database.AppDatabase; import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry; import org.schabi.newpipe.database.playlist.PlaylistStreamEntry; @@ -113,12 +114,18 @@ public class LocalPlaylistManager { return playlistTable.getPlaylist(playlistId).blockingFirst().get(0).getIsThumbnailSet(); } + public String getAutomaticPlaylistThumbnail(final long playlistId) { + final String def = "drawable://" + R.drawable.placeholder_thumbnail_playlist; + return playlistStreamTable.getAutomaticThumbnailUrl(playlistId, def).blockingFirst(); + } + private Maybe modifyPlaylist(final long playlistId, @Nullable final String name, @Nullable final String thumbnailUrl, final boolean isPermanent) { return playlistTable.getPlaylist(playlistId) .firstElement() + .filter(playlistEntities -> !playlistEntities.isEmpty()) .map(playlistEntities -> { final PlaylistEntity playlist = playlistEntities.get(0); if (name != null) {