Skip to content

Commit bf1ebf8

Browse files
committed
Fixed some bugs and improved code quality
1 parent 10a5741 commit bf1ebf8

3 files changed

Lines changed: 51 additions & 28 deletions

File tree

app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import static org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity.PLAYLIST_STREAM_JOIN_TABLE;
2626
import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_ID;
2727
import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_TABLE;
28+
import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_THUMBNAIL_URL;
2829
import static org.schabi.newpipe.database.stream.model.StreamStateEntity.JOIN_STREAM_ID_ALIAS;
2930
import static org.schabi.newpipe.database.stream.model.StreamStateEntity.STREAM_PROGRESS_MILLIS;
3031
import static org.schabi.newpipe.database.stream.model.StreamStateEntity.STREAM_STATE_TABLE;
@@ -53,6 +54,15 @@ default Flowable<List<PlaylistStreamEntity>> listByService(final int serviceId)
5354
+ " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId")
5455
Flowable<Integer> getMaximumIndexOf(long playlistId);
5556

57+
@Query("SELECT CASE WHEN COUNT(*) != 0 then " + STREAM_THUMBNAIL_URL + " ELSE :defaultUrl END"
58+
+ " FROM " + STREAM_TABLE
59+
+ " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE
60+
+ " ON " + STREAM_ID + " = " + JOIN_STREAM_ID
61+
+ " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId "
62+
+ " LIMIT 1"
63+
)
64+
Flowable<String> getAutomaticThumbnailUrl(long playlistId, String defaultUrl);
65+
5666
@RewriteQueriesToDropUnusedColumns
5767
@Transaction
5868
@Query("SELECT * FROM " + STREAM_TABLE + " INNER JOIN "

app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -259,19 +259,51 @@ private void showRemoteDeleteDialog(final PlaylistRemoteEntity item) {
259259
}
260260

261261
private void showLocalDialog(final PlaylistMetadataEntry selectedItem) {
262+
final String rename = getString(R.string.rename);
263+
final String delete = getString(R.string.delete);
264+
final String unsetThumbnail = getString(R.string.unset_playlist_thumbnail);
262265
final boolean isPlaylistThumbnailSet = localPlaylistManager
263266
.getIsPlaylistThumbnailSet(selectedItem.uid);
267+
264268
final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
265269

266-
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getContext(),
270+
final ArrayAdapter<String> arrayAdapter = getLocalDialogArrayAdapter(isPlaylistThumbnailSet,
271+
unsetThumbnail);
272+
arrayAdapter.addAll(rename, delete, unsetThumbnail);
273+
274+
final DialogInterface.OnClickListener action = (dialog, index) -> {
275+
if (index == arrayAdapter.getPosition(rename)) {
276+
showRenameDialog(selectedItem);
277+
} else if (index == arrayAdapter.getPosition(delete)) {
278+
showDeleteDialog(selectedItem.name, localPlaylistManager
279+
.deletePlaylist(selectedItem.uid));
280+
dialog.dismiss();
281+
} else if (isPlaylistThumbnailSet) {
282+
final String thumbnail_url = localPlaylistManager
283+
.getAutomaticPlaylistThumbnail(selectedItem.uid);
284+
localPlaylistManager.changePlaylistThumbnail(selectedItem.uid, thumbnail_url, false)
285+
.observeOn(AndroidSchedulers.mainThread())
286+
.subscribe();
287+
}
288+
};
289+
290+
builder.setAdapter(arrayAdapter, action)
291+
.create()
292+
.show();
293+
}
294+
295+
private ArrayAdapter<String> getLocalDialogArrayAdapter(final boolean isPlaylistThumbnailSet,
296+
final String unsetThumbnail) {
297+
return new ArrayAdapter<>(getContext(),
267298
android.R.layout.simple_list_item_1) {
268299
@Override
269300
public View getView(final int position, final View convertView,
270301
final ViewGroup parent) {
271302
final View v = super.getView(position, convertView, parent);
272303
final TextView textView = v.findViewById(android.R.id.text1);
273304

274-
if (!isPlaylistThumbnailSet && position == 2) {
305+
// If the PlaylistThumbnail is not set permanently, the unset option is disabled.
306+
if (!isPlaylistThumbnailSet && textView.getText().equals(unsetThumbnail)) {
275307
textView.setEnabled(false);
276308
return v;
277309
}
@@ -280,32 +312,6 @@ public View getView(final int position, final View convertView,
280312
return v;
281313
}
282314
};
283-
arrayAdapter.addAll(getString(R.string.rename), getString(R.string.delete),
284-
getString(R.string.unset_playlist_thumbnail));
285-
286-
// Rename = 0; Delete = 1; Unset Thumbnail = 2
287-
final DialogInterface.OnClickListener action = (dialog, index) -> {
288-
switch (index) {
289-
case 0: showRenameDialog(selectedItem);
290-
break;
291-
case 1:
292-
showDeleteDialog(selectedItem.name,
293-
localPlaylistManager.deletePlaylist(selectedItem.uid));
294-
dialog.dismiss();
295-
break;
296-
case 2:
297-
if (isPlaylistThumbnailSet) {
298-
final String ur = "drawable://" + R.drawable.placeholder_thumbnail_playlist;
299-
localPlaylistManager.changePlaylistThumbnail(selectedItem.uid, ur,
300-
false).observeOn(AndroidSchedulers.mainThread()).subscribe();
301-
}
302-
break;
303-
}
304-
};
305-
306-
builder.setAdapter(arrayAdapter, action)
307-
.create()
308-
.show();
309315
}
310316

311317
private void showRenameDialog(final PlaylistMetadataEntry selectedItem) {

app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import androidx.annotation.Nullable;
44

5+
import org.schabi.newpipe.R;
56
import org.schabi.newpipe.database.AppDatabase;
67
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
78
import org.schabi.newpipe.database.playlist.PlaylistStreamEntry;
@@ -113,12 +114,18 @@ public boolean getIsPlaylistThumbnailSet(final long playlistId) {
113114
return playlistTable.getPlaylist(playlistId).blockingFirst().get(0).getIsThumbnailSet();
114115
}
115116

117+
public String getAutomaticPlaylistThumbnail(final long playlistId) {
118+
final String def = "drawable://" + R.drawable.placeholder_thumbnail_playlist;
119+
return playlistStreamTable.getAutomaticThumbnailUrl(playlistId, def).blockingFirst();
120+
}
121+
116122
private Maybe<Integer> modifyPlaylist(final long playlistId,
117123
@Nullable final String name,
118124
@Nullable final String thumbnailUrl,
119125
final boolean isPermanent) {
120126
return playlistTable.getPlaylist(playlistId)
121127
.firstElement()
128+
.filter(playlistEntities -> !playlistEntities.isEmpty())
122129
.map(playlistEntities -> {
123130
final PlaylistEntity playlist = playlistEntities.get(0);
124131
if (name != null) {

0 commit comments

Comments
 (0)