11package org .schabi .newpipe .local .playlist ;
22
3+ import static com .google .common .collect .Streams .stream ;
4+ import static org .apache .commons .collections4 .IterableUtils .reversedIterable ;
35import static org .schabi .newpipe .error .ErrorUtil .showUiErrorSnackbar ;
46import static org .schabi .newpipe .ktx .ViewUtils .animate ;
57import static org .schabi .newpipe .local .playlist .PlayListShareMode .JUST_URLS ;
68import static org .schabi .newpipe .local .playlist .PlayListShareMode .WITH_TITLES ;
79import static org .schabi .newpipe .local .playlist .PlayListShareMode .YOUTUBE_TEMP_PLAYLIST ;
810import static org .schabi .newpipe .util .ThemeHelper .shouldUseGridLayout ;
911
12+ import static java .util .Collections .reverse ;
13+
1014import android .content .Context ;
1115import android .os .Bundle ;
1216import android .os .Parcelable ;
3034import androidx .viewbinding .ViewBinding ;
3135
3236import com .evernote .android .state .State ;
37+ import com .google .common .collect .Streams ;
3338
39+ import org .apache .commons .collections4 .IterableUtils ;
3440import org .apache .commons .collections4 .queue .CircularFifoQueue ;
3541import org .reactivestreams .Subscriber ;
3642import org .reactivestreams .Subscription ;
@@ -408,7 +414,7 @@ private void sharePlaylist(final PlayListShareMode shareMode) {
408414 .flatMapSingle (playlist -> Single .just (export (
409415
410416 shareMode ,
411- playlist . stream (). map ( PlaylistStreamEntry :: getStreamEntity ) ,
417+ playlist ,
412418 context
413419 )))
414420 .observeOn (AndroidSchedulers .mainThread ())
@@ -430,20 +436,21 @@ private void sharePlaylist(final PlayListShareMode shareMode) {
430436 }
431437
432438 static String export (final PlayListShareMode shareMode ,
433- final Stream < StreamEntity > entityStream ,
439+ final List < PlaylistStreamEntry > playlist ,
434440 final Context context ) {
435441
436442 return switch (shareMode ) {
437443
438- case WITH_TITLES -> exportWithTitles (entityStream , context );
439- case JUST_URLS -> exportJustUrls (entityStream );
440- case YOUTUBE_TEMP_PLAYLIST -> exportAsYoutubeTempPlaylist (entityStream );
444+ case WITH_TITLES -> exportWithTitles (playlist , context );
445+ case JUST_URLS -> exportJustUrls (playlist );
446+ case YOUTUBE_TEMP_PLAYLIST -> exportAsYoutubeTempPlaylist (playlist );
441447 };
442448 }
443449
444- static String exportWithTitles (final Stream < StreamEntity > entityStream , final Context context ) {
450+ static String exportWithTitles (final List < PlaylistStreamEntry > playlist , final Context context ) {
445451
446- return entityStream
452+ return playlist .stream ()
453+ .map (PlaylistStreamEntry ::getStreamEntity )
447454 .map (entity -> context .getString (R .string .video_details_list_item ,
448455 entity .getTitle (),
449456 entity .getUrl ()
@@ -452,26 +459,30 @@ static String exportWithTitles(final Stream<StreamEntity> entityStream, final Co
452459 .collect (Collectors .joining ("\n " ));
453460 }
454461
455- static String exportJustUrls (final Stream < StreamEntity > entityStream ) {
462+ static String exportJustUrls (final List < PlaylistStreamEntry > playlist ) {
456463
457- return entityStream
464+ return playlist .stream ()
465+ .map (PlaylistStreamEntry ::getStreamEntity )
458466 .map (StreamEntity ::getUrl )
459467 .collect (Collectors .joining ("\n " ));
460468 }
461469
462- static String exportAsYoutubeTempPlaylist (final Stream <StreamEntity > entityStream ) {
463-
464- final CircularFifoQueue <String > last50 = new CircularFifoQueue <>(50 );
470+ static String exportAsYoutubeTempPlaylist (final List <PlaylistStreamEntry > playlist ) {
465471
466- entityStream
472+ final List <String > videoIDs =
473+ stream (reversedIterable (playlist ))
474+ .map (PlaylistStreamEntry ::getStreamEntity )
467475 .map (entity -> getYouTubeId (entity .getUrl ()))
468476 .filter (Objects ::nonNull )
469- .forEachOrdered (last50 ::add );
477+ .limit (50 )
478+ .collect (Collectors .toList ());
479+
480+ reverse (videoIDs );
470481
471- final String videoIDs = last50 .stream ()
472- .collect (Collectors .joining ("," ));
482+ final String commaSeparatedVideoIDs = videoIDs .stream ()
483+ .collect (Collectors .joining ("," ));
473484
474- return "http://www.youtube.com/watch_videos?video_ids=" + videoIDs ;
485+ return "http://www.youtube.com/watch_videos?video_ids=" + commaSeparatedVideoIDs ;
475486 }
476487
477488 /**
0 commit comments