summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOmar Roth <omarroth@protonmail.com>2019-10-20 20:42:18 -0400
committerOmar Roth <omarroth@protonmail.com>2019-10-20 20:43:33 -0400
commit7524b5e349ca403d49d4c35c55e9dc161a4e7d59 (patch)
tree15b22a707adf4257a06ca4aef36b569e80984fc4
parent2a04a48b891835ce3d68ff883c7b88a6b2e37508 (diff)
downloadinvidious-7524b5e349ca403d49d4c35c55e9dc161a4e7d59.tar.gz
invidious-7524b5e349ca403d49d4c35c55e9dc161a4e7d59.tar.bz2
invidious-7524b5e349ca403d49d4c35c55e9dc161a4e7d59.zip
Move feed_menu and default_home into user preferences
-rw-r--r--locales/en-US.json6
-rw-r--r--src/invidious.cr59
-rw-r--r--src/invidious/helpers/helpers.cr13
-rw-r--r--src/invidious/users.cr3
-rw-r--r--src/invidious/views/components/feed_menu.ecr4
-rw-r--r--src/invidious/views/empty.ecr8
-rw-r--r--src/invidious/views/popular.ecr2
-rw-r--r--src/invidious/views/preferences.ecr49
-rw-r--r--src/invidious/views/top.ecr2
-rw-r--r--src/invidious/views/trending.ecr2
-rw-r--r--src/invidious/views/view_all_playlists.ecr2
11 files changed, 97 insertions, 53 deletions
diff --git a/locales/en-US.json b/locales/en-US.json
index e0b2dab4..8c8a4e82 100644
--- a/locales/en-US.json
+++ b/locales/en-US.json
@@ -115,9 +115,9 @@
"Feed menu: ": "Feed menu: ",
"Top enabled: ": "Top enabled: ",
"CAPTCHA enabled: ": "CAPTCHA enabled: ",
- "Login enabled: ": "Login enabled? ",
- "Registration enabled: ": "Registration enabled? ",
- "Report statistics: ": "Report statistics? ",
+ "Login enabled: ": "Login enabled: ",
+ "Registration enabled: ": "Registration enabled: ",
+ "Report statistics: ": "Report statistics: ",
"Save preferences": "Save preferences",
"Subscription manager": "Subscription manager",
"Token manager": "Token manager",
diff --git a/src/invidious.cr b/src/invidious.cr
index 215619af..30688db3 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -293,10 +293,8 @@ before_all do |env|
end
dark_mode = convert_theme(env.params.query["dark_mode"]?) || preferences.dark_mode.to_s
-
thin_mode = env.params.query["thin_mode"]? || preferences.thin_mode.to_s
thin_mode = thin_mode == "true"
-
locale = env.params.query["hl"]? || preferences.locale
preferences.dark_mode = dark_mode
@@ -319,21 +317,21 @@ before_all do |env|
end
get "/" do |env|
- locale = LOCALES[env.get("preferences").as(Preferences).locale]?
+ preferences = env.get("preferences").as(Preferences)
+ locale = LOCALES[preferences.locale]?
user = env.get? "user"
- if user
- user = user.as(User)
- if user.preferences.redirect_feed
- next env.redirect "/feed/subscriptions"
- end
- end
-
- case config.default_home
+ case preferences.default_home
+ when ""
+ templated "empty"
when "Popular"
templated "popular"
when "Top"
- templated "top"
+ if config.top_enabled
+ templated "top"
+ else
+ templated "empty"
+ end
when "Trending"
env.redirect "/feed/trending"
when "Subscriptions"
@@ -342,6 +340,12 @@ get "/" do |env|
else
templated "popular"
end
+ when "Playlists"
+ if user
+ env.redirect "/view_all_playlists"
+ else
+ templated "popular"
+ end
end
end
@@ -783,6 +787,10 @@ end
# Playlists
+get "/feed/playlists" do |env|
+ env.redirect "/view_all_playlists"
+end
+
get "/view_all_playlists" do |env|
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
@@ -1952,9 +1960,15 @@ post "/preferences" do |env|
related_videos ||= "off"
related_videos = related_videos == "on"
- redirect_feed = env.params.body["redirect_feed"]?.try &.as(String)
- redirect_feed ||= "off"
- redirect_feed = redirect_feed == "on"
+ default_home = env.params.body["default_home"]?.try &.as(String) || CONFIG.default_user_preferences.default_home
+
+ feed_menu = [] of String
+ 5.times do |index|
+ option = env.params.body["feed_menu[#{index}]"]?.try &.as(String) || ""
+ if !option.empty?
+ feed_menu << option
+ end
+ end
locale = env.params.body["locale"]?.try &.as(String)
locale ||= CONFIG.default_user_preferences.locale
@@ -2002,7 +2016,8 @@ post "/preferences" do |env|
notifications_only: notifications_only,
player_style: player_style,
quality: quality,
- redirect_feed: redirect_feed,
+ default_home: default_home,
+ feed_menu: feed_menu,
related_videos: related_videos,
sort: sort,
speed: speed,
@@ -2017,16 +2032,16 @@ post "/preferences" do |env|
PG_DB.exec("UPDATE users SET preferences = $1 WHERE email = $2", preferences, user.email)
if config.admins.includes? user.email
- config.default_home = env.params.body["default_home"]?.try &.as(String) || config.default_home
+ CONFIG.default_user_preferences.default_home = env.params.body["admin_default_home"]?.try &.as(String) || CONFIG.default_user_preferences.default_home
- feed_menu = [] of String
- 4.times do |index|
- option = env.params.body["feed_menu[#{index}]"]?.try &.as(String) || ""
+ admin_feed_menu = [] of String
+ 5.times do |index|
+ option = env.params.body["admin_feed_menu[#{index}]"]?.try &.as(String) || ""
if !option.empty?
- feed_menu << option
+ admin_feed_menu << option
end
end
- config.feed_menu = feed_menu
+ CONFIG.default_user_preferences.feed_menu = admin_feed_menu
top_enabled = env.params.body["top_enabled"]?.try &.as(String)
top_enabled ||= "off"
diff --git a/src/invidious/helpers/helpers.cr b/src/invidious/helpers/helpers.cr
index d227fdf9..d23d5f07 100644
--- a/src/invidious/helpers/helpers.cr
+++ b/src/invidious/helpers/helpers.cr
@@ -94,9 +94,7 @@ struct ConfigPreferences
result
end
rescue ex
- result = value.read_bool
-
- if result
+ if value.read_bool
"dark"
else
"light"
@@ -110,7 +108,7 @@ struct ConfigPreferences
def self.from_yaml(ctx : YAML::ParseContext, node : YAML::Nodes::Node) : String
unless node.is_a?(YAML::Nodes::Scalar)
- node.raise "Expected sequence, not #{node.class}"
+ node.raise "Expected scalar, not #{node.class}"
end
case node.value
@@ -134,7 +132,7 @@ struct ConfigPreferences
comments: {type: Array(String), default: ["youtube", ""], converter: StringToArray},
continue: {type: Bool, default: false},
continue_autoplay: {type: Bool, default: true},
- dark_mode: {type: String, default: "", converter: BoolToString},
+ dark_mode: {type: String, default: "light", converter: BoolToString},
latest_only: {type: Bool, default: false},
listen: {type: Bool, default: false},
local: {type: Bool, default: false},
@@ -143,7 +141,8 @@ struct ConfigPreferences
notifications_only: {type: Bool, default: false},
player_style: {type: String, default: "invidious"},
quality: {type: String, default: "hd720"},
- redirect_feed: {type: Bool, default: false},
+ default_home: {type: String, default: "Popular"},
+ feed_menu: {type: Array(String), default: ["Popular", "Trending", "Subscriptions", "Playlists"]},
related_videos: {type: Bool, default: true},
sort: {type: String, default: "published"},
speed: {type: Float32, default: 1.0_f32},
@@ -215,8 +214,6 @@ struct Config
hmac_key: String?, # HMAC signing key for CSRF tokens and verifying pubsub subscriptions
domain: String?, # Domain to be used for links to resources on the site where an absolute URL is required
use_pubsub_feeds: {type: Bool | Int32, default: false}, # Subscribe to channels using PubSubHubbub (requires domain, hmac_key)
- default_home: {type: String, default: "Top"},
- feed_menu: {type: Array(String), default: ["Popular", "Top", "Trending", "Subscriptions"]},
top_enabled: {type: Bool, default: true},
captcha_enabled: {type: Bool, default: true},
login_enabled: {type: Bool, default: true},
diff --git a/src/invidious/users.cr b/src/invidious/users.cr
index f2ebb66f..2d45d69d 100644
--- a/src/invidious/users.cr
+++ b/src/invidious/users.cr
@@ -84,7 +84,8 @@ struct Preferences
notifications_only: {type: Bool, default: CONFIG.default_user_preferences.notifications_only},
player_style: {type: String, default: CONFIG.default_user_preferences.player_style, converter: ProcessString},
quality: {type: String, default: CONFIG.default_user_preferences.quality, converter: ProcessString},
- redirect_feed: {type: Bool, default: CONFIG.default_user_preferences.redirect_feed},
+ default_home: {type: String, default: CONFIG.default_user_preferences.default_home},
+ feed_menu: {type: Array(String), default: CONFIG.default_user_preferences.feed_menu},
related_videos: {type: Bool, default: CONFIG.default_user_preferences.related_videos},
sort: {type: String, default: CONFIG.default_user_preferences.sort, converter: ProcessString},
speed: {type: Float32, default: CONFIG.default_user_preferences.speed},
diff --git a/src/invidious/views/components/feed_menu.ecr b/src/invidious/views/components/feed_menu.ecr
index 9867f56f..f72db2da 100644
--- a/src/invidious/views/components/feed_menu.ecr
+++ b/src/invidious/views/components/feed_menu.ecr
@@ -2,9 +2,9 @@
<div class="pure-u-1 pure-u-md-1-4"></div>
<div class="pure-u-1 pure-u-md-1-2">
<div class="pure-g">
- <% feed_menu = config.feed_menu.dup %>
+ <% feed_menu = env.get("preferences").as(Preferences).feed_menu.dup %>
<% if !env.get?("user") %>
- <% feed_menu.reject! {|feed| feed == "Subscriptions"} %>
+ <% feed_menu.reject! {|item| {"Subscriptions", "Playlists"}.includes? item} %>
<% end %>
<% feed_menu.each do |feed| %>
<div class="pure-u-1-2 pure-u-md-1-<%= feed_menu.size %>">
diff --git a/src/invidious/views/empty.ecr b/src/invidious/views/empty.ecr
new file mode 100644
index 00000000..c10c097e
--- /dev/null
+++ b/src/invidious/views/empty.ecr
@@ -0,0 +1,8 @@
+<% content_for "header" do %>
+<meta name="description" content="<%= translate(locale, "An alternative front-end to YouTube") %>">
+<title>
+ Invidious
+</title>
+<% end %>
+
+<%= rendered "components/feed_menu" %>
diff --git a/src/invidious/views/popular.ecr b/src/invidious/views/popular.ecr
index 88c49582..62abb12a 100644
--- a/src/invidious/views/popular.ecr
+++ b/src/invidious/views/popular.ecr
@@ -1,7 +1,7 @@
<% content_for "header" do %>
<meta name="description" content="<%= translate(locale, "An alternative front-end to YouTube") %>">
<title>
- <% if config.default_home != "Popular" %>
+ <% if env.get("preferences").as(Preferences).default_home != "Popular" %>
<%= translate(locale, "Popular") %> - Invidious
<% else %>
Invidious
diff --git a/src/invidious/views/preferences.ecr b/src/invidious/views/preferences.ecr
index 1183fba8..17e5804e 100644
--- a/src/invidious/views/preferences.ecr
+++ b/src/invidious/views/preferences.ecr
@@ -135,6 +135,32 @@ function update_value(element) {
<input name="thin_mode" id="thin_mode" type="checkbox" <% if preferences.thin_mode %>checked<% end %>>
</div>
+ <% if env.get?("user") %>
+ <% feed_options = {"", "Popular", "Top", "Trending", "Subscriptions", "Playlists"} %>
+ <% else %>
+ <% feed_options = {"", "Popular", "Top", "Trending"} %>
+ <% end %>
+
+ <div class="pure-control-group">
+ <label for="default_home"><%= translate(locale, "Default homepage: ") %></label>
+ <select name="default_home" id="default_home">
+ <% feed_options.each do |option| %>
+ <option value="<%= option %>" <% if preferences.default_home == option %> selected <% end %>><%= translate(locale, option) %></option>
+ <% end %>
+ </select>
+ </div>
+
+ <div class="pure-control-group">
+ <label for="feed_menu"><%= translate(locale, "Feed menu: ") %></label>
+ <% (feed_options.size - 1).times do |index| %>
+ <select name="feed_menu[<%= index %>]" id="feed_menu[<%= index %>]">
+ <% feed_options.each do |option| %>
+ <option value="<%= option %>" <% if preferences.feed_menu[index]? == option %> selected <% end %>><%= translate(locale, option) %></option>
+ <% end %>
+ </select>
+ <% end %>
+ </div>
+
<% if env.get? "user" %>
<legend><%= translate(locale, "Subscription preferences") %></legend>
@@ -144,11 +170,6 @@ function update_value(element) {
</div>
<div class="pure-control-group">
- <label for="redirect_feed"><%= translate(locale, "Redirect homepage to feed: ") %></label>
- <input name="redirect_feed" id="redirect_feed" type="checkbox" <% if preferences.redirect_feed %>checked<% end %>>
- </div>
-
- <div class="pure-control-group">
<label for="max_results"><%= translate(locale, "Number of videos shown in feed: ") %></label>
<input name="max_results" id="max_results" type="number" value="<%= preferences.max_results %>">
</div>
@@ -193,20 +214,20 @@ function update_value(element) {
<legend><%= translate(locale, "Administrator preferences") %></legend>
<div class="pure-control-group">
- <label for="default_home"><%= translate(locale, "Default homepage: ") %></label>
- <select name="default_home" id="default_home">
- <% {"Popular", "Top", "Trending", "Subscriptions"}.each do |option| %>
- <option value="<%= option %>" <% if config.default_home == option %> selected <% end %>><%= translate(locale, option) %></option>
+ <label for="admin_default_home"><%= translate(locale, "Default homepage: ") %></label>
+ <select name="admin_default_home" id="admin_default_home">
+ <% feed_options.each do |option| %>
+ <option value="<%= option %>" <% if CONFIG.default_user_preferences.default_home == option %> selected <% end %>><%= translate(locale, option) %></option>
<% end %>
</select>
</div>
<div class="pure-control-group">
- <label for="feed_menu"><%= translate(locale, "Feed menu: ") %></label>
- <% 4.times do |index| %>
- <select name="feed_menu[<%= index %>]" id="feed_menu[<%= index %>]">
- <% {"", "Popular", "Top", "Trending", "Subscriptions"}.each do |option| %>
- <option value="<%= option %>" <% if config.feed_menu[index]? == option %> selected <% end %>><%= translate(locale, option) %></option>
+ <label for="admin_feed_menu"><%= translate(locale, "Feed menu: ") %></label>
+ <% (feed_options.size - 1).times do |index| %>
+ <select name="admin_feed_menu[<%= index %>]" id="admin_feed_menu[<%= index %>]">
+ <% feed_options.each do |option| %>
+ <option value="<%= option %>" <% if CONFIG.default_user_preferences.feed_menu[index]? == option %> selected <% end %>><%= translate(locale, option) %></option>
<% end %>
</select>
<% end %>
diff --git a/src/invidious/views/top.ecr b/src/invidious/views/top.ecr
index d5fb3de6..f5db3aaa 100644
--- a/src/invidious/views/top.ecr
+++ b/src/invidious/views/top.ecr
@@ -1,7 +1,7 @@
<% content_for "header" do %>
<meta name="description" content="<%= translate(locale, "An alternative front-end to YouTube") %>">
<title>
- <% if config.default_home != "Top" %>
+ <% if env.get("preferences").as(Preferences).default_home != "Top" %>
<%= translate(locale, "Top") %> - Invidious
<% else %>
Invidious
diff --git a/src/invidious/views/trending.ecr b/src/invidious/views/trending.ecr
index d7784928..42acb15c 100644
--- a/src/invidious/views/trending.ecr
+++ b/src/invidious/views/trending.ecr
@@ -1,7 +1,7 @@
<% content_for "header" do %>
<meta name="description" content="<%= translate(locale, "An alternative front-end to YouTube") %>">
<title>
- <% if config.default_home != "Trending" %>
+ <% if env.get("preferences").as(Preferences).default_home != "Trending" %>
<%= translate(locale, "Trending") %> - Invidious
<% else %>
Invidious
diff --git a/src/invidious/views/view_all_playlists.ecr b/src/invidious/views/view_all_playlists.ecr
index ef9c85c0..0fa7a325 100644
--- a/src/invidious/views/view_all_playlists.ecr
+++ b/src/invidious/views/view_all_playlists.ecr
@@ -2,6 +2,8 @@
<title><%= translate(locale, "Playlists") %> - Invidious</title>
<% end %>
+<%= rendered "components/feed_menu" %>
+
<div class="pure-g h-box">
<div class="pure-u-2-3">
<h3><%= translate(locale, "`x` playlists", %(<span id="count">#{items.size}</span>)) %></h3>