diff --git a/locales/en-US.json b/locales/en-US.json index 6fd1ab0b..c541a7c7 100644 --- a/locales/en-US.json +++ b/locales/en-US.json @@ -124,6 +124,8 @@ "preferences_sort_label": "Sort videos by: ", "preferences_default_playlist": "Default playlist: ", "preferences_default_playlist_none": "No default playlist set", + "preferences_search_privacy_label": "Search privacy: ", + "preferences_search_privacy_description": "Enabling this preference will prevent your search queries to be saved in your browser history.", "published": "published", "published - reverse": "published - reverse", "alphabetically": "alphabetically", diff --git a/src/invidious/config.cr b/src/invidious/config.cr index 92c510d0..8b15bb93 100644 --- a/src/invidious/config.cr +++ b/src/invidious/config.cr @@ -54,6 +54,7 @@ struct ConfigPreferences property save_player_pos : Bool = false @[YAML::Field(ignore: true)] property default_playlist : String? = nil + property search_privacy : Bool = false def to_tuple {% begin %} diff --git a/src/invidious/routes/preferences.cr b/src/invidious/routes/preferences.cr index d9fad1b1..a2108b9b 100644 --- a/src/invidious/routes/preferences.cr +++ b/src/invidious/routes/preferences.cr @@ -145,6 +145,10 @@ module Invidious::Routes::PreferencesRoute default_playlist = env.params.body["default_playlist"]?.try &.as(String) + search_privacy = env.params.body["search_privacy"]?.try &.as(String) + search_privacy ||= "off" + search_privacy = search_privacy == "on" + # Convert to JSON and back again to take advantage of converters used for compatibility preferences = Preferences.from_json({ annotations: annotations, @@ -182,6 +186,7 @@ module Invidious::Routes::PreferencesRoute show_nick: show_nick, save_player_pos: save_player_pos, default_playlist: default_playlist, + search_privacy: search_privacy, }.to_json) if user = env.get? "user" diff --git a/src/invidious/routes/search.cr b/src/invidious/routes/search.cr index 11e6f171..968a5554 100644 --- a/src/invidious/routes/search.cr +++ b/src/invidious/routes/search.cr @@ -40,9 +40,16 @@ module Invidious::Routes::Search preferences = env.get("preferences").as(Preferences) locale = preferences.locale - region = env.params.query["region"]? || preferences.region + uri_params = URI::Params.new + if env.request.method == "GET" + uri_params = env.params.query + else + uri_params = env.params.body + end - query = Invidious::Search::Query.new(env.params.query, :regular, region) + region = uri_params["region"]? || preferences.region + + query = Invidious::Search::Query.new(uri_params, :regular, region) if query.empty? # Display the full page search box implemented in #1977 diff --git a/src/invidious/routing.cr b/src/invidious/routing.cr index a51bb4b6..bff17465 100644 --- a/src/invidious/routing.cr +++ b/src/invidious/routing.cr @@ -185,6 +185,7 @@ module Invidious::Routing get "/opensearch.xml", Routes::Search, :opensearch get "/results", Routes::Search, :results get "/search", Routes::Search, :search + post "/search", Routes::Search, :search get "/hashtag/:hashtag", Routes::Search, :hashtag end diff --git a/src/invidious/user/preferences.cr b/src/invidious/user/preferences.cr index df195dd6..ad4a9bc7 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 default_playlist : String? = nil + property search_privacy : Bool = CONFIG.default_user_preferences.search_privacy module BoolToString def self.to_json(value : String, json : JSON::Builder) diff --git a/src/invidious/views/components/search_box.ecr b/src/invidious/views/components/search_box.ecr index 29da2c52..ba343f0c 100644 --- a/src/invidious/views/components/search_box.ecr +++ b/src/invidious/views/components/search_box.ecr @@ -1,4 +1,12 @@ +<% + search_privacy = env.get("preferences").as(Preferences).search_privacy +%> + +<% if search_privacy %> +
+<% else %> +<% end %>
autofocus<% end %> diff --git a/src/invidious/views/search.ecr b/src/invidious/views/search.ecr index b1300214..30c3bc4c 100644 --- a/src/invidious/views/search.ecr +++ b/src/invidious/views/search.ecr @@ -1,5 +1,10 @@ +<% + search_privacy = env.get("preferences").as(Preferences).search_privacy + search_query = query.text.size > 30 ? HTML.escape(query.text[0,30].rstrip(".")) + "…" : HTML.escape(query.text) +%> + <% content_for "header" do %> -<%= query.text.size > 30 ? HTML.escape(query.text[0,30].rstrip(".")) + "…" : HTML.escape(query.text) %> - Invidious +<%= search_privacy ? "Search" : search_query %> - Invidious <% end %> diff --git a/src/invidious/views/user/preferences.ecr b/src/invidious/views/user/preferences.ecr index 23cb89f6..5944456f 100644 --- a/src/invidious/views/user/preferences.ecr +++ b/src/invidious/views/user/preferences.ecr @@ -221,6 +221,12 @@ checked<% end %>> +
+ + checked<% end %>> + +
+ <% if env.get? "user" %> <%= translate(locale, "preferences_category_subscription") %>