From 664c66bd231c5d0ac20f6f4f14be461bfb206a1e Mon Sep 17 00:00:00 2001
From: Gilles Dartiguelongue <eva@gentoo.org>
Date: Sun, 27 May 2018 13:54:38 +0200
Subject: [PATCH] Make tracker support optional

---
 config.h.meson                      |  1 +
 meson.build                         | 15 ++++++++++++---
 meson_options.txt                   |  5 +++++
 src/meson.build                     | 19 ++++++++++++-------
 src/nautilus-file-undo-operations.c |  4 ++++
 src/nautilus-file.c                 |  2 ++
 src/nautilus-files-view.c           |  4 ++++
 src/nautilus-search-engine.c        | 14 ++++++++++++++
 8 files changed, 54 insertions(+), 10 deletions(-)

diff --git a/config.h.meson b/config.h.meson
index 4f5cb5848..58d71e96f 100644
--- a/config.h.meson
+++ b/config.h.meson
@@ -4,6 +4,7 @@
 #mesondefine HAVE_EXEMPI
 #mesondefine HAVE_EXIF
 #mesondefine HAVE_SELINUX
+#mesondefine HAVE_TRACKER
 #mesondefine ENABLE_DESKTOP
 #mesondefine ENABLE_PACKAGEKIT
 #mesondefine LOCALEDIR
diff --git a/meson.build b/meson.build
index 6256193cc..776111f81 100644
--- a/meson.build
+++ b/meson.build
@@ -81,9 +81,18 @@ if get_option ('enable-selinux')
     conf.set10 ('HAVE_SELINUX', true)
 endif
 
-tracker_sparql = dependency ('tracker-sparql-2.0', required: false)
-if not tracker_sparql.found()
-    tracker_sparql = dependency ('tracker-sparql-1.0')
+tracker_api = get_option ('tracker')
+if tracker_api == 'disabled'
+    # pass
+elif tracker_api == 'auto'
+    tracker_sparql = dependency ('tracker-sparql-2.0', required: false)
+    if not tracker_sparql.found()
+        tracker_sparql = dependency ('tracker-sparql-1.0')
+    endif
+    conf.set10 ('HAVE_TRACKER', true)
+else
+    tracker_sparql = dependency ('tracker-sparql-@0@'.format(tracker_api))
+    conf.set10 ('HAVE_TRACKER', true)
 endif
 
 if get_option ('enable-xmp')
diff --git a/meson_options.txt b/meson_options.txt
index c934dd8b1..d2ba885a2 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -8,6 +8,11 @@ option ('enable-exif',
         type: 'boolean',
         value: false,
         description: 'enable EXIF support')
