diff --git a/src/invidious.cr b/src/invidious.cr index 3bb59b97..2acc860b 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -222,6 +222,10 @@ else LOGGER.info("jobs: Disabling RefreshSessionTokens job. Invidious will use the tokens that are on the configuration file") end +if CONFIG.invidious_companion.present? + Invidious::Jobs.register Invidious::Jobs::CheckBackend.new +end + Invidious::Jobs.start_all def popular_videos diff --git a/src/invidious/helpers/backend_info.cr b/src/invidious/helpers/backend_info.cr new file mode 100644 index 00000000..ce8bb0d7 --- /dev/null +++ b/src/invidious/helpers/backend_info.cr @@ -0,0 +1,17 @@ +module BackendInfo + extend self + @@exvpp_url : String = "" + + def get_videoplayback_proxy + begin + response = HTTP::Client.get "#{CONFIG.invidious_companion.sample.private_url}/info" + exvpp_url = JSON.parse(response.body)["external_videoplayback_proxy"].to_s + @@exvpp_url = exvpp_url + rescue + end + end + + def get_exvpp + return @@exvpp_url + end +end diff --git a/src/invidious/jobs/backend_checker.cr b/src/invidious/jobs/backend_checker.cr new file mode 100644 index 00000000..7b251947 --- /dev/null +++ b/src/invidious/jobs/backend_checker.cr @@ -0,0 +1,13 @@ +class Invidious::Jobs::CheckBackend < Invidious::Jobs::BaseJob + def initialize + end + + def begin + loop do + BackendInfo.get_videoplayback_proxy + LOGGER.info("Backend Checker: Done, sleeping for 60 seconds") + sleep 60.seconds + Fiber.yield + end + end +end diff --git a/src/invidious/routes/before_all.cr b/src/invidious/routes/before_all.cr index 8bfde738..e49bb300 100644 --- a/src/invidious/routes/before_all.cr +++ b/src/invidious/routes/before_all.cr @@ -26,6 +26,11 @@ module Invidious::Routes::BeforeAll if CONFIG.invidious_companion.present? extra_media_csp = " #{CONFIG.invidious_companion.sample.public_url}" extra_connect_csp = " #{CONFIG.invidious_companion.sample.public_url}" + exvpp_url = BackendInfo.get_exvpp + if !exvpp_url.empty? + extra_media_csp += " #{exvpp_url}" + extra_connect_csp += " #{exvpp_url}" + end end if !CONFIG.external_videoplayback_proxy.empty?