Skip to content

Commit 2f67855

Browse files
committed
feat: Add support for POST requests on searches for privacy
Use already set preferences variable Use span for description, grammar fix from Copilot
1 parent 66c67f4 commit 2f67855

File tree

10 files changed

+46
-3
lines changed

10 files changed

+46
-3
lines changed

assets/css/default.css

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -887,4 +887,11 @@ h1, h2, h3, h4, h5, p,
887887
.error-issue-template {
888888
padding: 20px;
889889
background: rgba(0, 0, 0, 0.12345);
890+
}
891+
892+
.preference-description {
893+
width: 250px;
894+
padding-left: 10px;
895+
display: inline-block;
896+
vertical-align: top;
890897
}

locales/en-US.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@
124124
"preferences_sort_label": "Sort videos by: ",
125125
"preferences_default_playlist": "Default playlist: ",
126126
"preferences_default_playlist_none": "No default playlist set",
127+
"preferences_search_privacy_label": "Search privacy: ",
128+
"preferences_search_privacy_description": "Enabling this preference will prevent your search queries from being saved in your browser history.",
127129
"published": "published",
128130
"published - reverse": "published - reverse",
129131
"alphabetically": "alphabetically",

src/invidious/config.cr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ struct ConfigPreferences
5454
property save_player_pos : Bool = false
5555
@[YAML::Field(ignore: true)]
5656
property default_playlist : String? = nil
57+
property search_privacy : Bool = false
5758

5859
def to_tuple
5960
{% begin %}

src/invidious/routes/preferences.cr

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ module Invidious::Routes::PreferencesRoute
145145

146146
default_playlist = env.params.body["default_playlist"]?.try &.as(String)
147147

148+
search_privacy = env.params.body["search_privacy"]?.try &.as(String)
149+
search_privacy ||= "off"
150+
search_privacy = search_privacy == "on"
151+
148152
# Convert to JSON and back again to take advantage of converters used for compatibility
149153
preferences = Preferences.from_json({
150154
annotations: annotations,
@@ -182,6 +186,7 @@ module Invidious::Routes::PreferencesRoute
182186
show_nick: show_nick,
183187
save_player_pos: save_player_pos,
184188
default_playlist: default_playlist,
189+
search_privacy: search_privacy,
185190
}.to_json)
186191

187192
if user = env.get? "user"

src/invidious/routes/search.cr

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,16 @@ module Invidious::Routes::Search
4040
preferences = env.get("preferences").as(Preferences)
4141
locale = preferences.locale
4242

43-
region = env.params.query["region"]? || preferences.region
43+
uri_params = URI::Params.new
44+
if env.request.method == "GET"
45+
uri_params = env.params.query
46+
else
47+
uri_params = env.params.body
48+
end
49+
50+
region = uri_params["region"]? || preferences.region
4451

45-
query = Invidious::Search::Query.new(env.params.query, :regular, region)
52+
query = Invidious::Search::Query.new(uri_params, :regular, region)
4653

4754
if query.empty?
4855
# Display the full page search box implemented in #1977

src/invidious/routing.cr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ module Invidious::Routing
185185
get "/opensearch.xml", Routes::Search, :opensearch
186186
get "/results", Routes::Search, :results
187187
get "/search", Routes::Search, :search
188+
post "/search", Routes::Search, :search
188189
get "/hashtag/:hashtag", Routes::Search, :hashtag
189190
end
190191

src/invidious/user/preferences.cr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ struct Preferences
5757
property volume : Int32 = CONFIG.default_user_preferences.volume
5858
property save_player_pos : Bool = CONFIG.default_user_preferences.save_player_pos
5959
property default_playlist : String? = nil
60+
property search_privacy : Bool = CONFIG.default_user_preferences.search_privacy
6061

6162
module BoolToString
6263
def self.to_json(value : String, json : JSON::Builder)

src/invidious/views/components/search_box.ecr

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1+
<%
2+
search_privacy = preferences.search_privacy
3+
%>
4+
5+
<% if search_privacy %>
6+
<form class="pure-form" action="/search" method="post">
7+
<% else %>
18
<form class="pure-form" action="/search" method="get">
9+
<% end %>
210
<fieldset>
311
<input type="search" id="searchbox" autocorrect="off"
412
autocapitalize="none" spellcheck="false" <% if autofocus %>autofocus<% end %>

src/invidious/views/search.ecr

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
<%
2+
search_privacy = preferences.search_privacy
3+
search_query = query.text.size > 30 ? HTML.escape(query.text[0,30].rstrip(".")) + "&hellip;" : HTML.escape(query.text)
4+
%>
5+
16
<% content_for "header" do %>
2-
<title><%= query.text.size > 30 ? HTML.escape(query.text[0,30].rstrip(".")) + "&hellip;" : HTML.escape(query.text) %> - Invidious</title>
7+
<title><%= search_privacy ? "Search" : search_query %> - Invidious</title>
38
<link rel="stylesheet" href="/css/search.css?v=<%= ASSET_COMMIT %>">
49
<% end %>
510

src/invidious/views/user/preferences.ecr

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,12 @@
221221
<input name="automatic_instance_redirect" id="automatic_instance_redirect" type="checkbox" <% if preferences.automatic_instance_redirect %>checked<% end %>>
222222
</div>
223223

224+
<div class="pure-control-group">
225+
<label for="search_privacy"><%= translate(locale, "preferences_search_privacy_label") %></label>
226+
<input name="search_privacy" id="search_privacy" type="checkbox" <% if preferences.search_privacy %>checked<% end %>>
227+
<span class="preference-description"><%= translate(locale, "preferences_search_privacy_description") %></span>
228+
</div>
229+
224230
<% if env.get? "user" %>
225231
<legend><%= translate(locale, "preferences_category_subscription") %></legend>
226232

0 commit comments

Comments
 (0)