+option ('tracker',
+        type: 'combo',
+        choices: ['auto', '1.0', '2.0', 'disabled'],
+        value: 'auto',
+        description: 'enable bulk renames and search using Tracker')
 option ('enable-xmp',
         type: 'boolean',
         value: false,
diff --git a/src/meson.build b/src/meson.build
index cc08345d8..40f337cde 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -254,12 +254,6 @@ libnautilus_sources = [
     'nautilus-file-undo-operations.h',
     'nautilus-file-undo-manager.c',
     'nautilus-file-undo-manager.h',
-    'nautilus-batch-rename-dialog.c',
-    'nautilus-batch-rename-dialog.h',
-    'nautilus-batch-rename-utilities.c',
-    'nautilus-batch-rename-utilities.h',
-    'nautilus-search-engine-tracker.c',
-    'nautilus-search-engine-tracker.h'
 ]
 
 nautilus_deps = [glib,
@@ -274,7 +268,6 @@ nautilus_deps = [glib,
                  nautilus_extension,
                  x11,
                  gmodule_no_export,
-                 tracker_sparql,
                  gio_unix]
 
 if get_option ('enable-exif')
@@ -289,6 +282,18 @@ if get_option ('enable-xmp')
     nautilus_deps += exempi
 endif
 
+if get_option ('tracker') != 'disabled'
+    libnautilus_sources += [
+        'nautilus-batch-rename-dialog.c',
+        'nautilus-batch-rename-dialog.h',
+        'nautilus-batch-rename-utilities.c',
+        'nautilus-batch-rename-utilities.h',
+        'nautilus-search-engine-tracker.c',
+        'nautilus-search-engine-tracker.h'
+    ]
+    nautilus_deps += tracker_sparql
+endif
+
 libnautilus = static_library ('nautilus',
                               libnautilus_sources,
                               dependencies: nautilus_deps,
diff --git a/src/nautilus-file-undo-operations.c b/src/nautilus-file-undo-operations.c
index e833d0578..d6e407ca5 100644
--- a/src/nautilus-file-undo-operations.c
+++ b/src/nautilus-file-undo-operations.c
@@ -31,8 +31,10 @@
 #include "nautilus-file-operations.h"
 #include "nautilus-file.h"
 #include "nautilus-file-undo-manager.h"
+#ifdef HAVE_TRACKER
 #include "nautilus-batch-rename-dialog.h"
 #include "nautilus-batch-rename-utilities.h"
+#endif
 
 
 /* Since we use g_get_current_time for setting "orig_trash_time" in the undo
@@ -1087,6 +1089,7 @@ nautilus_file_undo_info_rename_set_data_post (NautilusFileUndoInfoRename *self,
 }
 
 /* batch rename */
+#ifdef HAVE_TRACKER
 G_DEFINE_TYPE (NautilusFileUndoInfoBatchRename, nautilus_file_undo_info_batch_rename, NAUTILUS_TYPE_FILE_UNDO_INFO);
 
 struct _NautilusFileUndoInfoBatchRenameDetails
@@ -1303,6 +1306,7 @@ nautilus_file_undo_info_batch_rename_set_data_post (NautilusFileUndoInfoBatchRen
 
     self->priv->new_display_names = g_list_reverse (self->priv->new_display_names);
 }
+#endif
 
 /* trash */
 G_DEFINE_TYPE (NautilusFileUndoInfoTrash, nautilus_file_undo_info_trash, NAUTILUS_TYPE_FILE_UNDO_INFO)
diff --git a/src/nautilus-file.c b/src/nautilus-file.c
index d6ac35a44..752adc295 100644
--- a/src/nautilus-file.c
+++ b/src/nautilus-file.c
@@ -2392,6 +2392,7 @@ real_batch_rename (GList                         *files,
         }
     }
 
+#ifdef HAVE_TRACKER
     /* Tell the undo manager a batch rename is taking place if at least
      * a file has been renamed*/
     if (!nautilus_file_undo_manager_is_operating () && op->skipped_files != g_list_length (files))
@@ -2406,6 +2407,7 @@ real_batch_rename (GList                         *files,
 
         nautilus_file_undo_manager_set_action (op->undo_info);
     }
+#endif
 
     if (op->skipped_files == g_list_length (files))
     {
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index 8784f63f8..af5605d68 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -28,8 +28,10 @@
 #include "nautilus-files-view.h"
 
 #include "nautilus-application.h"
+#ifdef HAVE_TRACKER
 #include "nautilus-batch-rename-dialog.h"
 #include "nautilus-batch-rename-utilities.h"
+#endif
 #include "nautilus-error-reporting.h"
 #include "nautilus-file-undo-manager.h"
 #include "nautilus-floating-bar.h"
@@ -6266,6 +6268,7 @@ real_action_rename (NautilusFilesView *view)
             {
                 invoke_external_bulk_rename_utility (view, selection);
             }
+#ifdef HAVE_TRACKER
             else
             {
                 GdkCursor *cursor;
@@ -6283,6 +6286,7 @@ real_action_rename (NautilusFilesView *view)
 
                 gtk_widget_show (GTK_WIDGET (dialog));
             }
+#endif
         }
         else
         {
diff --git a/src/nautilus-search-engine.c b/src/nautilus-search-engine.c
index 209bd4f80..436cd7471 100644
--- a/src/nautilus-search-engine.c
+++ b/src/nautilus-search-engine.c
@@ -28,11 +28,15 @@
 #include "nautilus-search-engine-model.h"
 #define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
 #include "nautilus-debug.h"
+#ifdef HAVE_TRACKER
 #include "nautilus-search-engine-tracker.h"
+#endif
 
 typedef struct
 {
+#ifdef HAVE_TRACKER
     NautilusSearchEngineTracker *tracker;
+#endif
     NautilusSearchEngineSimple *simple;
     NautilusSearchEngineModel *model;
 
@@ -73,7 +77,9 @@ nautilus_search_engine_set_query (NautilusSearchProvider *provider,
     engine = NAUTILUS_SEARCH_ENGINE (provider);
     priv = nautilus_search_engine_get_instance_private (engine);
 
+#ifdef HAVE_TRACKER
     nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->tracker), query);
+#endif
     nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->model), query);
     nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->simple), query);
 }
@@ -95,8 +101,10 @@ search_engine_start_real (NautilusSearchEngine *engine)
 
     g_object_ref (engine);
 
+#ifdef HAVE_TRACKER
     nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (priv->tracker));
     priv->providers_running++;
+#endif
 
     if (nautilus_search_engine_model_get_model (priv->model))
     {
@@ -158,7 +166,9 @@ nautilus_search_engine_stop (NautilusSearchProvider *provider)
 
     DEBUG ("Search engine stop");
 
+#ifdef HAVE_TRACKER
     nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->tracker));
+#endif
     nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->model));
     nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->simple));
 
@@ -333,7 +343,9 @@ nautilus_search_engine_finalize (GObject *object)
 
     g_hash_table_destroy (priv->uris);
 
+#ifdef HAVE_TRACKER
     g_clear_object (&priv->tracker);
+#endif
     g_clear_object (&priv->model);
     g_clear_object (&priv->simple);
 
@@ -387,8 +399,10 @@ nautilus_search_engine_init (NautilusSearchEngine *engine)
     priv = nautilus_search_engine_get_instance_private (engine);
     priv->uris = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
 
+#ifdef HAVE_TRACKER
     priv->tracker = nautilus_search_engine_tracker_new ();
     connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (priv->tracker));
+#endif
 
     priv->model = nautilus_search_engine_model_new ();
     connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (priv->model));
-- 
2.17.0

