[tracker] libtracker-miner: Implement ->end* vtable API for TrackerFileDataProvider



commit 97e4794c0bff0136a89277d2e0b90d04531e90e0
Author: Martyn Russell <martyn lanedo com>
Date:   Tue Aug 26 17:13:35 2014 +0100

    libtracker-miner: Implement ->end* vtable API for TrackerFileDataProvider

 src/libtracker-miner/tracker-file-data-provider.c |   70 ++++++++++++++++++++-
 1 files changed, 69 insertions(+), 1 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-file-data-provider.c 
b/src/libtracker-miner/tracker-file-data-provider.c
index 91047f4..8e72fbd 100644
--- a/src/libtracker-miner/tracker-file-data-provider.c
+++ b/src/libtracker-miner/tracker-file-data-provider.c
@@ -87,7 +87,7 @@ file_data_provider_get_crawl_flags (TrackerDataProvider *data_provider)
 
 static void
 file_data_provider_set_crawl_flags (TrackerDataProvider *data_provider,
-                                 TrackerCrawlFlags  flags)
+                                    TrackerCrawlFlags  flags)
 {
        TrackerFileDataProvider *fe;
 
@@ -225,6 +225,71 @@ file_data_provider_begin_finish (TrackerDataProvider  *data_provider,
        return g_task_propagate_pointer (G_TASK (result), error);
 }
 
+static gboolean
+file_data_provider_end (TrackerDataProvider  *data_provider,
+                        TrackerEnumerator    *enumerator,
+                        GCancellable         *cancellable,
+                        GError              **error)
+{
+       if (g_cancellable_set_error_if_cancelled (cancellable, error)) {
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+static void
+file_data_provider_end_thread (GTask        *task,
+                               gpointer      source_object,
+                               gpointer      task_data,
+                               GCancellable *cancellable)
+{
+       TrackerDataProvider *data_provider = source_object;
+       TrackerEnumerator *enumerator = task_data;
+       GError *error = NULL;
+       gboolean success = FALSE;
+
+       if (!g_cancellable_set_error_if_cancelled (cancellable, &error)) {
+               success = file_data_provider_end (data_provider,
+                                                 enumerator,
+                                                 cancellable,
+                                                 &error);
+       }
+
+       if (error) {
+               g_task_return_error (task, error);
+       } else {
+               g_task_return_boolean (task, success);
+       }
+}
+
+static void
+file_data_provider_end_async (TrackerDataProvider  *data_provider,
+                              TrackerEnumerator    *enumerator,
+                              int                   io_priority,
+                              GCancellable         *cancellable,
+                              GAsyncReadyCallback   callback,
+                              gpointer              user_data)
+{
+       GTask *task;
+
+       task = g_task_new (data_provider, cancellable, callback, user_data);
+       g_task_set_task_data (task, g_object_ref (enumerator), (GDestroyNotify) g_object_unref);
+       g_task_set_priority (task, io_priority);
+       g_task_run_in_thread (task, file_data_provider_end_thread);
+       g_object_unref (task);
+}
+
+static gboolean
+file_data_provider_end_finish (TrackerDataProvider  *data_provider,
+                               GAsyncResult         *result,
+                               GError              **error)
+{
+       g_return_val_if_fail (g_task_is_valid (result, data_provider), NULL);
+
+       return g_task_propagate_boolean (G_TASK (result), error);
+}
+
 static void
 tracker_file_data_provider_file_iface_init (TrackerDataProviderIface *iface)
 {
@@ -233,6 +298,9 @@ tracker_file_data_provider_file_iface_init (TrackerDataProviderIface *iface)
        iface->begin = file_data_provider_begin;
        iface->begin_async = file_data_provider_begin_async;
        iface->begin_finish = file_data_provider_begin_finish;
+       iface->end = file_data_provider_end;
+       iface->end_async = file_data_provider_end_async;
+       iface->end_finish = file_data_provider_end_finish;
 }
 
 /**


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