summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2023-08-26 12:15:04 +0200
committerSamantaz Fox <coding@samantaz.fr>2023-08-26 12:15:04 +0200
commitac0c0609bb8b652e630c3603cd9dbb1c87fbdf44 (patch)
tree10484e1690646de8c890726b44b62a87f38735c3 /src
parent7e84d07c27a51c560f2788e8349bd9e90d8f2a16 (diff)
parent2b36d3b419d04fd4fc46e97e03a4c3af7285b663 (diff)
downloadinvidious-ac0c0609bb8b652e630c3603cd9dbb1c87fbdf44.tar.gz
invidious-ac0c0609bb8b652e630c3603cd9dbb1c87fbdf44.tar.bz2
invidious-ac0c0609bb8b652e630c3603cd9dbb1c87fbdf44.zip
Add workaround for storyboards on local instances (#4040)
Diffstat (limited to 'src')
-rw-r--r--src/invidious/routes/errors.cr5
-rw-r--r--src/invidious/videos/parser.cr7
2 files changed, 9 insertions, 3 deletions
diff --git a/src/invidious/routes/errors.cr b/src/invidious/routes/errors.cr
index b138b562..1e9ab44e 100644
--- a/src/invidious/routes/errors.cr
+++ b/src/invidious/routes/errors.cr
@@ -1,5 +1,10 @@
module Invidious::Routes::ErrorRoutes
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+))$/)
item = md["id"]
diff --git a/src/invidious/videos/parser.cr b/src/invidious/videos/parser.cr
index 2a09d187..06ff96b1 100644
--- a/src/invidious/videos/parser.cr
+++ b/src/invidious/videos/parser.cr
@@ -55,9 +55,7 @@ def extract_video_info(video_id : String, proxy_region : String? = nil)
client_config = YoutubeAPI::ClientConfig.new(proxy_region: proxy_region)
# Fetch data from the player endpoint
- # CgIQBg is a workaround for streaming URLs that returns a 403.
- # 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)
+ player_response = YoutubeAPI.player(video_id: video_id, params: "", client_config: client_config)
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
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
params.delete("reason")
end