Move live endpoints into Channels route
This commit is contained in:
parent
919413e2b9
commit
e215a20a0a
3 changed files with 36 additions and 38 deletions
|
@ -324,6 +324,9 @@ end
|
||||||
Invidious::Routing.get "/channel/:ucid/playlists", Invidious::Routes::Channels, :playlists
|
Invidious::Routing.get "/channel/:ucid/playlists", Invidious::Routes::Channels, :playlists
|
||||||
Invidious::Routing.get "/channel/:ucid/community", Invidious::Routes::Channels, :community
|
Invidious::Routing.get "/channel/:ucid/community", Invidious::Routes::Channels, :community
|
||||||
Invidious::Routing.get "/channel/:ucid/about", Invidious::Routes::Channels, :about
|
Invidious::Routing.get "/channel/:ucid/about", Invidious::Routes::Channels, :about
|
||||||
|
Invidious::Routing.get "/channel/:ucid/live", Invidious::Routes::Channels, :live
|
||||||
|
Invidious::Routing.get "/user/:user/live", Invidious::Routes::Channels, :live
|
||||||
|
Invidious::Routing.get "/c/:user/live", Invidious::Routes::Channels, :live
|
||||||
|
|
||||||
["", "/videos", "/playlists", "/community", "/about"].each do |path|
|
["", "/videos", "/playlists", "/community", "/about"].each do |path|
|
||||||
# /c/LinusTechTips
|
# /c/LinusTechTips
|
||||||
|
@ -400,10 +403,6 @@ Invidious::Routing.get "/s_p/:id/:name", Invidious::Routes::Images, :s_p_image
|
||||||
Invidious::Routing.get "/yts/img/:name", Invidious::Routes::Images, :yts_image
|
Invidious::Routing.get "/yts/img/:name", Invidious::Routes::Images, :yts_image
|
||||||
Invidious::Routing.get "/vi/:id/:name", Invidious::Routes::Images, :thumbnails
|
Invidious::Routing.get "/vi/:id/:name", Invidious::Routes::Images, :thumbnails
|
||||||
|
|
||||||
Invidious::Routing.get "/channel/:ucid/live", Invidious::Routes::Live, :check
|
|
||||||
Invidious::Routing.get "/user/:user/live", Invidious::Routes::Live, :check
|
|
||||||
Invidious::Routing.get "/c/:user/live", Invidious::Routes::Live, :check
|
|
||||||
|
|
||||||
# API routes (macro)
|
# API routes (macro)
|
||||||
define_v1_api_routes()
|
define_v1_api_routes()
|
||||||
Invidious::Routing.get "/api/v1/auth/notifications", Invidious::Routes::API::V1::Authenticated, :notifications_get
|
Invidious::Routing.get "/api/v1/auth/notifications", Invidious::Routes::API::V1::Authenticated, :notifications_get
|
||||||
|
|
|
@ -147,6 +147,39 @@ module Invidious::Routes::Channels
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.live(env)
|
||||||
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
|
# Appears to be a bug in routing, having several routes configured
|
||||||
|
# as `/a/:a`, `/b/:a`, `/c/:a` results in 404
|
||||||
|
value = env.request.resource.split("/")[2]
|
||||||
|
body = ""
|
||||||
|
{"channel", "user", "c"}.each do |type|
|
||||||
|
response = YT_POOL.client &.get("/#{type}/#{value}/live?disable_polymer=1")
|
||||||
|
if response.status_code == 200
|
||||||
|
body = response.body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
video_id = body.match(/'VIDEO_ID': "(?<id>[a-zA-Z0-9_-]{11})"/).try &.["id"]?
|
||||||
|
if video_id
|
||||||
|
params = [] of String
|
||||||
|
env.params.query.each do |k, v|
|
||||||
|
params << "#{k}=#{v}"
|
||||||
|
end
|
||||||
|
params = params.join("&")
|
||||||
|
|
||||||
|
url = "/watch?v=#{video_id}"
|
||||||
|
if !params.empty?
|
||||||
|
url += "&#{params}"
|
||||||
|
end
|
||||||
|
|
||||||
|
env.redirect url
|
||||||
|
else
|
||||||
|
env.redirect "/channel/#{value}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private def self.fetch_basic_information(env)
|
private def self.fetch_basic_information(env)
|
||||||
locale = env.get("preferences").as(Preferences).locale
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
module Invidious::Routes::Live
|
|
||||||
def self.check(env)
|
|
||||||
locale = env.get("preferences").as(Preferences).locale
|
|
||||||
|
|
||||||
# Appears to be a bug in routing, having several routes configured
|
|
||||||
# as `/a/:a`, `/b/:a`, `/c/:a` results in 404
|
|
||||||
value = env.request.resource.split("/")[2]
|
|
||||||
body = ""
|
|
||||||
{"channel", "user", "c"}.each do |type|
|
|
||||||
response = YT_POOL.client &.get("/#{type}/#{value}/live?disable_polymer=1")
|
|
||||||
if response.status_code == 200
|
|
||||||
body = response.body
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
video_id = body.match(/'VIDEO_ID': "(?<id>[a-zA-Z0-9_-]{11})"/).try &.["id"]?
|
|
||||||
if video_id
|
|
||||||
params = [] of String
|
|
||||||
env.params.query.each do |k, v|
|
|
||||||
params << "#{k}=#{v}"
|
|
||||||
end
|
|
||||||
params = params.join("&")
|
|
||||||
|
|
||||||
url = "/watch?v=#{video_id}"
|
|
||||||
if !params.empty?
|
|
||||||
url += "&#{params}"
|
|
||||||
end
|
|
||||||
|
|
||||||
env.redirect url
|
|
||||||
else
|
|
||||||
env.redirect "/channel/#{value}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in a new issue