[libsecret] Get service correctly for secret_service_set_alias()
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsecret] Get service correctly for secret_service_set_alias()
- Date: Fri, 6 Jul 2012 09:50:41 +0000 (UTC)
commit 5ecab6d33ba945bd02fd7ba6c223d4c2e6d1da23
Author: Stef Walter <stefw gnome org>
Date: Fri Jul 6 10:40:22 2012 +0200
Get service correctly for secret_service_set_alias()
* We can't use secret_collection_get_service() since a NULL
collection can be passed in.
library/secret-methods.c | 114 ++++++++++++++++++++++++++++++++++++----------
1 files changed, 90 insertions(+), 24 deletions(-)
---
diff --git a/library/secret-methods.c b/library/secret-methods.c
index a7032a6..e989908 100644
--- a/library/secret-methods.c
+++ b/library/secret-methods.c
@@ -1971,6 +1971,66 @@ secret_service_read_alias_sync (SecretService *service,
return collection;
}
+typedef struct {
+ GCancellable *cancellable;
+ gchar *alias;
+ gchar *collection_path;
+} SetClosure;
+
+static void
+set_closure_free (gpointer data)
+{
+ SetClosure *set = data;
+ if (set->cancellable)
+ g_object_unref (set->cancellable);
+ g_free (set->alias);
+ g_free (set->collection_path);
+ g_slice_free (SetClosure, set);
+}
+
+static void
+on_set_alias_done (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *async = G_SIMPLE_ASYNC_RESULT (user_data);
+ GError *error = NULL;
+
+ secret_service_set_alias_to_dbus_path_finish (SECRET_SERVICE (source), result, &error);
+ if (error != NULL)
+ g_simple_async_result_take_error (async, error);
+
+ g_simple_async_result_complete (async);
+ g_object_unref (async);
+}
+
+static void
+on_set_alias_service (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *async = G_SIMPLE_ASYNC_RESULT (user_data);
+ SetClosure *set = g_simple_async_result_get_op_res_gpointer (async);
+ SecretService *service;
+ GError *error = NULL;
+
+ service = secret_service_get_finish (result, &error);
+ if (error == NULL) {
+ secret_service_set_alias_to_dbus_path (service, set->alias,
+ set->collection_path,
+ set->cancellable,
+ on_set_alias_done,
+ g_object_ref (async));
+ g_object_unref (service);
+
+ } else {
+ g_simple_async_result_take_error (async, error);
+ g_simple_async_result_complete (async);
+ }
+
+ g_object_unref (async);
+}
+
/**
* secret_service_set_alias:
* @service: (allow-none): a secret service object
@@ -1983,8 +2043,8 @@ secret_service_read_alias_sync (SecretService *service,
* Assign a collection to this alias. Aliases help determine
* well known collections, such as 'default'.
*
- * If @service is NULL, then secret_collection_get_service() will be called to get
- * a #SecretService proxy.
+ * If @service is NULL, then secret_service_get() will be called to get
+ * the default #SecretService proxy.
*
* This method will return immediately and complete asynchronously.
*/
@@ -1996,31 +2056,43 @@ secret_service_set_alias (SecretService *service,
GAsyncReadyCallback callback,
gpointer user_data)
{
- const gchar *collection_path;
+ GSimpleAsyncResult *async;
+ SetClosure *set;
+ const gchar *path;
g_return_if_fail (service == NULL || SECRET_IS_SERVICE (service));
g_return_if_fail (alias != NULL);
g_return_if_fail (collection == NULL || SECRET_IS_COLLECTION (collection));
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
+ async = g_simple_async_result_new (G_OBJECT (service), callback, user_data,
+ secret_service_set_alias);
+ set = g_slice_new0 (SetClosure);
+ set->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
+ set->alias = g_strdup (alias);
+
if (collection) {
- collection_path = g_dbus_proxy_get_object_path (G_DBUS_PROXY (collection));
- g_return_if_fail (collection != NULL);
+ path = g_dbus_proxy_get_object_path (G_DBUS_PROXY (collection));
+ g_return_if_fail (path != NULL);
} else {
- collection_path = NULL;
+ path = NULL;
}
+ set->collection_path = g_strdup (path);
+ g_simple_async_result_set_op_res_gpointer (async, set, set_closure_free);
+
if (service == NULL) {
- service = secret_collection_get_service (collection);
- g_return_if_fail (service != NULL);
+ secret_service_get (SECRET_SERVICE_NONE, cancellable,
+ on_set_alias_service, g_object_ref (async));
} else {
- g_object_ref (service);
+ secret_service_set_alias_to_dbus_path (service, set->alias,
+ set->collection_path,
+ set->cancellable,
+ on_set_alias_done,
+ g_object_ref (async));
}
- secret_service_set_alias_to_dbus_path (service, alias, collection_path, cancellable,
- callback, user_data);
-
- g_object_unref (service);
+ g_object_unref (async);
}
/**
@@ -2038,21 +2110,15 @@ secret_service_set_alias_finish (SecretService *service,
GAsyncResult *result,
GError **error)
{
- gboolean ret;
-
g_return_val_if_fail (service == NULL || SECRET_IS_SERVICE (service), FALSE);
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (service),
+ secret_service_set_alias), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- if (service == NULL)
- service = SECRET_SERVICE (g_async_result_get_source_object (result));
- else
- g_object_ref (service);
-
- ret = secret_service_set_alias_to_dbus_path_finish (service, result, error);
-
- g_object_unref (service);
+ if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+ return FALSE;
- return ret;
+ return TRUE;
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]