-
Notifications
You must be signed in to change notification settings - Fork 43
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
132 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
From 49b9316b9f2e9ccc6921a2f293abacb37f9805f6 Mon Sep 17 00:00:00 2001 | ||
From: Samantaz Fox <[email protected]> | ||
Date: Wed, 13 Sep 2023 23:40:20 +0200 | ||
Subject: [PATCH 1/2] Routing: Handle current and future routes more nicely | ||
|
||
--- | ||
src/invidious/routes/channels.cr | 19 +++++++++++++---- | ||
src/invidious/routing.cr | 36 +++++++++++++++++++++----------- | ||
2 files changed, 39 insertions(+), 16 deletions(-) | ||
|
||
diff --git a/src/invidious/routes/channels.cr b/src/invidious/routes/channels.cr | ||
index 9892ae2a..5500672f 100644 | ||
--- a/src/invidious/routes/channels.cr | ||
+++ b/src/invidious/routes/channels.cr | ||
@@ -217,6 +217,11 @@ module Invidious::Routes::Channels | ||
env.redirect "/channel/#{ucid}" | ||
end | ||
|
||
+ private KNOWN_TABS = { | ||
+ "home", "videos", "shorts", "streams", "podcasts", | ||
+ "releases", "playlists", "community", "channels", "about", | ||
+ } | ||
+ | ||
# Redirects brand url channels to a normal /channel/:ucid route | ||
def self.brand_redirect(env) | ||
locale = env.get("preferences").as(Preferences).locale | ||
@@ -227,7 +232,10 @@ module Invidious::Routes::Channels | ||
yt_url_params = URI::Params.encode(env.params.query.to_h.select(["a", "u", "user"])) | ||
|
||
# Retrieves URL params that only Invidious uses | ||
- invidious_url_params = URI::Params.encode(env.params.query.to_h.select!(["a", "u", "user"])) | ||
+ invidious_url_params = env.params.query.dup | ||
+ invidious_url_params.delete_all("a") | ||
+ invidious_url_params.delete_all("u") | ||
+ invidious_url_params.delete_all("user") | ||
|
||
begin | ||
resolved_url = YoutubeAPI.resolve_url("https://youtube.com#{env.request.path}#{yt_url_params.size > 0 ? "?#{yt_url_params}" : ""}") | ||
@@ -236,14 +244,17 @@ module Invidious::Routes::Channels | ||
return error_template(404, translate(locale, "This channel does not exist.")) | ||
end | ||
|
||
- selected_tab = env.request.path.split("/")[-1] | ||
- if {"home", "videos", "shorts", "streams", "playlists", "community", "channels", "about"}.includes? selected_tab | ||
+ selected_tab = env.params.url["tab"]? | ||
+ | ||
+ if KNOWN_TABS.includes? selected_tab | ||
url = "/channel/#{ucid}/#{selected_tab}" | ||
else | ||
url = "/channel/#{ucid}" | ||
end | ||
|
||
- env.redirect url | ||
+ url += "?#{invidious_url_params}" if !invidious_url_params.empty? | ||
+ | ||
+ return env.redirect url | ||
end | ||
|
||
# Handles redirects for the /profile endpoint | ||
diff --git a/src/invidious/routing.cr b/src/invidious/routing.cr | ||
index 9c43171c..5ec7fae3 100644 | ||
--- a/src/invidious/routing.cr | ||
+++ b/src/invidious/routing.cr | ||
@@ -124,22 +124,34 @@ module Invidious::Routing | ||
get "/channel/:ucid/community", Routes::Channels, :community | ||
get "/channel/:ucid/channels", Routes::Channels, :channels | ||
get "/channel/:ucid/about", Routes::Channels, :about | ||
+ | ||
get "/channel/:ucid/live", Routes::Channels, :live | ||
get "/user/:user/live", Routes::Channels, :live | ||
get "/c/:user/live", Routes::Channels, :live | ||
|
||
- {"", "/videos", "/shorts", "/streams", "/playlists", "/community", "/about"}.each do |path| | ||
- # /c/LinusTechTips | ||
- get "/c/:user#{path}", Routes::Channels, :brand_redirect | ||
- # /user/linustechtips | Not always the same as /c/ | ||
- get "/user/:user#{path}", Routes::Channels, :brand_redirect | ||
- # /@LinusTechTips | Handle | ||
- get "/@:user#{path}", Routes::Channels, :brand_redirect | ||
- # /attribution_link?a=anything&u=/channel/UCZYTClx2T1of7BRZ86-8fow | ||
- get "/attribution_link#{path}", Routes::Channels, :brand_redirect | ||
- # /profile?user=linustechtips | ||
- get "/profile/#{path}", Routes::Channels, :profile | ||
- end | ||
+ # Channel catch-all, to redirect future routes to the channel's home | ||
+ # NOTE: defined last in order to be processed after the other routes | ||
+ get "/channel/:ucid/*", Routes::Channels, :home | ||
+ | ||
+ # /c/LinusTechTips | ||
+ get "/c/:user", Routes::Channels, :brand_redirect | ||
+ get "/c/:user/:tab", Routes::Channels, :brand_redirect | ||
+ | ||
+ # /user/linustechtips (Not always the same as /c/) | ||
+ get "/user/:user", Routes::Channels, :brand_redirect | ||
+ get "/user/:user/:tab", Routes::Channels, :brand_redirect | ||
+ | ||
+ # /@LinusTechTips (Handle) | ||
+ get "/@:user", Routes::Channels, :brand_redirect | ||
+ get "/@:user/:tab", Routes::Channels, :brand_redirect | ||
+ | ||
+ # /attribution_link?a=anything&u=/channel/UCZYTClx2T1of7BRZ86-8fow | ||
+ get "/attribution_link", Routes::Channels, :brand_redirect | ||
+ get "/attribution_link/:tab", Routes::Channels, :brand_redirect | ||
+ | ||
+ # /profile?user=linustechtips | ||
+ get "/profile", Routes::Channels, :profile | ||
+ get "/profile/*", Routes::Channels, :profile | ||
end | ||
|
||
def register_watch_routes | ||
|
||
From 2425c47882feaa56a69f6ba842cf1cb9d5b450e0 Mon Sep 17 00:00:00 2001 | ||
From: Samantaz Fox <[email protected]> | ||
Date: Wed, 13 Sep 2023 23:41:31 +0200 | ||
Subject: [PATCH 2/2] Routing: Add support for the '/live/<id>' route | ||
|
||
--- | ||
src/invidious/routing.cr | 1 + | ||
1 file changed, 1 insertion(+) | ||
|
||
diff --git a/src/invidious/routing.cr b/src/invidious/routing.cr | ||
index 5ec7fae3..f6b3aaa6 100644 | ||
--- a/src/invidious/routing.cr | ||
+++ b/src/invidious/routing.cr | ||
@@ -158,6 +158,7 @@ module Invidious::Routing | ||
get "/watch", Routes::Watch, :handle | ||
post "/watch_ajax", Routes::Watch, :mark_watched | ||
get "/watch/:id", Routes::Watch, :redirect | ||
+ get "/live/:id", Routes::Watch, :redirect | ||
get "/shorts/:id", Routes::Watch, :redirect | ||
get "/clip/:clip", Routes::Watch, :clip | ||
get "/w/:id", Routes::Watch, :redirect |