[nautilus/sam/tracker-3: 1/6] search: Remove special characters from FTS searches




commit e3031953e40b4fe067d566ac6c403127d7b6c266
Author: Sam Thursfield <sam afuera me uk>
Date:   Wed Sep 2 17:27:22 2020 +0200

    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 "."

 src/nautilus-search-engine-tracker.c | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)
---
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,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]