diff options
author | Sam Thursfield <sam@afuera.me.uk> | 2020-09-02 17:27:22 +0200 |
---|---|---|
committer | Sam Thursfield <sam@afuera.me.uk> | 2020-09-02 18:50:17 +0200 |
commit | e3031953e40b4fe067d566ac6c403127d7b6c266 (patch) | |
tree | d597b76a53dd82e934f9321138b7bb1b326cef8d | |
parent | 7712c2c7e10b3c28b2cc2ec8dfeeb8a89bd57945 (diff) | |
download | nautilus-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.c | 30 |
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, |