alamin655 commited on
Commit
d150832
·
unverified ·
2 Parent(s): 5c9559b 3d48920

Merge pull request #260 from neon-mmd/feat-inform-user-when-no-engines-are-selected

Browse files
Cargo.lock CHANGED
@@ -510,7 +510,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa"
510
  dependencies = [
511
  "camino",
512
  "cargo-platform",
513
- "semver 1.0.18",
514
  "serde",
515
  "serde_json",
516
  ]
@@ -2864,7 +2864,7 @@ version = "0.4.0"
2864
  source = "registry+https://github.com/rust-lang/crates.io-index"
2865
  checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
2866
  dependencies = [
2867
- "semver 1.0.18",
2868
  ]
2869
 
2870
  [[package]]
@@ -3002,9 +3002,9 @@ dependencies = [
3002
 
3003
  [[package]]
3004
  name = "semver"
3005
- version = "1.0.18"
3006
  source = "registry+https://github.com/rust-lang/crates.io-index"
3007
- checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
3008
  dependencies = [
3009
  "serde",
3010
  ]
@@ -3932,7 +3932,7 @@ dependencies = [
3932
 
3933
  [[package]]
3934
  name = "websurfx"
3935
- version = "0.22.0"
3936
  dependencies = [
3937
  "actix-cors",
3938
  "actix-files",
 
510
  dependencies = [
511
  "camino",
512
  "cargo-platform",
513
+ "semver 1.0.19",
514
  "serde",
515
  "serde_json",
516
  ]
 
2864
  source = "registry+https://github.com/rust-lang/crates.io-index"
2865
  checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
2866
  dependencies = [
2867
+ "semver 1.0.19",
2868
  ]
2869
 
2870
  [[package]]
 
3002
 
3003
  [[package]]
3004
  name = "semver"
3005
+ version = "1.0.19"
3006
  source = "registry+https://github.com/rust-lang/crates.io-index"
3007
+ checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0"
3008
  dependencies = [
3009
  "serde",
3010
  ]
 
3932
 
3933
  [[package]]
3934
  name = "websurfx"
3935
+ version = "0.23.0"
3936
  dependencies = [
3937
  "actix-cors",
3938
  "actix-files",
Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
  [package]
2
  name = "websurfx"
3
- version = "0.22.0"
4
  edition = "2021"
5
  description = "An open-source alternative to Searx that provides clean, ad-free, and organic results with incredible speed while keeping privacy and security in mind."
6
  repository = "https://github.com/neon-mmd/websurfx"
 
1
  [package]
2
  name = "websurfx"
3
+ version = "0.23.0"
4
  edition = "2021"
5
  description = "An open-source alternative to Searx that provides clean, ad-free, and organic results with incredible speed while keeping privacy and security in mind."
6
  repository = "https://github.com/neon-mmd/websurfx"
public/images/no_selection.png ADDED
public/static/themes/simple.css CHANGED
@@ -155,7 +155,8 @@ body {
155
  height: 1.2rem;
156
  }
157
  .results .result_disallowed,
158
- .results .result_filtered {
 
159
  display: flex;
160
  justify-content: center;
161
  align-items: center;
@@ -166,18 +167,21 @@ body {
166
  }
167
 
168
  .results .result_disallowed .user_query,
169
- .results .result_filtered .user_query {
 
170
  color: var(--background-color);
171
  font-weight: 300;
172
  }
173
 
174
  .results .result_disallowed img,
175
- .results .result_filtered img {
 
176
  width: 30rem;
177
  }
178
 
179
  .results .result_disallowed div,
180
- .results .result_filtered div {
 
181
  display: flex;
182
  flex-direction: column;
183
  gap: 1rem;
 
155
  height: 1.2rem;
156
  }
157
  .results .result_disallowed,
158
+ .results .result_filtered,
159
+ .results .result_engine_not_selected {
160
  display: flex;
161
  justify-content: center;
162
  align-items: center;
 
167
  }
168
 
169
  .results .result_disallowed .user_query,
170
+ .results .result_filtered .user_query,
171
+ .results .result_engine_not_selected .user_query {
172
  color: var(--background-color);
173
  font-weight: 300;
174
  }
175
 
176
  .results .result_disallowed img,
177
+ .results .result_filtered img,
178
+ .results .result_engine_not_selected img {
179
  width: 30rem;
180
  }
181
 
182
  .results .result_disallowed div,
183
+ .results .result_filtered div,
184
+ .results .result_engine_not_selected div {
185
  display: flex;
186
  flex-direction: column;
187
  gap: 1rem;
public/templates/search.html CHANGED
@@ -45,6 +45,20 @@
45
  </div>
46
  <img src="./images/filter.png" alt="Image of a paper inside a funnel" />
47
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  {{else}}
49
  <div class="result_not_found">
50
  <p>Your search - {{{this.pageQuery}}} - did not match any documents.</p>
@@ -56,7 +70,7 @@
56
  </ul>
57
  <img src="./images/no_results.gif" alt="Man fishing gif" />
58
  </div>
59
- {{/if}} {{/if}} {{/if}}
60
  </div>
61
  <div class="page_navigation">
62
  <button type="button" onclick="navigate_backward()">
 
45
  </div>
46
  <img src="./images/filter.png" alt="Image of a paper inside a funnel" />
47
  </div>
48
+ {{else}} {{#if noEnginesSelected}}
49
+ <div class="result_engine_not_selected">
50
+ <div class="description">
51
+ <p>
52
+ No results could be fetched for your search "<span class="user_query">{{{this.pageQuery}}}</span>" .
53
+ </p>
54
+ <p class="description_paragraph">Dear user,</p>
55
+ <p class="description_paragraph">
56
+ No results could be retrieved from the upstream search engines as no
57
+ upstream search engines were selected from the settings page.
58
+ </p>
59
+ </div>
60
+ <img src="./images/no_selection.png" alt="Image of a white cross inside a red circle" />
61
+ </div>
62
  {{else}}
63
  <div class="result_not_found">
64
  <p>Your search - {{{this.pageQuery}}} - did not match any documents.</p>
 
70
  </ul>
71
  <img src="./images/no_results.gif" alt="Man fishing gif" />
72
  </div>
73
+ {{/if}} {{/if}} {{/if}} {{/if}}
74
  </div>
75
  <div class="page_navigation">
76
  <button type="button" onclick="navigate_backward()">
src/models/aggregation_models.rs CHANGED
@@ -124,6 +124,9 @@ pub struct SearchResults {
124
  pub filtered: bool,
125
  /// Stores the safe search level `safesearch` provided in the search url.
126
  pub safe_search_level: u8,
 
 
 
127
  }
128
 
129
  impl SearchResults {
@@ -150,6 +153,7 @@ impl SearchResults {
150
  disallowed: Default::default(),
151
  filtered: Default::default(),
152
  safe_search_level: Default::default(),
 
153
  }
154
  }
155
 
@@ -186,4 +190,14 @@ impl SearchResults {
186
  pub fn set_safe_search_level(&mut self, safe_search_level: u8) {
187
  self.safe_search_level = safe_search_level;
188
  }
 
 
 
 
 
 
 
 
 
 
189
  }
 
124
  pub filtered: bool,
125
  /// Stores the safe search level `safesearch` provided in the search url.
126
  pub safe_search_level: u8,
127
+ /// Stores the flag option which holds the check value that whether any search engines were
128
+ /// selected or not.
129
+ pub no_engines_selected: bool,
130
  }
131
 
132
  impl SearchResults {
 
153
  disallowed: Default::default(),
154
  filtered: Default::default(),
155
  safe_search_level: Default::default(),
156
+ no_engines_selected: Default::default(),
157
  }
158
  }
159
 
 
190
  pub fn set_safe_search_level(&mut self, safe_search_level: u8) {
191
  self.safe_search_level = safe_search_level;
192
  }
193
+
194
+ /// A getter function that gets the value of `no_engines_selected`.
195
+ pub fn no_engines_selected(&self) -> bool {
196
+ self.no_engines_selected
197
+ }
198
+
199
+ /// A setter function to set the `no_engines_selected` to true.
200
+ pub fn set_no_engines_selected(&mut self) {
201
+ self.no_engines_selected = true;
202
+ }
203
  }
src/server/routes/search.rs CHANGED
@@ -205,16 +205,26 @@ async fn results(
205
  },
206
  };
207
 
208
- aggregate(
209
- query,
210
- page,
211
- config.aggregator.random_delay,
212
- config.debug,
213
- &engines,
214
- config.request_timeout,
215
- safe_search_level,
216
- )
217
- .await?
 
 
 
 
 
 
 
 
 
 
218
  }
219
  None => {
220
  aggregate(
@@ -229,7 +239,10 @@ async fn results(
229
  .await?
230
  }
231
  };
232
- if results.engine_errors_info().is_empty() && results.results().is_empty() {
 
 
 
233
  results.set_filtered();
234
  }
235
  results.add_style(&config.style);
 
205
  },
206
  };
207
 
208
+ match engines.is_empty() {
209
+ false => {
210
+ aggregate(
211
+ query,
212
+ page,
213
+ config.aggregator.random_delay,
214
+ config.debug,
215
+ &engines,
216
+ config.request_timeout,
217
+ safe_search_level,
218
+ )
219
+ .await?
220
+ }
221
+ true => {
222
+ let mut search_results = SearchResults::default();
223
+ search_results.set_no_engines_selected();
224
+ search_results.set_page_query(query);
225
+ search_results
226
+ }
227
+ }
228
  }
229
  None => {
230
  aggregate(
 
239
  .await?
240
  }
241
  };
242
+ if results.engine_errors_info().is_empty()
243
+ && results.results().is_empty()
244
+ && !results.no_engines_selected()
245
+ {
246
  results.set_filtered();
247
  }
248
  results.add_style(&config.style);