From 0607cdb89259669ab85a8c189fbc4b3787517247 Mon Sep 17 00:00:00 2001 From: Emilien Devos <4016501+unixfox@users.noreply.github.com> Date: Wed, 13 Sep 2023 23:57:10 +0200 Subject: [PATCH] add patch pr https://github.com/iv-org/invidious/pull/4099 --- patches/012-4099.patch | 132 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 patches/012-4099.patch diff --git a/patches/012-4099.patch b/patches/012-4099.patch new file mode 100644 index 0000000..2a84999 --- /dev/null +++ b/patches/012-4099.patch @@ -0,0 +1,132 @@ +From 49b9316b9f2e9ccc6921a2f293abacb37f9805f6 Mon Sep 17 00:00:00 2001 +From: Samantaz Fox +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 +Date: Wed, 13 Sep 2023 23:41:31 +0200 +Subject: [PATCH 2/2] Routing: Add support for the '/live/' 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