summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2022-02-01 21:40:06 +0100
committerSamantaz Fox <coding@samantaz.fr>2022-02-02 00:41:02 +0100
commit4e44a91d08e45103536235030407c871b3ec5082 (patch)
tree63fb391b87612c58cd3fd44944c693d94919000e
parentfc5f84a0cd34d085c44a8fa28245883e47ef5bcf (diff)
downloadinvidious-4e44a91d08e45103536235030407c871b3ec5082.tar.gz
invidious-4e44a91d08e45103536235030407c871b3ec5082.tar.bz2
invidious-4e44a91d08e45103536235030407c871b3ec5082.zip
Add support for clips
-rw-r--r--src/invidious.cr1
-rw-r--r--src/invidious/routes/watch.cr15
2 files changed, 16 insertions, 0 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index b09f31c2..f4cae7ea 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -339,6 +339,7 @@ end
Invidious::Routing.post "/watch_ajax", Invidious::Routes::Watch, :mark_watched
Invidious::Routing.get "/watch/:id", Invidious::Routes::Watch, :redirect
Invidious::Routing.get "/shorts/:id", Invidious::Routes::Watch, :redirect
+ Invidious::Routing.get "/clip/:clip", Invidious::Routes::Watch, :clip
Invidious::Routing.get "/w/:id", Invidious::Routes::Watch, :redirect
Invidious::Routing.get "/v/:id", Invidious::Routes::Watch, :redirect
Invidious::Routing.get "/e/:id", Invidious::Routes::Watch, :redirect
diff --git a/src/invidious/routes/watch.cr b/src/invidious/routes/watch.cr
index 7d048ce8..42bc4219 100644
--- a/src/invidious/routes/watch.cr
+++ b/src/invidious/routes/watch.cr
@@ -266,4 +266,19 @@ module Invidious::Routes::Watch
"{}"
end
end
+
+ def self.clip(env)
+ clip_id = env.params.url["clip"]?
+
+ return error_template(400, "A clip ID is required") if !clip_id
+
+ response = YoutubeAPI.resolve_url("https://www.youtube.com/clip/#{clip_id}")
+ return error_template(400, "Invalid clip ID") if response["error"]?
+
+ if video_id = response.dig?("endpoint", "watchEndpoint", "videoId")
+ return env.redirect "/watch?v=#{video_id}&#{env.params.query}"
+ else
+ return error_template(404, "The requested clip doesn't exist")
+ end
+ end
end