Fix empty query separator in playlist RSS links

This commit is contained in:
criticalconnections 2026-05-11 07:48:41 -04:00
parent f914ce8040
commit 56f8935f75
3 changed files with 36 additions and 2 deletions

View File

@ -0,0 +1,26 @@
require "../../spec_helper"
Spectator.describe "Feeds" do
describe "#add_video_query_params" do
it "does not append an empty query separator" do
request_target = "/watch?v=7uQOBLCcp3I"
params = HTTP::Params.parse("")
expect(add_video_query_params(request_target, params)).to eq(request_target)
end
it "appends non-empty params to watch links" do
request_target = "/watch?v=7uQOBLCcp3I"
params = HTTP::Params.parse("listen=1")
expect(add_video_query_params(request_target, params)).to eq("#{request_target}&listen=1")
end
it "leaves non-watch links unchanged" do
request_target = "/vi/7uQOBLCcp3I/hqdefault.jpg"
params = HTTP::Params.parse("listen=1")
expect(add_video_query_params(request_target, params)).to eq(request_target)
end
end
end

View File

@ -273,6 +273,15 @@ def get_referer(env, fallback = "/", unroll = true)
return referer
end
def add_video_query_params(request_target : String, params : HTTP::Params) : String
params = params.to_s
return request_target unless request_target.starts_with?("/watch?v=")
return request_target if params.empty?
"#{request_target}&#{params}"
end
def sha256(text)
digest = OpenSSL::Digest.new("SHA256")
digest << text

View File

@ -320,8 +320,7 @@ module Invidious::Routes::Feeds
case attribute.name
when "url", "href"
request_target = URI.parse(node[attribute.name]).request_target
query_string_opt = request_target.starts_with?("/watch?v=") ? "&#{params}" : ""
node[attribute.name] = "#{HOST_URL}#{request_target}#{query_string_opt}"
node[attribute.name] = "#{HOST_URL}#{add_video_query_params(request_target, params)}"
else nil # Skip
end
end