fix: Do not append query params quality=medium to videos that are about to premiere

Video premieres do not have `audio_streams` and they aren't `video.live_now == true` either,
therefore we skip the checks that are made for older videos (`if audio_streams.empty? && !video.live_now` closure)
if the video is a premiere.

This commit also adds the `microformat` field to the `info` instance
variable of the `Video` struct, since it's needed for the function
`Video#premiere_timestamp : Time?`. This is more like a quick fix than a
proper fix because in `Invidious::Videos::Parser#parse_video_info`,
`premiere_timestamp` is gathered from the `microformat` JSON Object but
is used to set the `published` hash key for the `params` variable.

The parsers and structs really need a rework :/
This commit is contained in:
Fijxu
2026-05-30 14:51:15 -04:00
parent 3a35552a66
commit 5cfc8dace8
2 changed files with 15 additions and 12 deletions

View File

@@ -129,6 +129,8 @@ module Invidious::Routes::Watch
video_streams = video.video_streams
audio_streams = video.audio_streams
# Videos that are a premiere do not have audio streams.
if !video.premiere_timestamp.nil?
# Older videos may not have audio sources available.
# We redirect here so they're not unplayable
if audio_streams.empty? && !video.live_now
@@ -142,6 +144,7 @@ module Invidious::Routes::Watch
return env.redirect "/watch?#{env.params.query}"
end
end
end
captions = video.captions

View File

@@ -109,7 +109,7 @@ module Invidious::Videos::Parser
params = self.parse_video_info(video_id, player_response)
params["reason"] = JSON::Any.new(reason) if reason
{"captions", "playabilityStatus", "playerConfig", "storyboards"}.each do |f|
{"captions", "playabilityStatus", "playerConfig", "storyboards", "microformat"}.each do |f|
params[f] = player_response[f] if player_response[f]?
end