Merge pull request #1609 from saltycrys/add-popular-enabled-option

Add `popular-enabled` option
This commit is contained in:
Perflyst 2020-12-28 11:30:55 +01:00 committed by GitHub
commit b19524d56a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 48 additions and 14 deletions

View file

@ -168,13 +168,16 @@ end
Invidious::Jobs.register Invidious::Jobs::RefreshChannelsJob.new(PG_DB, logger, config) Invidious::Jobs.register Invidious::Jobs::RefreshChannelsJob.new(PG_DB, logger, config)
Invidious::Jobs.register Invidious::Jobs::RefreshFeedsJob.new(PG_DB, logger, config) Invidious::Jobs.register Invidious::Jobs::RefreshFeedsJob.new(PG_DB, logger, config)
Invidious::Jobs.register Invidious::Jobs::SubscribeToFeedsJob.new(PG_DB, logger, config, HMAC_KEY) Invidious::Jobs.register Invidious::Jobs::SubscribeToFeedsJob.new(PG_DB, logger, config, HMAC_KEY)
Invidious::Jobs.register Invidious::Jobs::PullPopularVideosJob.new(PG_DB)
Invidious::Jobs.register Invidious::Jobs::UpdateDecryptFunctionJob.new Invidious::Jobs.register Invidious::Jobs::UpdateDecryptFunctionJob.new
if config.statistics_enabled if config.statistics_enabled
Invidious::Jobs.register Invidious::Jobs::StatisticsRefreshJob.new(PG_DB, config, SOFTWARE) Invidious::Jobs.register Invidious::Jobs::StatisticsRefreshJob.new(PG_DB, config, SOFTWARE)
end end
if config.popular_enabled
Invidious::Jobs.register Invidious::Jobs::PullPopularVideosJob.new(PG_DB)
end
if config.captcha_key if config.captcha_key
Invidious::Jobs.register Invidious::Jobs::BypassCaptchaJob.new(logger, config) Invidious::Jobs.register Invidious::Jobs::BypassCaptchaJob.new(logger, config)
end end
@ -1146,13 +1149,20 @@ end
get "/feed/top" do |env| get "/feed/top" do |env|
locale = LOCALES[env.get("preferences").as(Preferences).locale]? locale = LOCALES[env.get("preferences").as(Preferences).locale]?
env.redirect "/"
message = translate(locale, "The Top feed has been removed from Invidious.")
templated "message"
end end
get "/feed/popular" do |env| get "/feed/popular" do |env|
locale = LOCALES[env.get("preferences").as(Preferences).locale]? locale = LOCALES[env.get("preferences").as(Preferences).locale]?
templated "popular" if config.popular_enabled
templated "popular"
else
message = translate(locale, "The Popular feed has been disabled by the administrator.")
templated "message"
end
end end
get "/feed/trending" do |env| get "/feed/trending" do |env|
@ -2216,6 +2226,12 @@ get "/api/v1/popular" do |env|
env.response.content_type = "application/json" env.response.content_type = "application/json"
if !config.popular_enabled
error_message = {"error" => "Administrator has disabled this endpoint."}.to_json
env.response.status_code = 400
next error_message
end
JSON.build do |json| JSON.build do |json|
json.array do json.array do
popular_videos.each do |video| popular_videos.each do |video|
@ -2229,7 +2245,8 @@ get "/api/v1/top" do |env|
locale = LOCALES[env.get("preferences").as(Preferences).locale]? locale = LOCALES[env.get("preferences").as(Preferences).locale]?
env.response.content_type = "application/json" env.response.content_type = "application/json"
"[]" env.response.status_code = 400
{"error" => "The Top feed has been removed from Invidious."}.to_json
end end
get "/api/v1/channels/:ucid" do |env| get "/api/v1/channels/:ucid" do |env|

View file

