mirror of
https://gitlab.gnome.org/GNOME/libsecret.git
synced 2024-12-22 12:48:51 +00:00
Get service correctly for secret_service_set_alias()
* We can't use secret_collection_get_service() since a NULL collection can be passed in.
This commit is contained in:
parent
c1f860d45f
commit
5ecab6d33b
@ -1971,6 +1971,66 @@ secret_service_read_alias_sync (SecretService *service,
|
|||||||
return collection;
|
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:
|
* secret_service_set_alias:
|
||||||
* @service: (allow-none): a secret service object
|
* @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
|
* Assign a collection to this alias. Aliases help determine
|
||||||
* well known collections, such as 'default'.
|
* well known collections, such as 'default'.
|
||||||
*
|
*
|
||||||
* If @service is NULL, then secret_collection_get_service() will be called to get
|
* If @service is NULL, then secret_service_get() will be called to get
|
||||||
* a #SecretService proxy.
|
* the default #SecretService proxy.
|
||||||
*
|
*
|
||||||
* This method will return immediately and complete asynchronously.
|
* This method will return immediately and complete asynchronously.
|
||||||
*/
|
*/
|
||||||
@ -1996,31 +2056,43 @@ secret_service_set_alias (SecretService *service,
|
|||||||
GAsyncReadyCallback callback,
|
GAsyncReadyCallback callback,
|
||||||
gpointer user_data)
|
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 (service == NULL || SECRET_IS_SERVICE (service));
|
||||||
g_return_if_fail (alias != NULL);
|
g_return_if_fail (alias != NULL);
|
||||||
g_return_if_fail (collection == NULL || SECRET_IS_COLLECTION (collection));
|
g_return_if_fail (collection == NULL || SECRET_IS_COLLECTION (collection));
|
||||||
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
|
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) {
|
if (collection) {
|
||||||
collection_path = g_dbus_proxy_get_object_path (G_DBUS_PROXY (collection));
|
path = g_dbus_proxy_get_object_path (G_DBUS_PROXY (collection));
|
||||||
g_return_if_fail (collection != NULL);
|
g_return_if_fail (path != NULL);
|
||||||
} else {
|
} 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) {
|
if (service == NULL) {
|
||||||
service = secret_collection_get_service (collection);
|
secret_service_get (SECRET_SERVICE_NONE, cancellable,
|
||||||
g_return_if_fail (service != NULL);
|
on_set_alias_service, g_object_ref (async));
|
||||||
} else {
|
} 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,
|
g_object_unref (async);
|
||||||
callback, user_data);
|
|
||||||
|
|
||||||
g_object_unref (service);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2038,21 +2110,15 @@ secret_service_set_alias_finish (SecretService *service,
|
|||||||
GAsyncResult *result,
|
GAsyncResult *result,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
gboolean ret;
|
|
||||||
|
|
||||||
g_return_val_if_fail (service == NULL || SECRET_IS_SERVICE (service), FALSE);
|
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);
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||||
|
|
||||||
if (service == NULL)
|
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
|
||||||
service = SECRET_SERVICE (g_async_result_get_source_object (result));
|
return FALSE;
|
||||||
else
|
|
||||||
g_object_ref (service);
|
|
||||||
|
|
||||||
ret = secret_service_set_alias_to_dbus_path_finish (service, result, error);
|
return TRUE;
|
||||||
|
|
||||||
g_object_unref (service);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user