Add workaround for storyboards on local instances (#4040)
This commit is contained in:
commit
ac0c0609bb
2 changed files with 9 additions and 3 deletions
|
@ -1,5 +1,10 @@
|
||||||
module Invidious::Routes::ErrorRoutes
|
module Invidious::Routes::ErrorRoutes
|
||||||
def self.error_404(env)
|
def self.error_404(env)
|
||||||
|
# Workaround for #3117
|
||||||
|
if HOST_URL.empty? && env.request.path.starts_with?("/v1/storyboards/sb")
|
||||||
|
return env.redirect "#{env.request.path[15..]}?#{env.params.query}"
|
||||||
|
end
|
||||||
|
|
||||||
if md = env.request.path.match(/^\/(?<id>([a-zA-Z0-9_-]{11})|(\w+))$/)
|
if md = env.request.path.match(/^\/(?<id>([a-zA-Z0-9_-]{11})|(\w+))$/)
|
||||||
item = md["id"]
|
item = md["id"]
|
||||||
|
|
||||||
|
|
|
@ -55,9 +55,7 @@ def extract_video_info(video_id : String, proxy_region : String? = nil)
|
||||||
client_config = YoutubeAPI::ClientConfig.new(proxy_region: proxy_region)
|
client_config = YoutubeAPI::ClientConfig.new(proxy_region: proxy_region)
|
||||||
|
|
||||||
# Fetch data from the player endpoint
|
# Fetch data from the player endpoint
|
||||||
# CgIQBg is a workaround for streaming URLs that returns a 403.
|
player_response = YoutubeAPI.player(video_id: video_id, params: "", client_config: client_config)
|
||||||
# See https://github.com/iv-org/invidious/issues/4027#issuecomment-1666944520
|
|
||||||
player_response = YoutubeAPI.player(video_id: video_id, params: "CgIQBg", client_config: client_config)
|
|
||||||
|
|
||||||
playability_status = player_response.dig?("playabilityStatus", "status").try &.as_s
|
playability_status = player_response.dig?("playabilityStatus", "status").try &.as_s
|
||||||
|
|
||||||
|
@ -120,6 +118,9 @@ def extract_video_info(video_id : String, proxy_region : String? = nil)
|
||||||
|
|
||||||
# Replace player response and reset reason
|
# Replace player response and reset reason
|
||||||
if !new_player_response.nil?
|
if !new_player_response.nil?
|
||||||
|
# Preserve storyboard data before replacement
|
||||||
|
new_player_response["storyboards"] = player_response["storyboards"] if player_response["storyboards"]?
|
||||||
|
|
||||||
player_response = new_player_response
|
player_response = new_player_response
|
||||||
params.delete("reason")
|
params.delete("reason")
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue