[nautilus] search-engine: add is_recursive_search function and use it
- From: Carlos Soriano <csoriano src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] search-engine: add is_recursive_search function and use it
- Date: Thu, 26 Jul 2018 05:49:05 +0000 (UTC)
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]