diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/PlaylistIdPrefix.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/PlaylistIdPrefix.java
index 456a56143..2197c3eaf 100644
--- a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/PlaylistIdPrefix.java
+++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/PlaylistIdPrefix.java
@@ -7,18 +7,19 @@ public enum PlaylistIdPrefix {
* To check all available prefixes,
* See this document.
*/
- ALL_CONTENTS_WITH_TIME_DESCENDING("UU"),
- ALL_CONTENTS_WITH_POPULAR_DESCENDING("PU"),
- VIDEOS_ONLY_WITH_TIME_DESCENDING("UULF"),
- VIDEOS_ONLY_WITH_POPULAR_DESCENDING("UULP"),
- SHORTS_ONLY_WITH_TIME_DESCENDING("UUSH"),
- SHORTS_ONLY_WITH_POPULAR_DESCENDING("UUPS"),
- LIVESTREAMS_ONLY_WITH_TIME_DESCENDING("UULV"),
- LIVESTREAMS_ONLY_WITH_POPULAR_DESCENDING("UUPV"),
- ALL_MEMBERSHIPS_CONTENTS("UUMO"),
- MEMBERSHIPS_VIDEOS_ONLY("UUMF"),
- MEMBERSHIPS_SHORTS_ONLY("UUMS"),
- MEMBERSHIPS_LIVESTREAMS_ONLY("UUMV");
+ ALL_CONTENTS_WITH_TIME_ASCENDING("UL", false),
+ ALL_CONTENTS_WITH_TIME_DESCENDING("UU", true),
+ ALL_CONTENTS_WITH_POPULAR_DESCENDING("PU", true),
+ VIDEOS_ONLY_WITH_TIME_DESCENDING("UULF", true),
+ VIDEOS_ONLY_WITH_POPULAR_DESCENDING("UULP", true),
+ SHORTS_ONLY_WITH_TIME_DESCENDING("UUSH", true),
+ SHORTS_ONLY_WITH_POPULAR_DESCENDING("UUPS", true),
+ LIVESTREAMS_ONLY_WITH_TIME_DESCENDING("UULV", true),
+ LIVESTREAMS_ONLY_WITH_POPULAR_DESCENDING("UUPV", true),
+ ALL_MEMBERSHIPS_CONTENTS("UUMO", true),
+ MEMBERSHIPS_VIDEOS_ONLY("UUMF", true),
+ MEMBERSHIPS_SHORTS_ONLY("UUMS", true),
+ MEMBERSHIPS_LIVESTREAMS_ONLY("UUMV", true);
/**
* Prefix of playlist id.
@@ -26,7 +27,13 @@ public enum PlaylistIdPrefix {
@NonNull
public final String prefixId;
- PlaylistIdPrefix(@NonNull String prefixId) {
+ /**
+ * Whether to use channelId.
+ */
+ public final boolean useChannelId;
+
+ PlaylistIdPrefix(@NonNull String prefixId, boolean useChannelId) {
this.prefixId = prefixId;
+ this.useChannelId = useChannelId;
}
}
diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/utils/VideoUtils.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/utils/VideoUtils.java
index 686e105fd..371f0645a 100644
--- a/extensions/shared/src/main/java/app/revanced/extension/youtube/utils/VideoUtils.java
+++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/utils/VideoUtils.java
@@ -7,7 +7,6 @@ import static app.revanced.extension.youtube.patches.video.PlaybackSpeedPatch.us
import android.app.AlertDialog;
import android.content.Context;
import android.media.AudioManager;
-import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull;
@@ -128,34 +127,37 @@ public class VideoUtils extends IntentUtils {
}
public static void openVideo(@NonNull String videoId) {
- openVideo(getVideoScheme(videoId, false), "");
+ openVideo(getVideoScheme(videoId, false), false, null);
}
public static void openVideo(@NonNull String videoId, boolean isShorts) {
- openVideo(getVideoScheme(videoId, isShorts), "");
+ openVideo(getVideoScheme(videoId, isShorts), isShorts, null);
}
- public static void openVideo(@NonNull PlaylistIdPrefix prefixId) {
- openVideo(getVideoScheme(), prefixId.prefixId);
+ public static void openVideo(@NonNull PlaylistIdPrefix playlistIdPrefix) {
+ openVideo(getVideoScheme(), false, playlistIdPrefix);
}
- /**
- * Create playlist with all channel videos.
- */
- public static void openVideo(@NonNull String videoScheme, @NonNull String prefixId) {
- if (!TextUtils.isEmpty(prefixId)) {
- final String channelId = VideoInformation.getChannelId();
- // Channel id always starts with `UC` prefix
- if (!channelId.startsWith("UC")) {
- showToastShort(str("revanced_overlay_button_play_all_not_available_toast"));
- return;
+ public static void openVideo(@NonNull String videoId, boolean isShorts, @Nullable PlaylistIdPrefix playlistIdPrefix) {
+ final StringBuilder sb = new StringBuilder(getVideoScheme(videoId, isShorts));
+ // Create playlist with all channel videos.
+ if (playlistIdPrefix != null) {
+ sb.append("&list=");
+ sb.append(playlistIdPrefix.prefixId);
+ if (playlistIdPrefix.useChannelId) {
+ final String channelId = VideoInformation.getChannelId();
+ // Channel id always starts with `UC` prefix
+ if (!channelId.startsWith("UC")) {
+ showToastShort(str("revanced_overlay_button_play_all_not_available_toast"));
+ return;
+ }
+ sb.append(channelId.substring(2));
+ } else {
+ sb.append(videoId);
}
- videoScheme += "&list=" + prefixId + channelId.substring(2);
}
- final String finalVideoScheme = videoScheme;
- Logger.printInfo(() -> finalVideoScheme);
- launchView(videoScheme, getContext().getPackageName());
+ launchView(sb.toString(), getContext().getPackageName());
}
/**
diff --git a/patches/src/main/resources/youtube/settings/host/values/arrays.xml b/patches/src/main/resources/youtube/settings/host/values/arrays.xml
index 41b3ffd44..8420fed1d 100644
--- a/patches/src/main/resources/youtube/settings/host/values/arrays.xml
+++ b/patches/src/main/resources/youtube/settings/host/values/arrays.xml
@@ -136,6 +136,7 @@
- https://github.com/deniscerri/ytdlnis/releases/latest
+ - @string/revanced_overlay_button_play_all_type_entry_0
- @string/revanced_overlay_button_play_all_type_entry_1
- @string/revanced_overlay_button_play_all_type_entry_2
- @string/revanced_overlay_button_play_all_type_entry_3
@@ -150,6 +151,7 @@
- @string/revanced_overlay_button_play_all_type_entry_12
+ - ALL_CONTENTS_WITH_TIME_ASCENDING
- ALL_CONTENTS_WITH_TIME_DESCENDING
- ALL_CONTENTS_WITH_POPULAR_DESCENDING
- VIDEOS_ONLY_WITH_TIME_DESCENDING
diff --git a/patches/src/main/resources/youtube/settings/host/values/strings.xml b/patches/src/main/resources/youtube/settings/host/values/strings.xml
index 3d09c0b93..bc871b68b 100644
--- a/patches/src/main/resources/youtube/settings/host/values/strings.xml
+++ b/patches/src/main/resources/youtube/settings/host/values/strings.xml
@@ -1057,6 +1057,7 @@ Tap and hold to undo.
Info:
• May not work on livestreams."
Generate playlist mode
+ All contents (Sort by time, Ascending)
All contents (Sort by time)
All contents (Sort by popular)
Videos only (Sort by time)
@@ -1948,4 +1949,4 @@ AVC (H.264) has a maximum resolution of 1080p, and video playback will use more
Excluded
Included
Stock
-
\ No newline at end of file
+