summaryrefslogtreecommitdiff
path: root/src/libtracker-direct/tracker-direct.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libtracker-direct/tracker-direct.c')
-rw-r--r--src/libtracker-direct/tracker-direct.c62
1 files changed, 18 insertions, 44 deletions
diff --git a/src/libtracker-direct/tracker-direct.c b/src/libtracker-direct/tracker-direct.c
index 348035624..c06256f9a 100644
--- a/src/libtracker-direct/tracker-direct.c
+++ b/src/libtracker-direct/tracker-direct.c
@@ -761,41 +761,6 @@ tracker_direct_connection_update_finish (TrackerSparqlConnection *self,
}
static void
-error_free (GError *error)
-{
- if (error)
- g_error_free (error);
-}
-
-static void
-update_array_async_thread_func (GTask *task,
- gpointer source_object,
- gpointer task_data,
- GCancellable *cancellable)
-{
- gchar **updates = task_data;
- gchar *concatenated;
- GPtrArray *errors;
- GError *error = NULL;
-
- errors = g_ptr_array_new_with_free_func ((GDestroyNotify) error_free);
- g_ptr_array_set_size (errors, g_strv_length (updates));
-
- concatenated = g_strjoinv ("\n", updates);
- tracker_sparql_connection_update (source_object, concatenated,
- g_task_get_priority (task),
- cancellable, &error);
- g_free (concatenated);
-
- if (error)
- g_task_return_error (task, error);
- else
- g_task_return_boolean (task, TRUE);
-
- g_object_unref (task);
-}
-
-static void
tracker_direct_connection_update_array_async (TrackerSparqlConnection *self,
gchar **updates,
gint n_updates,
@@ -804,22 +769,31 @@ tracker_direct_connection_update_array_async (TrackerSparqlConnection *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
+ TrackerDirectConnectionPrivate *priv;
+ TrackerDirectConnection *conn;
+ TaskData *task_data;
GTask *task;
- gchar **copy;
- gint i = 0;
+ gchar *concatenated;
+ gchar **array_copy;
- copy = g_new0 (gchar*, n_updates + 1);
+ conn = TRACKER_DIRECT_CONNECTION (self);
+ priv = tracker_direct_connection_get_instance_private (conn);
- for (i = 0; i < n_updates; i++) {
- g_return_if_fail (updates[i] != NULL);
- copy[i] = g_strdup (updates[i]);
- }
+ /* Make a NULL-terminated array and concatenate it */
+ array_copy = g_new0 (gchar *, n_updates + 1);
+ memcpy (array_copy, updates, n_updates * sizeof (gchar *));
+ concatenated = g_strjoinv ("\n", array_copy);
+ g_free (array_copy);
+
+ task_data = task_data_query_new (TASK_TYPE_UPDATE, NULL);
+ task_data->query = concatenated;
task = g_task_new (self, cancellable, callback, user_data);
g_task_set_priority (task, priority);
- g_task_set_task_data (task, copy, (GDestroyNotify) g_strfreev);
+ g_task_set_task_data (task, task_data,
+ (GDestroyNotify) task_data_free);
- g_task_run_in_thread (task, update_array_async_thread_func);
+ g_thread_pool_push (priv->update_thread, task, NULL);
}
static gboolean