summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsaltycrys <73420320+saltycrys@users.noreply.github.com>2020-12-27 06:12:43 +0100
committersaltycrys <73420320+saltycrys@users.noreply.github.com>2020-12-27 06:12:43 +0100
commit198dfffaeb91c03889440a9f8141657bd53734d6 (patch)
tree5b1d624ab701886fb9da26b3cd579ad47632aaa1
parentdba7dc4e96b88326467908acad22238d93730b4b (diff)
downloadinvidious-198dfffaeb91c03889440a9f8141657bd53734d6.tar.gz
invidious-198dfffaeb91c03889440a9f8141657bd53734d6.tar.bz2
invidious-198dfffaeb91c03889440a9f8141657bd53734d6.zip
Add `popular-enabled` option
This is similar to the removed `top-enabled` option but for the Popular feed. The instance needs to be restarted if the feed was enabled. Editing admin options on the preferences page is also fixed. The handling of the feed pages now only happens in a single place. Instead of redirecting: - The Top feed now displays a message that it was removed from Invidious. - The Popular feed now displays a message that it was disabled if it was.
-rw-r--r--src/invidious.cr25
-rw-r--r--src/invidious/helpers/helpers.cr3
-rw-r--r--src/invidious/routes/home.cr12
-rw-r--r--src/invidious/routes/user_preferences.cr4
-rw-r--r--src/invidious/views/message.ecr12
-rw-r--r--src/invidious/views/preferences.ecr6
6 files changed, 48 insertions, 14 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index 40acd9df..af36e25c 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -162,13 +162,16 @@ end
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::SubscribeToFeedsJob.new(PG_DB, logger, config, HMAC_KEY)
-Invidious::Jobs.register Invidious::Jobs::PullPopularVideosJob.new(PG_DB)
Invidious::Jobs.register Invidious::Jobs::UpdateDecryptFunctionJob.new
if config.statistics_enabled
Invidious::Jobs.register Invidious::Jobs::StatisticsRefreshJob.new(PG_DB, config, SOFTWARE)
end
+if config.popular_enabled
+ Invidious::Jobs.register Invidious::Jobs::PullPopularVideosJob.new(PG_DB)
+end
+
if config.captcha_key
Invidious::Jobs.register Invidious::Jobs::BypassCaptchaJob.new(logger, config)
end
@@ -1140,13 +1143,20 @@ end
get "/feed/top" do |env|
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
- env.redirect "/"
+
+ message = translate(locale, "The Top feed has been removed from Invidious.")
+ templated "message"
end
get "/feed/popular" do |env|
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
get "/feed/trending" do |env|
@@ -2210,6 +2220,12 @@ get "/api/v1/popular" do |env|
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.array do
popular_videos.each do |video|
@@ -2223,7 +2239,8 @@ get "/api/v1/top" do |env|
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
env.response.content_type = "application/json"
- "[]"
+ env.response.status_code = 400
+ {"error" => "The Top feed has been removed from Invidious."}.to_json
end
get "/api/v1/channels/:ucid" do |env|
diff --git a/src/invidious/helpers/helpers.cr b/src/invidious/helpers/helpers.cr
index dc68fb5c..29fd6a86 100644
--- a/src/invidious/helpers/helpers.cr
+++ b/src/invidious/helpers/helpers.cr
@@ -60,7 +60,7 @@ struct ConfigPreferences
end
end
-struct Config
+class Config
include YAML::Serializable
property channel_threads : Int32 # Number of threads to use for crawling videos from channels (for updating subscriptions)
@@ -71,6 +71,7 @@ struct Config
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 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 login_enabled : Bool = true
property registration_enabled : Bool = true
diff --git a/src/invidious/routes/home.cr b/src/invidious/routes/home.cr
index 9b1bf61b..486a7344 100644
--- a/src/invidious/routes/home.cr
+++ b/src/invidious/routes/home.cr
@@ -5,30 +5,24 @@ class Invidious::Routes::Home < Invidious::Routes::BaseRoute
user = env.get? "user"
case preferences.default_home
- when ""
- templated "empty"
when "Popular"
- templated "popular"
+ env.redirect "/feed/popular"
when "Trending"
env.redirect "/feed/trending"
when "Subscriptions"
if user
env.redirect "/feed/subscriptions"
else
- templated "popular"
+ env.redirect "/feed/popular"
end
when "Playlists"
if user
env.redirect "/view_all_playlists"
else
- templated "popular"
+ env.redirect "/feed/popular"
end
else
templated "empty"
end
end
-
- private def popular_videos
- Jobs::PullPopularVideosJob::POPULAR_VIDEOS.get
- end
end
diff --git a/src/invidious/routes/user_preferences.cr b/src/invidious/routes/user_preferences.cr
index 3e4ec330..a0125ed5 100644
--- a/src/invidious/routes/user_preferences.cr
+++ b/src/invidious/routes/user_preferences.cr
@@ -154,6 +154,10 @@ class Invidious::Routes::UserPreferences < Invidious::Routes::BaseRoute
end
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 ||= "off"
config.captcha_enabled = captcha_enabled == "on"
diff --git a/src/invidious/views/message.ecr b/src/invidious/views/message.ecr
new file mode 100644
index 00000000..8c7bf611
--- /dev/null
+++ b/src/invidious/views/message.ecr
@@ -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>
diff --git a/src/invidious/views/preferences.ecr b/src/invidious/views/preferences.ecr
index aebdab9e..c05a902c 100644
--- a/src/invidious/views/preferences.ecr
+++ b/src/invidious/views/preferences.ecr
@@ -228,6 +228,12 @@
</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">
<label for="captcha_enabled"><%= translate(locale, "CAPTCHA enabled: ") %></label>
<input name="captcha_enabled" id="captcha_enabled" type="checkbox" <% if config.captcha_enabled %>checked<% end %>>
</div>