Skip to content

Commit 5b10a93

Browse files
committed
Embed actions impls inside LongPressAction when possible
... and add TODO comments for the `onDelete` implementations, which will be embeddable only after migrating the list fragments to Compose. Also remove incomplete and misleading toStreamInfoItem() implementations in StreamStatisticsEntry and PlaylistStreamEntry. Now one has to do statisticsEntry.streamEntry.toStreamInfoItem() instead, making it clear that the call only uses data from streamEntry.
1 parent d561444 commit 5b10a93

11 files changed

Lines changed: 136 additions & 139 deletions

File tree

app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,4 @@ data class PlaylistStreamEntry(
3131

3232
override val localItemType: LocalItem.LocalItemType
3333
get() = LocalItem.LocalItemType.PLAYLIST_STREAM_ITEM
34-
35-
@Throws(IllegalArgumentException::class)
36-
fun toStreamInfoItem(): StreamInfoItem {
37-
return StreamInfoItem(
38-
streamEntity.serviceId,
39-
streamEntity.url,
40-
streamEntity.title,
41-
streamEntity.streamType
42-
).apply {
43-
duration = streamEntity.duration
44-
uploaderName = streamEntity.uploader
45-
uploaderUrl = streamEntity.uploaderUrl
46-
thumbnails = ImageStrategy.dbUrlToImageList(streamEntity.thumbnailUrl)
47-
}
48-
}
4934
}

app/src/main/java/org/schabi/newpipe/database/stream/StreamStatisticsEntry.kt

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,6 @@ data class StreamStatisticsEntry(
3737
override val localItemType: LocalItem.LocalItemType
3838
get() = LocalItem.LocalItemType.STATISTIC_STREAM_ITEM
3939

40-
@Ignore
41-
fun toStreamInfoItem(): StreamInfoItem {
42-
return StreamInfoItem(
43-
streamEntity.serviceId,
44-
streamEntity.url,
45-
streamEntity.title,
46-
streamEntity.streamType
47-
).apply {
48-
duration = streamEntity.duration
49-
uploaderName = streamEntity.uploader
50-
uploaderUrl = streamEntity.uploaderUrl
51-
thumbnails = ImageStrategy.dbUrlToImageList(streamEntity.thumbnailUrl)
52-
}
53-
}
54-
5540
companion object {
5641
const val STREAM_LATEST_DATE = "latestAccess"
5742
const val STREAM_WATCH_COUNT = "watchCount"

app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ public void held(final ChannelInfoItem selectedItem) {
297297
openLongPressMenuInActivity(
298298
requireActivity(),
299299
LongPressable.fromChannelInfoItem(selectedItem),
300-
LongPressAction.fromChannelInfoItem(selectedItem, null)
300+
LongPressAction.fromChannelInfoItem(selectedItem, false)
301301
);
302302
}
303303
});

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

Lines changed: 6 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66

77
import android.os.Bundle;
88
import android.os.Parcelable;
9-
import android.text.InputType;
10-
import android.util.Log;
119
import android.util.Pair;
1210
import android.view.LayoutInflater;
1311
import android.view.View;
@@ -32,7 +30,6 @@
3230
import org.schabi.newpipe.database.playlist.PlaylistLocalItem;
3331
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
3432
import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
35-
import org.schabi.newpipe.databinding.DialogEditTextBinding;
3633
import org.schabi.newpipe.error.ErrorInfo;
3734
import org.schabi.newpipe.error.UserAction;
3835
import org.schabi.newpipe.local.BaseLocalListFragment;
@@ -55,7 +52,6 @@
5552

5653
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
5754
import io.reactivex.rxjava3.disposables.CompositeDisposable;
58-
import io.reactivex.rxjava3.disposables.Disposable;
5955

