[nautilus] search-engine: add is_recursive_search function and use it



commit de36e000f4bf38fdf4698126bae0dcc49bd9ffbc
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Thu Jun 7 14:34:05 2018 +0200

    search-engine: add is_recursive_search function and use it
    
    Returns whether the search should be recursive given the location and the
    search engine type.
    
    Using this both in tracker and simple search engines.

 src/meson.build                      |  1 +
 src/nautilus-search-engine-private.h | 31 +++++++++++++++++++++++++++++++
 src/nautilus-search-engine-simple.c  | 26 +++++++-------------------
 src/nautilus-search-engine-tracker.c | 21 ++++++---------------
 src/nautilus-search-engine.c         | 35 +++++++++++++++++++++++++++++++----
 5 files changed, 76 insertions(+), 38 deletions(-)
---
diff --git a/src/meson.build b/src/meson.build
index d3b44c414..e211fc3db 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -225,6 +225,7 @@ libnautilus_sources = [
   'nautilus-search-provider.h',
   'nautilus-search-engine.c',
   'nautilus-search-engine.h',
+  'nautilus-search-engine-private.h',
   'nautilus-search-engine-model.c',
   'nautilus-search-engine-model.h',
   'nautilus-search-engine-simple.c',
diff --git a/src/nautilus-search-engine-private.h b/src/nautilus-search-engine-private.h
new file mode 100644
index 000000000..e5f989fce
--- /dev/null
+++ b/src/nautilus-search-engine-private.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2018 Canonical Ltd.
+ *
+ * Nautilus is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * Nautilus is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; see the file COPYING.  If not,
+ * see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Marco Trevisan <marco ubuntu com>
+ *
+ */
+
+#pragma once
+
+#include "nautilus-query.h"
+
+typedef enum {
+        NAUTILUS_SEARCH_ENGINE_TYPE_NON_INDEXED,
+        NAUTILUS_SEARCH_ENGINE_TYPE_INDEXED,
+} NautilusSearchEngineType;
+
+gboolean is_recursive_search (NautilusSearchEngineType engine_type, NautilusQueryRecursive recursive, GFile 
*location);
diff --git a/src/nautilus-search-engine-simple.c b/src/nautilus-search-engine-simple.c
index fbe1bdc81..32ac41734 100644
--- a/src/nautilus-search-engine-simple.c
+++ b/src/nautilus-search-engine-simple.c
@@ -20,9 +20,9 @@
  */
 
 #include <config.h>
-#include "nautilus-file.h"
 #include "nautilus-search-engine-simple.h"
 
+#include "nautilus-search-engine-private.h"
 #include "nautilus-search-hit.h"
 #include "nautilus-search-provider.h"
 #include "nautilus-ui-utilities.h"
@@ -209,7 +209,7 @@ visit_directory (GFile            *dir,
 {
     g_autoptr (GPtrArray) date_range = NULL;
     NautilusQuerySearchType type;
-    NautilusQueryRecursive recursive_flag;
+    NautilusQueryRecursive recursive;
     GFileEnumerator *enumerator;
     GFileInfo *info;
     GFile *child;
@@ -241,12 +241,11 @@ visit_directory (GFile            *dir,
     }
 
     type = nautilus_query_get_search_type (data->query);
-    recursive_flag = nautilus_query_get_recursive (data->query);
+    recursive = nautilus_query_get_recursive (data->query);
     date_range = nautilus_query_get_date_range (data->query);
 
     while ((info = g_file_enumerator_next_file (enumerator, data->cancellable, NULL)) != NULL)
     {
-        gboolean recursive = FALSE;
         display_name = g_file_info_get_display_name (info);
         if (display_name == NULL)
         {
@@ -323,21 +322,10 @@ visit_directory (GFile            *dir,
             send_batch (data);
         }
 
-        if (recursive_flag != NAUTILUS_QUERY_RECURSIVE_NEVER &&
-            g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
-        {
-            if (recursive_flag == NAUTILUS_QUERY_RECURSIVE_ALWAYS)
-            {
-                recursive = TRUE;
-            }
-            else if (recursive_flag == NAUTILUS_QUERY_RECURSIVE_LOCAL_ONLY)
-            {
-                g_autoptr (NautilusFile) file = nautilus_file_get (child);
-                recursive = !nautilus_file_is_remote (file);
-            }
-        }
-
-        if (recursive)
+        if (recursive != NAUTILUS_QUERY_RECURSIVE_NEVER &&
+            g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY &&
+            is_recursive_search (NAUTILUS_SEARCH_ENGINE_TYPE_NON_INDEXED,
+                                 recursive, child))
         {
             id = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_ID_FILE);
             visited = FALSE;
diff --git a/src/nautilus-search-engine-tracker.c b/src/nautilus-search-engine-tracker.c
index 2eab75b55..267fb06b7 100644
--- a/src/nautilus-search-engine-tracker.c
+++ b/src/nautilus-search-engine-tracker.c
@@ -22,7 +22,7 @@
 #include <config.h>
 #include "nautilus-search-engine-tracker.h"
 
-#include "nautilus-file.h"
+#include "nautilus-search-engine-private.h"
 #include "nautilus-search-hit.h"
 #include "nautilus-search-provider.h"
 #define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
@@ -464,27 +464,18 @@ static void
 nautilus_search_engine_tracker_set_query (NautilusSearchProvider *provider,
                                           NautilusQuery          *query)
 {
+    g_autoptr(GFile) location = NULL;
     NautilusSearchEngineTracker *tracker;
-    NautilusQueryRecursive recursive;
 
     tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
-    recursive = nautilus_query_get_recursive (query);
+    location = nautilus_query_get_location (query);
 
     g_clear_object (&tracker->query);
 
     tracker->query = g_object_ref (query);
-
-    if (recursive == NAUTILUS_QUERY_RECURSIVE_LOCAL_ONLY)
-    {
-        g_autoptr (GFile) location = nautilus_query_get_location (query);
-        g_autoptr (NautilusFile) location_file = nautilus_file_get (location);
-        tracker->recursive = !nautilus_file_is_remote (location_file);
-    }
-    else
-    {
-      tracker->recursive = recursive == NAUTILUS_QUERY_RECURSIVE_ALWAYS ||
-                           recursive == NAUTILUS_QUERY_RECURSIVE_INDEXED_ONLY;
-    }
+    tracker->recursive = is_recursive_search (NAUTILUS_SEARCH_ENGINE_TYPE_INDEXED,
+                                              nautilus_query_get_recursive (query),
+                                              location);
 }
 
 static gboolean
diff --git a/src/nautilus-search-engine.c b/src/nautilus-search-engine.c
index 16c6a08df..79d592d16 100644
--- a/src/nautilus-search-engine.c
+++ b/src/nautilus-search-engine.c
@@ -20,12 +20,13 @@
  */
 
 #include <config.h>
-
-#include <glib/gi18n.h>
-#include "nautilus-search-provider.h"
 #include "nautilus-search-engine.h"
-#include "nautilus-search-engine-simple.h"
+#include "nautilus-search-engine-private.h"
+
+#include "nautilus-file.h"
 #include "nautilus-search-engine-model.h"
+#include "nautilus-search-provider.h"
+#include <glib/gi18n.h>
 #define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
 #include "nautilus-debug.h"
 #include "nautilus-search-engine-tracker.h"
@@ -416,3 +417,29 @@ nautilus_search_engine_get_model_provider (NautilusSearchEngine *engine)
 
     return priv->model;
 }
+
+gboolean
+is_recursive_search (NautilusSearchEngineType  engine_type,
+                     NautilusQueryRecursive    recursive,
+                     GFile                    *location)
+{
+    switch (recursive)
+    {
+        case NAUTILUS_QUERY_RECURSIVE_NEVER:
+            return FALSE;
+
+        case NAUTILUS_QUERY_RECURSIVE_ALWAYS:
+            return TRUE;
+
+        case NAUTILUS_QUERY_RECURSIVE_INDEXED_ONLY:
+            return engine_type == NAUTILUS_SEARCH_ENGINE_TYPE_INDEXED;
+
+        case NAUTILUS_QUERY_RECURSIVE_LOCAL_ONLY:
+        {
+            g_autoptr (NautilusFile) file = nautilus_file_get (location);
+            return !nautilus_file_is_remote (file);
+        }
+    }
+
+    return TRUE;
+}


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