static void photos_create_collection_job_query_executed (GObject *source_object, GAsyncResult *res, gpointer user_data) { PhotosCreateCollectionJob *self = PHOTOS_CREATE_COLLECTION_JOB (user_data); TrackerSparqlConnection *connection = TRACKER_SPARQL_CONNECTION (source_object); GError *error; GVariant *variant; GVariant *child; gchar *key = NULL; gchar *val = NULL; error = NULL; variant = tracker_sparql_connection_update_blank_finish (connection, res, &error); if (error != NULL) { g_warning ("Unable to create collection: %s", error->message); g_error_free (error); goto out; } child = g_variant_get_child_value (variant, 0); /* variant is now aa{ss} */ g_variant_unref (variant); variant = child; child = g_variant_get_child_value (variant, 0); /* variant is now s{ss} */ g_variant_unref (variant); variant = child; child = g_variant_get_child_value (variant, 0); /* variant is now {ss} */ g_variant_unref (variant); variant = child; child = g_variant_get_child_value (variant, 0); key = g_variant_dup_string (child, NULL); g_variant_unref (child); child = g_variant_get_child_value (variant, 1); val = g_variant_dup_string (child, NULL); g_variant_unref (child); g_variant_unref (variant); if (g_strcmp0 (key, "res") == 0) self->created_urn = val; out: if (self->callback != NULL) (*self->callback) (self->created_urn, self->user_data); self->created_urn = NULL; g_free (val); g_free (key); }
static void photos_create_collection_job_query_executed (GObject *source_object, GAsyncResult *res, gpointer user_data) { GTask *task = G_TASK (user_data); TrackerSparqlConnection *connection = TRACKER_SPARQL_CONNECTION (source_object); GError *error; GVariant *variant; GVariant *child; gchar *key = NULL; gchar *val = NULL; error = NULL; variant = tracker_sparql_connection_update_blank_finish (connection, res, &error); if (error != NULL) { g_task_return_error (task, error); return; } child = g_variant_get_child_value (variant, 0); /* variant is now aa{ss} */ g_variant_unref (variant); variant = child; child = g_variant_get_child_value (variant, 0); /* variant is now s{ss} */ g_variant_unref (variant); variant = child; child = g_variant_get_child_value (variant, 0); /* variant is now {ss} */ g_variant_unref (variant); variant = child; child = g_variant_get_child_value (variant, 0); key = g_variant_dup_string (child, NULL); g_variant_unref (child); child = g_variant_get_child_value (variant, 1); val = g_variant_dup_string (child, NULL); g_variant_unref (child); g_variant_unref (variant); if (g_strcmp0 (key, "res") == 0) g_task_return_pointer (task, g_strdup (val), g_free); else g_task_return_new_error (task, PHOTOS_ERROR, 0, "Failed to parse GVariant"); g_free (val); g_free (key); }