Skip to content

Commit 76a02d5

Browse files
committed
[TeamNewPipe#11930] Extracting to a separate file
1 parent 24bb71a commit 76a02d5

File tree

3 files changed

+97
-79
lines changed

3 files changed

+97
-79
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package org.schabi.newpipe.local.playlist;
2+
3+
import static com.google.common.collect.Streams.stream;
4+
import static org.apache.commons.collections4.IterableUtils.reversedIterable;
5+
import static java.util.Collections.reverse;
6+
7+
import android.content.Context;
8+
9+
import org.schabi.newpipe.R;
10+
import org.schabi.newpipe.database.playlist.PlaylistStreamEntry;
11+
import org.schabi.newpipe.database.stream.model.StreamEntity;
12+
13+
import java.util.List;
14+
import java.util.Objects;
15+
import java.util.stream.Collectors;
16+
17+
import okhttp3.HttpUrl;
18+
19+
20+
21+
final class ExportPlaylist {
22+
23+
private ExportPlaylist() {
24+
}
25+
26+
static String export(final PlayListShareMode shareMode,
27+
final List<PlaylistStreamEntry> playlist,
28+
final Context context) {
29+
30+
return switch (shareMode) {
31+
32+
case WITH_TITLES -> exportWithTitles(playlist, context);
33+
case JUST_URLS -> exportJustUrls(playlist);
34+
case YOUTUBE_TEMP_PLAYLIST -> exportAsYoutubeTempPlaylist(playlist);
35+
};
36+
}
37+
38+
static String exportWithTitles(final List<PlaylistStreamEntry> playlist,
39+
final Context context) {
40+
41+
return playlist.stream()
42+
.map(PlaylistStreamEntry::getStreamEntity)
43+
.map(entity -> context.getString(R.string.video_details_list_item,
44+
entity.getTitle(),
45+
entity.getUrl()
46+
)
47+
)
48+
.collect(Collectors.joining("\n"));
49+
}
50+
51+
static String exportJustUrls(final List<PlaylistStreamEntry> playlist) {
52+
53+
return playlist.stream()
54+
.map(PlaylistStreamEntry::getStreamEntity)
55+
.map(StreamEntity::getUrl)
56+
.collect(Collectors.joining("\n"));
57+
}
58+
59+
static String exportAsYoutubeTempPlaylist(final List<PlaylistStreamEntry> playlist) {
60+
61+
final List<String> videoIDs =
62+
stream(reversedIterable(playlist))
63+
.map(PlaylistStreamEntry::getStreamEntity)
64+
.map(entity -> getYouTubeId(entity.getUrl()))
65+
.filter(Objects::nonNull)
66+
.limit(50)
67+
.collect(Collectors.toList());
68+
69+
reverse(videoIDs);
70+
71+
final String commaSeparatedVideoIDs = videoIDs.stream()
72+
.collect(Collectors.joining(","));
73+
74+
return "http://www.youtube.com/watch_videos?video_ids=" + commaSeparatedVideoIDs;
75+
}
76+
77+
/**
78+
* Gets the video id from a YouTube URL.
79+
*
80+
* @param url YouTube URL
81+
* @return the video id
82+
*/
83+
static String getYouTubeId(final String url) {
84+
85+
final HttpUrl httpUrl = HttpUrl.parse(url);
86+
87+
return httpUrl == null ? null
88+
: httpUrl.queryParameter("v");
89+
}
90+
}

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

+1-74
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package org.schabi.newpipe.local.playlist;
22

3-
import static com.google.common.collect.Streams.stream;
4-
import static org.apache.commons.collections4.IterableUtils.reversedIterable;
53
import static org.schabi.newpipe.error.ErrorUtil.showUiErrorSnackbar;
64
import static org.schabi.newpipe.ktx.ViewUtils.animate;
5+
import static org.schabi.newpipe.local.playlist.ExportPlaylist.export;
76
import static org.schabi.newpipe.local.playlist.PlayListShareMode.JUST_URLS;
87
import static org.schabi.newpipe.local.playlist.PlayListShareMode.WITH_TITLES;
98
import static org.schabi.newpipe.local.playlist.PlayListShareMode.YOUTUBE_TEMP_PLAYLIST;
109
import static org.schabi.newpipe.util.ThemeHelper.shouldUseGridLayout;
1110

12-
import static java.util.Collections.reverse;
1311

1412
import android.content.Context;
1513
import android.os.Bundle;
@@ -34,10 +32,6 @@
3432
import androidx.viewbinding.ViewBinding;
3533

3634
import com.evernote.android.state.State;
37-
import com.google.common.collect.Streams;
38-
39-
import org.apache.commons.collections4.IterableUtils;
40-
import org.apache.commons.collections4.queue.CircularFifoQueue;
4135
import org.reactivestreams.Subscriber;
4236
import org.reactivestreams.Subscription;
4337
import org.schabi.newpipe.NewPipeDatabase;
@@ -72,17 +66,14 @@
7266
import java.util.ArrayList;
7367
import java.util.Collections;
7468
import java.util.List;
75-
import java.util.Objects;
7669
import java.util.concurrent.atomic.AtomicBoolean;
7770
import java.util.stream.Collectors;
78-
import java.util.stream.Stream;
7971

8072
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
8173
import io.reactivex.rxjava3.core.Single;
8274
import io.reactivex.rxjava3.disposables.CompositeDisposable;
8375
import io.reactivex.rxjava3.disposables.Disposable;
8476
import io.reactivex.rxjava3.schedulers.Schedulers;
85-
import okhttp3.HttpUrl;
8677

8778
public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistStreamEntry>, Void>
8879
implements PlaylistControlViewHolder, DebounceSavable {
@@ -435,70 +426,6 @@ private void sharePlaylist(final PlayListShareMode shareMode) {
435426
);
436427
}
437428

438-
static String export(final PlayListShareMode shareMode,
439-
final List<PlaylistStreamEntry> playlist,
440-
final Context context) {
441-
442-
return switch (shareMode) {
443-
444-
case WITH_TITLES -> exportWithTitles(playlist, context);
445-
case JUST_URLS -> exportJustUrls(playlist);
446-
case YOUTUBE_TEMP_PLAYLIST -> exportAsYoutubeTempPlaylist(playlist);
447-
};
448-
}
449-
450-
static String exportWithTitles(final List<PlaylistStreamEntry> playlist, final Context context) {
451-
452-
return playlist.stream()
453-
.map(PlaylistStreamEntry::getStreamEntity)
454-
.map(entity -> context.getString(R.string.video_details_list_item,
455-
entity.getTitle(),
456-
entity.getUrl()
457-
)
458-
)
459-
.collect(Collectors.joining("\n"));
460-
}
461-
462-
static String exportJustUrls(final List<PlaylistStreamEntry> playlist) {
463-
464-
return playlist.stream()
465-
.map(PlaylistStreamEntry::getStreamEntity)
466-
.map(StreamEntity::getUrl)
467-
.collect(Collectors.joining("\n"));
468-
}
469-
470-
static String exportAsYoutubeTempPlaylist(final List<PlaylistStreamEntry> playlist) {
471-
472-
final List<String> videoIDs =
473-
stream(reversedIterable(playlist))
474-
.map(PlaylistStreamEntry::getStreamEntity)
475-
.map(entity -> getYouTubeId(entity.getUrl()))
476-
.filter(Objects::nonNull)
477-
.limit(50)
478-
.collect(Collectors.toList());
479-
480-
reverse(videoIDs);
481-
482-
final String commaSeparatedVideoIDs = videoIDs.stream()
483-
.collect(Collectors.joining(","));
484-
485-
return "http://www.youtube.com/watch_videos?video_ids=" + commaSeparatedVideoIDs;
486-
}
487-
488-
/**
489-
* Gets the video id from a YouTube URL.
490-
*
491-
* @param url YouTube URL
492-
* @return the video id
493-
*/
494-
static String getYouTubeId(final String url) {
495-
496-
final HttpUrl httpUrl = HttpUrl.parse(url);
497-
498-
return httpUrl == null ? null
499-
: httpUrl.queryParameter("v");
500-
}
501-
502429
public void removeWatchedStreams(final boolean removePartiallyWatched) {
503430
if (isRewritingPlaylist) {
504431
return;

app/src/test/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragmentTest.java app/src/test/java/org/schabi/newpipe/local/playlist/ExportPlaylistTest.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.schabi.newpipe.local.playlist;
22

3+
import static org.schabi.newpipe.local.playlist.ExportPlaylist.export;
34
import static org.schabi.newpipe.local.playlist.PlayListShareMode.JUST_URLS;
45
import static org.schabi.newpipe.local.playlist.PlayListShareMode.YOUTUBE_TEMP_PLAYLIST;
56

@@ -14,7 +15,7 @@
1415
import java.util.List;
1516
import java.util.stream.Stream;
1617

17-
public class LocalPlaylistFragmentTest {
18+
public class ExportPlaylistTest {
1819

1920
@Test
2021
public void exportAsYouTubeTempPlaylist() {
@@ -27,7 +28,7 @@ public void exportAsYouTubeTempPlaylist() {
2728
"https://www.youtube.com/watch?v=3"
2829
);
2930

30-
final String url = LocalPlaylistFragment.export(YOUTUBE_TEMP_PLAYLIST, playlist, null);
31+
final String url = export(YOUTUBE_TEMP_PLAYLIST, playlist, null);
3132

3233
Assert.assertEquals("http://www.youtube.com/watch_videos?video_ids=1,2,3", url);
3334
}
@@ -55,7 +56,7 @@ public void exportMoreThan50Items() {
5556
.map(id -> "https://www.youtube.com/watch?v=" + id)
5657
);
5758

58-
final String url = LocalPlaylistFragment.export(YOUTUBE_TEMP_PLAYLIST, playlist, null);
59+
final String url = export(YOUTUBE_TEMP_PLAYLIST, playlist, null);
5960

6061
Assert.assertEquals(
6162

@@ -80,7 +81,7 @@ public void exportJustUrls() {
8081
"https://www.youtube.com/watch?v=3"
8182
);
8283

83-
final String exported = LocalPlaylistFragment.export(JUST_URLS, playlist, null);
84+
final String exported = export(JUST_URLS, playlist, null);
8485

8586
Assert.assertEquals("""
8687
https://www.youtube.com/watch?v=1
@@ -98,7 +99,7 @@ static List<PlaylistStreamEntry> asPlaylist(final String... urls) {
9899
static List<PlaylistStreamEntry> asPlaylist(final Stream<String> urls) {
99100

100101
return urls
101-
.map(LocalPlaylistFragmentTest::newPlaylistStreamEntry)
102+
.map(ExportPlaylistTest::newPlaylistStreamEntry)
102103
.toList();
103104
}
104105

0 commit comments

Comments
 (0)