6056
public final class BookmarkFragment extends BaseLocalListFragment<List<PlaylistLocalItem>, Void>
6157
implements DebounceSavable {
@@ -323,25 +319,6 @@ protected void resetFragment() {
323319
// Playlist Metadata Manipulation
324320
//////////////////////////////////////////////////////////////////////////*/
325321

326-
private void changeLocalPlaylistName(final long id, final String name) {
327-
if (localPlaylistManager == null) {
328-
return;
329-
}
330-
331-
if (DEBUG) {
332-
Log.d(TAG, "Updating playlist id=[" + id + "] "
333-
+ "with new name=[" + name + "] items");
334-
}
335-
336-
final Disposable disposable = localPlaylistManager.renamePlaylist(id, name)
337-
.observeOn(AndroidSchedulers.mainThread())
338-
.subscribe(longs -> { /*Do nothing on success*/ }, throwable -> showError(
339-
new ErrorInfo(throwable,
340-
UserAction.REQUESTED_BOOKMARK,
341-
"Changing playlist name")));
342-
disposables.add(disposable);
343-
}
344-
345322
private void deleteItem(final PlaylistLocalItem item) {
346323
if (itemListAdapter == null) {
347324
return;
@@ -501,44 +478,27 @@ private void showRemoteDialog(final PlaylistRemoteEntity item) {
501478
LongPressable.fromPlaylistRemoteEntity(item),
502479
LongPressAction.fromPlaylistRemoteEntity(
503480
item,
481+
// TODO passing this parameter is bad and should be fixed when migrating the
482+
// bookmark fragment to Compose, for more info see method javadoc
504483
() -> showDeleteDialog(item.getOrderingName(), item)
505484
)
506485
);
507486
}
508487

509488
private void showLocalDialog(final PlaylistMetadataEntry selectedItem) {
510-
final boolean isThumbnailPermanent = localPlaylistManager
511-
.getIsPlaylistThumbnailPermanent(selectedItem.getUid());
512-
513489
openLongPressMenuInActivity(
514490
requireActivity(),
515491
LongPressable.fromPlaylistMetadataEntry(selectedItem),
516492
LongPressAction.fromPlaylistMetadataEntry(
517493
selectedItem,
518-
() -> showRenameDialog(selectedItem),
519-
() -> showDeleteDialog(selectedItem.getOrderingName(), selectedItem),
520-
isThumbnailPermanent ? () -> unsetPermanentThumbnail(selectedItem) : null
494+
localPlaylistManager.getIsPlaylistThumbnailPermanent(selectedItem.getUid()),
495+
// TODO passing this parameter is bad and should be fixed when migrating the
496+
// bookmark fragment to Compose, for more info see method javadoc
497+
() -> showDeleteDialog(selectedItem.getOrderingName(), selectedItem)
521498
)
522499
);
523500
}
524501

525-
private void showRenameDialog(final PlaylistMetadataEntry selectedItem) {
526-
final DialogEditTextBinding dialogBinding =
527-
DialogEditTextBinding.inflate(getLayoutInflater());
528-
dialogBinding.dialogEditText.setHint(R.string.name);
529-
dialogBinding.dialogEditText.setInputType(InputType.TYPE_CLASS_TEXT);
530-
dialogBinding.dialogEditText.setText(selectedItem.getOrderingName());
531-
532-
new AlertDialog.Builder(activity)
533-
.setView(dialogBinding.getRoot())
534-
.setPositiveButton(R.string.rename_playlist, (dialog, which) ->
535-
changeLocalPlaylistName(
536-
selectedItem.getUid(),
537-
dialogBinding.dialogEditText.getText().toString()))
538-
.setNegativeButton(R.string.cancel, null)
539-
.show();
540-
}
541-
542502
private void showDeleteDialog(final String name, final PlaylistLocalItem item) {
543503
if (activity == null || disposables == null) {
544504
return;
@@ -552,13 +512,4 @@ private void showDeleteDialog(final String name, final PlaylistLocalItem item) {
552512
.setNegativeButton(R.string.cancel, null)
553513
.show();
554514
}
555-
556-
private void unsetPermanentThumbnail(final PlaylistMetadataEntry item) {
557-
final long thumbnailStreamId = localPlaylistManager
558-
.getAutomaticPlaylistThumbnailStreamId(item.getUid());
559-
localPlaylistManager
560-
.changePlaylistThumbnail(item.getUid(), thumbnailStreamId, false)
561-
.observeOn(AndroidSchedulers.mainThread())
562-
.subscribe();
563-
}
564515
}

app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,8 +336,8 @@ private PlayQueue getPlayQueue(final int index) {
336336
final List<LocalItem> infoItems = itemListAdapter.getItemsList();
337337
final List<StreamInfoItem> streamInfoItems = new ArrayList<>(infoItems.size());
338338
for (final LocalItem item : infoItems) {
339-
if (item instanceof StreamStatisticsEntry) {
340-
streamInfoItems.add(((StreamStatisticsEntry) item).toStreamInfoItem());
339+
if (item instanceof StreamStatisticsEntry streamStatisticsEntry) {
340+
streamInfoItems.add(streamStatisticsEntry.getStreamEntity().toStreamInfoItem());
341341
}
342342
}
343343
return new SinglePlayQueue(streamInfoItems, index);

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

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,9 @@ public void removeWatchedStreams(final boolean removePartiallyWatched) {
451451
final var streamStateEntity = streamStates.get(i);
452452
final int indexInHistory = Collections.binarySearch(historyStreamIds,
453453
playlistItem.getStreamId());
454-
final long duration = playlistItem.toStreamInfoItem().getDuration();
454+
final long duration = playlistItem.getStreamEntity()
455+
.toStreamInfoItem()
456+
.getDuration();
455457

456458
if (indexInHistory < 0 // stream is not in history
457459
// stream is in history but the streamStateEntity is null
@@ -582,9 +584,9 @@ private void changePlaylistName(final String title) {
582584
disposables.add(disposable);
583585
}
584586

585-
private void changeThumbnailStreamId(final long thumbnailStreamId, final boolean isPermanent) {
586-
if (playlistManager == null || (!isPermanent && playlistManager
587-
.getIsPlaylistThumbnailPermanent(playlistId))) {
587+
private void changeThumbnailStreamIdIfNotPermanent(final long thumbnailStreamId) {
588+
if (playlistManager == null
589+
|| playlistManager.getIsPlaylistThumbnailPermanent(playlistId)) {
588590
return;
589591
}
590592

@@ -598,7 +600,7 @@ private void changeThumbnailStreamId(final long thumbnailStreamId, final boolean
598600
}
599601

600602
final Disposable disposable = playlistManager
601-
.changePlaylistThumbnail(playlistId, thumbnailStreamId, isPermanent)
603+
.changePlaylistThumbnail(playlistId, thumbnailStreamId, false)
602604
.observeOn(AndroidSchedulers.mainThread())
603605
.subscribe(ignore -> successToast.show(), throwable ->
604606
showError(new ErrorInfo(throwable, UserAction.REQUESTED_BOOKMARK,
@@ -620,7 +622,7 @@ private void updateThumbnailUrl() {
620622
thumbnailStreamId = PlaylistEntity.DEFAULT_THUMBNAIL_ID;
621623
}
622624

623-
changeThumbnailStreamId(thumbnailStreamId, false);
625+
changeThumbnailStreamIdIfNotPermanent(thumbnailStreamId);
624626
}
625627

626628
private void openRemoveDuplicatesDialog() {
@@ -796,8 +798,10 @@ protected void showInfoItemDialog(final PlaylistStreamEntry item) {
796798
LongPressAction.fromPlaylistStreamEntry(
797799
item,
798800
() -> getPlayQueueStartingAt(item),
799-
() -> deleteItem(item),
800-
() -> changeThumbnailStreamId(item.getStreamEntity().getUid(), true)
801+
playlistId,
802+
// TODO passing this parameter is bad and should be fixed when migrating the
803+
// local playlist fragment to Compose, for more info see method javadoc
804+
() -> deleteItem(item)
801805
)
802806
);
803807
}
@@ -838,8 +842,8 @@ private PlayQueue getPlayQueue(final int index) {
838842
final List<LocalItem> infoItems = itemListAdapter.getItemsList();
839843
final List<StreamInfoItem> streamInfoItems = new ArrayList<>(infoItems.size());
840844
for (final LocalItem item : infoItems) {
841-
if (item instanceof PlaylistStreamEntry) {
842-
streamInfoItems.add(((PlaylistStreamEntry) item).toStreamInfoItem());
845+
if (item instanceof PlaylistStreamEntry playlistStreamEntry) {
846+
streamInfoItems.add(playlistStreamEntry.getStreamEntity().toStreamInfoItem());
843847
}
844848
}
845849
return new SinglePlayQueue(streamInfoItems, index);

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -151,13 +151,9 @@ public boolean getIsPlaylistThumbnailPermanent(final long playlistId) {
151151
.isThumbnailPermanent();
152152
}
153153

154-
public long getAutomaticPlaylistThumbnailStreamId(final long playlistId) {
155-
final long streamId = playlistStreamTable.getAutomaticThumbnailStreamId(playlistId)
156-
.blockingFirst();
157-
if (streamId < 0) {
158-
return PlaylistEntity.DEFAULT_THUMBNAIL_ID;
159-
}
160-
return streamId;
154+
public Flowable<Long> getAutomaticPlaylistThumbnailStreamId(final long playlistId) {
155+
return playlistStreamTable.getAutomaticThumbnailStreamId(playlistId)
156+
.map(streamId -> (streamId >= 0 ? streamId : PlaylistEntity.DEFAULT_THUMBNAIL_ID));
161157
}
162158

163159
private Maybe<Integer> modifyPlaylist(final long playlistId,

app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -336,18 +336,7 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
336336
openLongPressMenuInActivity(
337337
requireActivity(),
338338
LongPressable.fromChannelInfoItem(selectedItem),
339-
LongPressAction.fromChannelInfoItem(
340-
item = selectedItem,
341-
onUnsubscribe = { deleteChannel(selectedItem) }
342-
)
343-
)
344-
}
345-
346-
private fun deleteChannel(selectedItem: ChannelInfoItem) {
347-
disposables.add(
348-
subscriptionManager.deleteSubscription(selectedItem.serviceId, selectedItem.url).subscribe {
349-
Toast.makeText(requireContext(), getString(R.string.channel_unsubscribed), Toast.LENGTH_SHORT).show()
350-
}
339+
LongPressAction.fromChannelInfoItem(selectedItem, true)
351340
)
352341
}
353342

app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserPlaybackPreparer.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,9 @@ class MediaBrowserPlaybackPreparer(
127127
//region Building play queues from playlists and history
128128
private fun extractLocalPlayQueue(playlistId: Long, index: Int): Single<PlayQueue> {
129129
return LocalPlaylistManager(database).getPlaylistStreams(playlistId).firstOrError()
130-
.map { items -> SinglePlayQueue(items.map { it.toStreamInfoItem() }, index) }
130+
.map { items ->
131+
SinglePlayQueue(items.map { it.streamEntity.toStreamInfoItem() }, index)
132+
}
131133
}
132134

133135
private fun extractRemotePlayQueue(playlistId: Long, index: Int): Single<PlayQueue> {

app/src/main/java/org/schabi/newpipe/player/playqueue/LocalPlaylistPlayQueue.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class LocalPlaylistPlayQueue(info: PlaylistMetadataEntry) : PlayQueue(0, listOf(
2828
.observeOn(AndroidSchedulers.mainThread())
2929
.subscribe(
3030
{ streamEntries ->
31-
append(streamEntries.map { PlayQueueItem(it.toStreamInfoItem()) })
31+
append(streamEntries.map { PlayQueueItem(it.streamEntity.toStreamInfoItem()) })
3232
},
3333
{ e ->
3434
Log.e(TAG, "Error fetching local playlist", e)

0 commit comments

Comments
 (0)