From 4ec99d78984f63ac972468cc2ac0cc4ad8b6a518 Mon Sep 17 00:00:00 2001 From: sergiobuilds Date: Wed, 12 Aug 2026 01:54:03 +0900 Subject: [PATCH] Fix inconsistent page param behavior for YouTube playlists in APIv1 --- src/invidious/routes/api/v1/misc.cr | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/invidious/routes/api/v1/misc.cr b/src/invidious/routes/api/v1/misc.cr index 4ae877a8..071f8a84 100644 --- a/src/invidious/routes/api/v1/misc.cr +++ b/src/invidious/routes/api/v1/misc.cr @@ -33,10 +33,6 @@ module Invidious::Routes::API::V1::Misc env.response.content_type = "application/json" plid = env.params.url["plid"] - offset = env.params.query["index"]?.try &.to_i? - offset ||= env.params.query["page"]?.try &.to_i?.try { |page| (page - 1) * 100 } - offset ||= 0 - video_id = env.params.query["continuation"]? format = env.params.query["format"]? @@ -57,6 +53,19 @@ module Invidious::Routes::API::V1::Misc return error_json(404, "Playlist does not exist.") end + offset = env.params.query["index"]?.try &.to_i? + if offset.nil? + page = env.params.query["page"]?.try &.to_i? + if page + if playlist.is_a? InvidiousPlaylist + offset = (page - 1) * 100 + else + offset = (page - 1) * 200 + end + end + end + offset ||= 0 + user = env.get?("user").try &.as(User) if !playlist || playlist.privacy.private? && playlist.author != user.try &.email return error_json(404, "Playlist does not exist.")