diff --git a/locales/en-US.json b/locales/en-US.json index df88f362..8cafcbf6 100644 --- a/locales/en-US.json +++ b/locales/en-US.json @@ -124,6 +124,7 @@ "preferences_sort_label": "Sort videos by: ", "preferences_hidden_channels": "Hidden channels", "preferences_hidden_channels_label": "(Experimental) Channel ID list separated by ENTER key. This only hides channels from the popular page for now. You can get the ID of the channel clicking on the channel and copying the part that starts with 'UC' in the channel link. Example: /channel/UCw-aR42z5gUcarpPGN5OKfA", + "preferences_default_trending_type": "Default trending page: ", "published": "published", "published - reverse": "published - reverse", "alphabetically": "alphabetically", diff --git a/locales/es.json b/locales/es.json index c815db14..4162985a 100644 --- a/locales/es.json +++ b/locales/es.json @@ -80,6 +80,7 @@ "preferences_sort_label": "Ordenar los videos por: ", "preferences_hidden_channels": "Canales ocultos", "preferences_hidden_channels_label": "(Experimental) Lista de IDs de canales separados por la tecla ENTER. Por ahora, esto solo oculta canales de la pagina popular. Puedes conseguir la ID del canal entrando al canal y copiando la parte que empieza por 'UC' en el enlace. Ejemplo: /channel/UCw-aR42z5gUcarpPGN5OKfA", + "preferences_default_trending_type": "Página de tendencias por defecto: ", "published": "fecha de publicación", "published - reverse": "fecha de publicación: orden inverso", "alphabetically": "alfabéticamente", diff --git a/src/invidious/config.cr b/src/invidious/config.cr index c3f44649..9d09b291 100644 --- a/src/invidious/config.cr +++ b/src/invidious/config.cr @@ -55,6 +55,8 @@ struct ConfigPreferences property enable_dearrow : Bool = false @[YAML::Field(ignore: true)] property hidden_channels : Array(String)? = nil + @[YAML::Field(ignore: true)] + property default_trending_type : Invidious::Routes::Feeds::TrendingTypes = Invidious::Routes::Feeds::TrendingTypes::Default def to_tuple {% begin %} diff --git a/src/invidious/routes/feeds.cr b/src/invidious/routes/feeds.cr index f90af73e..247992a4 100644 --- a/src/invidious/routes/feeds.cr +++ b/src/invidious/routes/feeds.cr @@ -1,6 +1,13 @@ {% skip_file if flag?(:api_only) %} module Invidious::Routes::Feeds + enum TrendingTypes + Default + Music + Gaming + Movies + end + def self.view_all_playlists_redirect(env) env.redirect "/feed/playlists" end @@ -44,13 +51,14 @@ module Invidious::Routes::Feeds end def self.trending(env) - locale = env.get("preferences").as(Preferences).locale + preferences = env.get("preferences").as(Preferences) + locale = preferences.locale trending_type = env.params.query["type"]? - trending_type ||= "Default" + trending_type ||= preferences.default_trending_type.to_s region = env.params.query["region"]? - region ||= env.get("preferences").as(Preferences).region + region ||= preferences.region begin trending, plid = fetch_trending(trending_type, region, locale) diff --git a/src/invidious/routes/preferences.cr b/src/invidious/routes/preferences.cr index f244261d..76b9466f 100644 --- a/src/invidious/routes/preferences.cr +++ b/src/invidious/routes/preferences.cr @@ -168,6 +168,9 @@ module Invidious::Routes::PreferencesRoute delete.reverse_each { |i| hidden_channels.delete_at(i) } end + default_trending_type = env.params.body["default_trending_type"]?.try &.as(String) + default_trending_type ||= Invidious::Routes::Feeds::TrendingTypes::Default + # Convert to JSON and back again to take advantage of converters used for compatibility preferences = Preferences.from_json({ annotations: annotations, @@ -205,6 +208,7 @@ module Invidious::Routes::PreferencesRoute show_nick: show_nick, save_player_pos: save_player_pos, hidden_channels: hidden_channels, + default_trending_type: default_trending_type, }.to_json) if user = env.get? "user" diff --git a/src/invidious/user/preferences.cr b/src/invidious/user/preferences.cr index 7f54c12f..44a1b078 100644 --- a/src/invidious/user/preferences.cr +++ b/src/invidious/user/preferences.cr @@ -57,6 +57,7 @@ struct Preferences property volume : Int32 = CONFIG.default_user_preferences.volume property save_player_pos : Bool = CONFIG.default_user_preferences.save_player_pos property hidden_channels : Array(String)? = nil + property default_trending_type : Invidious::Routes::Feeds::TrendingTypes = Invidious::Routes::Feeds::TrendingTypes::Default module BoolToString def self.to_json(value : String, json : JSON::Builder) diff --git a/src/invidious/views/feeds/trending.ecr b/src/invidious/views/feeds/trending.ecr index 93e90f78..a678b12b 100644 --- a/src/invidious/views/feeds/trending.ecr +++ b/src/invidious/views/feeds/trending.ecr @@ -21,7 +21,9 @@