@ -61,7 +61,7 @@ struct ConfigPreferences
end end
end end
struct Config class Config
include YAML::Serializable include YAML::Serializable
property channel_threads : Int32 # Number of threads to use for crawling videos from channels (for updating subscriptions) property channel_threads : Int32 # Number of threads to use for crawling videos from channels (for updating subscriptions)
@ -72,6 +72,7 @@ struct Config
property hmac_key : String? # HMAC signing key for CSRF tokens and verifying pubsub subscriptions property hmac_key : String? # HMAC signing key for CSRF tokens and verifying pubsub subscriptions
property domain : String? # Domain to be used for links to resources on the site where an absolute URL is required property domain : String? # Domain to be used for links to resources on the site where an absolute URL is required
property use_pubsub_feeds : Bool | Int32 = false # Subscribe to channels using PubSubHubbub (requires domain, hmac_key) property use_pubsub_feeds : Bool | Int32 = false # Subscribe to channels using PubSubHubbub (requires domain, hmac_key)
property popular_enabled : Bool = true
property captcha_enabled : Bool = true property captcha_enabled : Bool = true
property login_enabled : Bool = true property login_enabled : Bool = true
property registration_enabled : Bool = true property registration_enabled : Bool = true

View file

@ -5,30 +5,24 @@ class Invidious::Routes::Home < Invidious::Routes::BaseRoute
user = env.get? "user" user = env.get? "user"
case preferences.default_home case preferences.default_home
when ""
templated "empty"
when "Popular" when "Popular"
templated "popular" env.redirect "/feed/popular"
when "Trending" when "Trending"
env.redirect "/feed/trending" env.redirect "/feed/trending"
when "Subscriptions" when "Subscriptions"
if user if user
env.redirect "/feed/subscriptions" env.redirect "/feed/subscriptions"
else else
templated "popular" env.redirect "/feed/popular"
end end
when "Playlists" when "Playlists"
if user if user
env.redirect "/view_all_playlists" env.redirect "/view_all_playlists"
else else
templated "popular" env.redirect "/feed/popular"
end end
else else
templated "empty" templated "empty"
end end
end end
private def popular_videos
Jobs::PullPopularVideosJob::POPULAR_VIDEOS.get
end
end end

View file

@ -158,6 +158,10 @@ class Invidious::Routes::UserPreferences < Invidious::Routes::BaseRoute
end end
config.default_user_preferences.feed_menu = admin_feed_menu config.default_user_preferences.feed_menu = admin_feed_menu
popular_enabled = env.params.body["popular_enabled"]?.try &.as(String)
popular_enabled ||= "off"
config.popular_enabled = popular_enabled == "on"
captcha_enabled = env.params.body["captcha_enabled"]?.try &.as(String) captcha_enabled = env.params.body["captcha_enabled"]?.try &.as(String)
captcha_enabled ||= "off" captcha_enabled ||= "off"
config.captcha_enabled = captcha_enabled == "on" config.captcha_enabled = captcha_enabled == "on"

View file

@ -0,0 +1,12 @@
<% content_for "header" do %>
<meta name="description" content="<%= translate(locale, "An alternative front-end to YouTube") %>">
<title>
Invidious
</title>
<% end %>
<%= rendered "components/feed_menu" %>
<p>
<%= message %>
</p>

View file

@ -238,6 +238,12 @@
<% end %> <% end %>
</div> </div>
<div class="pure-control-group">
<label for="popular_enabled"><%= translate(locale, "Popular enabled: ") %></label>
<input name="popular_enabled" id="popular_enabled" type="checkbox" <% if config.popular_enabled %>checked<% end %>>
</div>
<div class="pure-control-group"> <div class="pure-control-group">
<label for="captcha_enabled"><%= translate(locale, "CAPTCHA enabled: ") %></label> <label for="captcha_enabled"><%= translate(locale, "CAPTCHA enabled: ") %></label>
<input name="captcha_enabled" id="captcha_enabled" type="checkbox" <% if config.captcha_enabled %>checked<% end %>> <input name="captcha_enabled" id="captcha_enabled" type="checkbox" <% if config.captcha_enabled %>checked<% end %>>