summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2020-09-02 17:27:22 +0200
committerSam Thursfield <sam@afuera.me.uk>2020-09-02 18:50:17 +0200
commite3031953e40b4fe067d566ac6c403127d7b6c266 (patch)
treed597b76a53dd82e934f9321138b7bb1b326cef8d
parent7712c2c7e10b3c28b2cc2ec8dfeeb8a89bd57945 (diff)
downloadnautilus-e3031953e40b4fe067d566ac6c403127d7b6c266.tar.gz
search: Remove special characters from FTS searches
This fixes warnings that would appear of this form: ** (org.gnome.Nautilus:662563): WARNING **: 17:11:13.712: Provider NautilusSearchEngineTracker failed with error fts5: syntax error near "."
-rw-r--r--src/nautilus-search-engine-tracker.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/nautilus-search-engine-tracker.c b/src/nautilus-search-engine-tracker.c
index 44f4a9cf6..dde3cab26 100644
--- a/src/nautilus-search-engine-tracker.c
+++ b/src/nautilus-search-engine-tracker.c
@@ -294,6 +294,31 @@ search_finished_idle (gpointer user_data)
*/
#define FILENAME_RANK "5.0"
+static gchar *
+filter_alnum_strdup (gchar *string)
+{
+ GString *filtered;
+ gchar *c;
+
+ filtered = g_string_new ("");
+ for (c = string; *c; c = g_utf8_next_char (c))
+ {
+ gunichar uc;
+
+ uc = g_utf8_get_char (c);
+ if (g_unichar_isalnum (uc))
+ {
+ g_string_append_unichar (filtered, uc);
+ }
+ else
+ {
+ g_string_append_c (filtered, ' ');
+ }
+ }
+
+ return g_string_free (filtered, FALSE);
+}
+
static void
nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
{
@@ -371,13 +396,16 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
if (tracker->fts_enabled)
{
/* Use fts:match only for content search to not lose some filename results due to stop words. */
+ g_autofree gchar *filtered_search_text;
+
+ filtered_search_text = filter_alnum_strdup (search_text);
g_string_append_printf (sparql,
" { "
" ?content nie:isStoredAs ?file ."
" ?content fts:match \"%s*\" ."
" BIND(fts:rank(?content) AS ?rank1) ."
" } UNION",
- search_text);
+ filtered_search_text);
}
g_string_append_printf (sparql,