diff options
author | Cosimo Cecchi <cosimoc@gnome.org> | 2013-03-04 16:42:24 -0500 |
---|---|---|
committer | Martyn Russell <martyn@lanedo.com> | 2013-03-05 20:36:15 +0000 |
commit | 033b64f7f15b8551b0d5433baa0377bbf615aebc (patch) | |
tree | 76eeb36e100da41e41cf216bafcbe9f019ad81f9 | |
parent | 133c5894a29c7e09681d9b54871abe5fe5e45ae1 (diff) | |
download | tracker-033b64f7f15b8551b0d5433baa0377bbf615aebc.tar.gz |
libtracker-miner: add an async version of tracker_miner_manager_index_file
tracker_miner_manager_index_file is synchronous. This commit adds an
asynchronous and cancellable version of the same function.
https://bugzilla.gnome.org/show_bug.cgi?id=695157
--
This also bumps the GLib requirement up to 2.35.1 from 2.28.0 for GTask use.
GLib 2.35.x should be available in Ubuntu Raring and Fedora 19.
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | docs/reference/libtracker-miner/libtracker-miner-sections.txt | 2 | ||||
-rw-r--r-- | src/libtracker-miner/tracker-miner-manager.c | 122 | ||||
-rw-r--r-- | src/libtracker-miner/tracker-miner-manager.h | 8 |
4 files changed, 110 insertions, 24 deletions
diff --git a/configure.ac b/configure.ac index b37983cb5..ba7fdee5b 100644 --- a/configure.ac +++ b/configure.ac @@ -162,7 +162,7 @@ PYTHON_REQUIRED=2.6 # Library required versions DBUS_REQUIRED=1.3.1 -GLIB_REQUIRED=2.28.0 +GLIB_REQUIRED=2.35.1 PANGO_REQUIRED=1.0.0 GTK_REQUIRED=3.0.0 LIBXML2_REQUIRED=2.6 diff --git a/docs/reference/libtracker-miner/libtracker-miner-sections.txt b/docs/reference/libtracker-miner/libtracker-miner-sections.txt index 818790280..80cb5da1f 100644 --- a/docs/reference/libtracker-miner/libtracker-miner-sections.txt +++ b/docs/reference/libtracker-miner/libtracker-miner-sections.txt @@ -117,6 +117,8 @@ tracker_miner_manager_get_running tracker_miner_manager_get_status tracker_miner_manager_ignore_next_update tracker_miner_manager_index_file +tracker_miner_manager_index_file_async +tracker_miner_manager_index_file_finish tracker_miner_manager_is_active tracker_miner_manager_is_paused tracker_miner_manager_new diff --git a/src/libtracker-miner/tracker-miner-manager.c b/src/libtracker-miner/tracker-miner-manager.c index e22cb280b..006e54fd4 100644 --- a/src/libtracker-miner/tracker-miner-manager.c +++ b/src/libtracker-miner/tracker-miner-manager.c @@ -1481,34 +1481,18 @@ tracker_miner_manager_reindex_by_mimetype (TrackerMinerManager *manager, return FALSE; } -/** - * tracker_miner_manager_index_file: - * @manager: a #TrackerMinerManager - * @file: a URL valid in GIO of a file to give to the miner for processing - * @error: (out callee-allocates) (transfer full) (allow-none): return location for errors - * - * Tells the filesystem miner to index the @file. - * - * On failure @error will be set. - * - * Returns: %TRUE on success, otherwise %FALSE. - * - * Since: 0.10 - **/ -gboolean -tracker_miner_manager_index_file (TrackerMinerManager *manager, - GFile *file, - GError **error) +static gboolean +miner_manager_index_file_sync (TrackerMinerManager *manager, + GFile *file, + GCancellable *cancellable, + GError **error) { TrackerMinerManagerPrivate *priv; gchar *uri; GVariant *v; GError *new_error = NULL; - g_return_val_if_fail (TRACKER_IS_MINER_MANAGER (manager), FALSE); - g_return_val_if_fail (G_IS_FILE (file), FALSE); - - if (!g_file_query_exists (file, NULL)) { + if (!g_file_query_exists (file, cancellable)) { g_set_error_literal (error, TRACKER_MINER_MANAGER_ERROR, TRACKER_MINER_MANAGER_ERROR_NOENT, @@ -1538,7 +1522,7 @@ tracker_miner_manager_index_file (TrackerMinerManager *manager, NULL, G_DBUS_CALL_FLAGS_NONE, -1, - NULL, + cancellable, &new_error); g_free (uri); @@ -1552,3 +1536,95 @@ tracker_miner_manager_index_file (TrackerMinerManager *manager, return FALSE; } + +static void +miner_manager_index_file_thread (GTask *task, + gpointer source_object, + gpointer task_data, + GCancellable *cancellable) +{ + TrackerMinerManager *manager = source_object; + GFile *file = task_data; + GError *error = NULL; + + miner_manager_index_file_sync (manager, file, cancellable, &error); + if (error != NULL) { + g_task_return_error (task, error); + } else { + g_task_return_boolean (task, TRUE); + } +} + +/** + * tracker_miner_manager_index_file: + * @manager: a #TrackerMinerManager + * @file: a URL valid in GIO of a file to give to the miner for processing + * @error: (out callee-allocates) (transfer full) (allow-none): return location for errors + * + * Tells the filesystem miner to index the @file. + * + * On failure @error will be set. + * + * Returns: %TRUE on success, otherwise %FALSE. + * + * Since: 0.10 + **/ +gboolean +tracker_miner_manager_index_file (TrackerMinerManager *manager, + GFile *file, + GError **error) +{ + g_return_val_if_fail (TRACKER_IS_MINER_MANAGER (manager), FALSE); + g_return_val_if_fail (G_IS_FILE (file), FALSE); + + return miner_manager_index_file_sync (manager, file, NULL, error); +} + +/** + * tracker_miner_manager_index_file_async: + * @manager: a #TrackerMinerManager + * @file: a URL valid in GIO of a file to give to the miner for processing + * @cancellable: (allow-none): a #GCancellable, or %NULL + * @callback: (scope async): a #GAsyncReadyCallback to call when the request is satisfied + * @user_data: the data to pass to the callback function + * + * Tells the filesystem miner to index the @file. When the operation is called, + * @callback will be called. You can then call tracker_miner_manager_index_file_finish() + * to get the result of the operation. + * + * Since: 0.16 + **/ +void +tracker_miner_manager_index_file_async (TrackerMinerManager *manager, + GFile *file, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GTask *task = g_task_new (manager, cancellable, callback, user_data); + g_task_set_task_data (task, g_object_ref (file), (GDestroyNotify) g_object_unref); + g_task_run_in_thread (task, miner_manager_index_file_thread); + g_object_unref (task); +} + +/** + * tracker_miner_manager_index_file_finish: + * @manager: a #TrackerMinerManager + * @result: a #GAsyncResult + * @error: (out callee-allocates) (transfer full) (allow-none): return location for errors + * + * Finishes a request to index a file. See tracker_miner_manager_index_file_async() + * + * On failure @error will be set. + * + * Returns: %TRUE on success, otherwise %FALSE. + * + * Since: 0.16 + **/ +gboolean +tracker_miner_manager_index_file_finish (TrackerMinerManager *manager, + GAsyncResult *result, + GError **error) +{ + return g_task_propagate_boolean (G_TASK (result), error); +} diff --git a/src/libtracker-miner/tracker-miner-manager.h b/src/libtracker-miner/tracker-miner-manager.h index 1e94344ca..69c841ba2 100644 --- a/src/libtracker-miner/tracker-miner-manager.h +++ b/src/libtracker-miner/tracker-miner-manager.h @@ -134,6 +134,14 @@ gboolean tracker_miner_manager_reindex_by_mimetype (TrackerMinerMana gboolean tracker_miner_manager_index_file (TrackerMinerManager *manager, GFile *file, GError **error); +void tracker_miner_manager_index_file_async (TrackerMinerManager *manager, + GFile *file, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean tracker_miner_manager_index_file_finish (TrackerMinerManager *manager, + GAsyncResult *result, + GError **error); #ifndef TRACKER_DISABLE_DEPRECATED gboolean tracker_miner_manager_ignore_next_update (TrackerMinerManager *manager, |