summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2021-03-20 18:25:02 +0000
committerSamantaz Fox <coding@samantaz.fr>2021-03-21 15:43:49 +0100
commit89be1975ea6363b864eae1974c1e07fbdf90eeb4 (patch)
treead6f45c73feb8977bf45bd31f2706485224603c8 /src
parentfec82df4516c48e27ef12ed7e48faf7e9590d332 (diff)
downloadinvidious-89be1975ea6363b864eae1974c1e07fbdf90eeb4.tar.gz
invidious-89be1975ea6363b864eae1974c1e07fbdf90eeb4.tar.bz2
invidious-89be1975ea6363b864eae1974c1e07fbdf90eeb4.zip
Playlist: Fix continuation token generation
Diffstat (limited to 'src')
-rw-r--r--src/invidious/playlists.cr19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/invidious/playlists.cr b/src/invidious/playlists.cr
index feaed6de..71f8360d 100644
--- a/src/invidious/playlists.cr
+++ b/src/invidious/playlists.cr
@@ -307,23 +307,32 @@ def subscribe_playlist(db, user, playlist)
return playlist
end
-def produce_playlist_url(id, index)
+def produce_playlist_continuation(id, index)
if id.starts_with? "UC"
id = "UU" + id.lchop("UC")
end
plid = "VL" + id
+ # Emulate a "request counter" increment, to make perfectly valid
+ # ctokens, even if at the time of writing, it's ignored by youtube.
+ request_count = (index / 100).to_i64 || 1_i64
+
data = {"1:varint" => index.to_i64}
.try { |i| Protodec::Any.cast_json(i) }
.try { |i| Protodec::Any.from_json(i) }
.try { |i| Base64.urlsafe_encode(i, padding: false) }
+ data_wrapper = { "1:varint" => request_count, "15:string" => "PT:#{data}" }
+ .try { |i| Protodec::Any.cast_json(i) }
+ .try { |i| Protodec::Any.from_json(i) }
+ .try { |i| Base64.urlsafe_encode(i) }
+ .try { |i| URI.encode_www_form(i) }
+
object = {
"80226972:embedded" => {
"2:string" => plid,
- "3:base64" => {
- "15:string" => "PT:#{data}",
- },
+ "3:string" => data_wrapper,
+ "35:string" => id,
},
}
@@ -332,7 +341,7 @@ def produce_playlist_url(id, index)
.try { |i| Base64.urlsafe_encode(i) }
.try { |i| URI.encode_www_form(i) }
- return "/browse_ajax?continuation=#{continuation}&gl=US&hl=en"
+ return continuation
end
def get_playlist(db, plid, locale, refresh = true, force_refresh = false)