static void
async_update_array_callback (GObject      *source_object,
                             GAsyncResult *result,
                             gpointer      user_data)
{
	AsyncData *data = user_data;
	GError *error = NULL;
	GPtrArray *errors;

	errors = tracker_sparql_connection_update_array_finish (connection, result, &error);
	g_assert_no_error (error);
	g_ptr_array_unref (errors);
	g_main_loop_quit (data->main_loop);
}
Esempio n. 2
0
static void
decorator_commit_cb (GObject      *object,
                     GAsyncResult *result,
                     gpointer      user_data)
{
	TrackerSparqlConnection *conn;
	TrackerDecoratorPrivate *priv;
	TrackerDecorator *decorator;
	GError *error = NULL;
	GPtrArray *errors;
	guint i;

	decorator = user_data;
	priv = decorator->priv;
	conn = TRACKER_SPARQL_CONNECTION (object);
	errors = tracker_sparql_connection_update_array_finish (conn, result, &error);

	if (error) {
		g_warning ("There was an error pushing metadata: %s\n", error->message);
	}

	if (errors) {
		for (i = 0; i < errors->len; i++) {
			SparqlUpdate *update;
			GError *child_error;

			child_error = g_ptr_array_index (errors, i);
			update = &g_array_index (priv->commit_buffer, SparqlUpdate, i);

			if (!child_error)
				continue;

			decorator_blacklist_add (decorator, update->id);
			item_warn (conn, update->id, update->sparql, child_error);
		}

		g_ptr_array_unref (errors);
	}

	g_clear_pointer (&priv->commit_buffer, (GDestroyNotify) g_array_unref);

	if (!decorator_check_commit (decorator))
		decorator_cache_next_items (decorator);
}