diff options
| author | Samantaz Fox <coding@samantaz.fr> | 2021-03-20 18:25:02 +0000 |
|---|---|---|
| committer | Samantaz Fox <coding@samantaz.fr> | 2021-03-21 15:43:49 +0100 |
| commit | 89be1975ea6363b864eae1974c1e07fbdf90eeb4 (patch) | |
| tree | ad6f45c73feb8977bf45bd31f2706485224603c8 | |
| parent | fec82df4516c48e27ef12ed7e48faf7e9590d332 (diff) | |
| download | invidious-89be1975ea6363b864eae1974c1e07fbdf90eeb4.tar.gz invidious-89be1975ea6363b864eae1974c1e07fbdf90eeb4.tar.bz2 invidious-89be1975ea6363b864eae1974c1e07fbdf90eeb4.zip | |
Playlist: Fix continuation token generation
| -rw-r--r-- | src/invidious/playlists.cr | 19 |
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) |
