Add secret_collection_load_items()

* And flags to prevent loading of items when creating a
   SecretCollection object
 * Rename secret_service_ensure_collections() to
   secret_service_load_collections()
This commit is contained in:
Stef Walter 2012-07-05 21:26:20 +02:00
parent 3f0c69d862
commit 153dfcec5f
10 changed files with 417 additions and 224 deletions

View File

@ -3,9 +3,13 @@
<INCLUDE>secret/secret-unstable.h</INCLUDE> <INCLUDE>secret/secret-unstable.h</INCLUDE>
SecretCollection SecretCollection
SecretCollectionClass SecretCollectionClass
SecretCollectionFlags
secret_collection_new secret_collection_new
secret_collection_new_finish secret_collection_new_finish
secret_collection_new_sync secret_collection_new_sync
secret_collection_load_items
secret_collection_load_items_finish
secret_collection_load_items_sync
secret_collection_create secret_collection_create
secret_collection_create_finish secret_collection_create_finish
secret_collection_create_sync secret_collection_create_sync
@ -14,6 +18,7 @@ secret_collection_delete_finish
secret_collection_delete_sync secret_collection_delete_sync
secret_collection_get_created secret_collection_get_created
secret_collection_get_service secret_collection_get_service
secret_collection_get_flags
secret_collection_get_items secret_collection_get_items
secret_collection_get_label secret_collection_get_label
secret_collection_set_label secret_collection_set_label
@ -29,8 +34,10 @@ SECRET_COLLECTION_GET_CLASS
SECRET_IS_COLLECTION SECRET_IS_COLLECTION
SECRET_IS_COLLECTION_CLASS SECRET_IS_COLLECTION_CLASS
SECRET_TYPE_COLLECTION SECRET_TYPE_COLLECTION
SECRET_TYPE_COLLECTION_FLAGS
SecretCollectionPrivate SecretCollectionPrivate
secret_collection_get_type secret_collection_get_type
secret_collection_flags_get_type
</SECTION> </SECTION>
<SECTION> <SECTION>
@ -183,9 +190,9 @@ secret_service_get_session_path
secret_service_ensure_session secret_service_ensure_session
secret_service_ensure_session_finish secret_service_ensure_session_finish
secret_service_ensure_session_sync secret_service_ensure_session_sync
secret_service_ensure_collections secret_service_load_collections
secret_service_ensure_collections_finish secret_service_load_collections_finish
secret_service_ensure_collections_sync secret_service_load_collections_sync
SecretSearchFlags SecretSearchFlags
secret_service_search secret_service_search
secret_service_search_finish secret_service_search_finish

View File

@ -16,6 +16,7 @@
#include "secret-collection.h" #include "secret-collection.h"
#include "secret-dbus-generated.h" #include "secret-dbus-generated.h"
#include "secret-enum-types.h"
#include "secret-item.h" #include "secret-item.h"
#include "secret-paths.h" #include "secret-paths.h"
#include "secret-private.h" #include "secret-private.h"
@ -55,9 +56,20 @@
* The class for #SecretCollection. * The class for #SecretCollection.
*/ */
/**
* SecretCollectionFlags:
* @SECRET_COLLECTION_NONE: no flags for initializing the #SecretCollection
* @SECRET_COLLECTION_LOAD_ITEMS: load items while initializing the
* #SecretCollection
*
* Flags which determine which parts of the #SecretCollection proxy are initialized
* during a secret_collection_new() or secret_collection_new_sync() operation.
*/
enum { enum {
PROP_0, PROP_0,
PROP_SERVICE, PROP_SERVICE,
PROP_FLAGS,
PROP_ITEMS, PROP_ITEMS,
PROP_LABEL, PROP_LABEL,
PROP_LOCKED, PROP_LOCKED,
@ -70,6 +82,7 @@ struct _SecretCollectionPrivate {
SecretService *service; SecretService *service;
GCancellable *cancellable; GCancellable *cancellable;
gboolean constructing; gboolean constructing;
SecretCollectionFlags init_flags;
/* Protected by mutex */ /* Protected by mutex */
GMutex mutex; GMutex mutex;
@ -141,6 +154,9 @@ secret_collection_set_property (GObject *obj,
g_object_add_weak_pointer (G_OBJECT (self->pv->service), g_object_add_weak_pointer (G_OBJECT (self->pv->service),
(gpointer *)&self->pv->service); (gpointer *)&self->pv->service);
break; break;
case PROP_FLAGS:
self->pv->init_flags = g_value_get_flags (value);
break;
case PROP_LABEL: case PROP_LABEL:
secret_collection_set_label (self, g_value_get_string (value), secret_collection_set_label (self, g_value_get_string (value),
self->pv->cancellable, on_set_label, self->pv->cancellable, on_set_label,
@ -164,6 +180,9 @@ secret_collection_get_property (GObject *obj,
case PROP_SERVICE: case PROP_SERVICE:
g_value_set_object (value, self->pv->service); g_value_set_object (value, self->pv->service);
break; break;
case PROP_FLAGS:
g_value_set_flags (value, secret_collection_get_flags (self));
break;
case PROP_ITEMS: case PROP_ITEMS:
g_value_take_boxed (value, secret_collection_get_items (self)); g_value_take_boxed (value, secret_collection_get_items (self));
break; break;
@ -245,175 +264,33 @@ collection_update_items (SecretCollection *self,
g_object_notify (G_OBJECT (self), "items"); g_object_notify (G_OBJECT (self), "items");
} }
typedef struct {
GCancellable *cancellable;
GHashTable *items;
gint items_loading;
} ItemsClosure;
static void
items_closure_free (gpointer data)
{
ItemsClosure *closure = data;
g_clear_object (&closure->cancellable);
g_hash_table_unref (closure->items);
g_slice_free (ItemsClosure, closure);
}
static void
on_load_item (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data);
ItemsClosure *closure = g_simple_async_result_get_op_res_gpointer (res);
SecretCollection *self = SECRET_COLLECTION (g_async_result_get_source_object (user_data));
const gchar *path;
GError *error = NULL;
SecretItem *item;
closure->items_loading--;
item = secret_item_new_finish (result, &error);
if (error != NULL)
g_simple_async_result_take_error (res, error);
if (item != NULL) {
path = g_dbus_proxy_get_object_path (G_DBUS_PROXY (item));
g_hash_table_insert (closure->items, g_strdup (path), item);
}
if (closure->items_loading == 0) {
collection_update_items (self, closure->items);
g_simple_async_result_complete_in_idle (res);
}
g_object_unref (self);
g_object_unref (res);
}
static void
collection_load_items_async (SecretCollection *self,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
ItemsClosure *closure;
SecretItem *item;
GSimpleAsyncResult *res;
const gchar *path;
GVariant *paths;
GVariantIter iter;
paths = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (self), "Items");
g_return_if_fail (paths != NULL);
res = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
collection_load_items_async);
closure = g_slice_new0 (ItemsClosure);
closure->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
closure->items = items_table_new ();
g_simple_async_result_set_op_res_gpointer (res, closure, items_closure_free);
g_variant_iter_init (&iter, paths);
while (g_variant_iter_loop (&iter, "&o", &path)) {
item = collection_lookup_item (self, path);
/* No such collection yet create a new one */
if (item == NULL) {
secret_item_new (self->pv->service, path, SECRET_ITEM_NONE,
cancellable, on_load_item, g_object_ref (res));
closure->items_loading++;
} else {
g_hash_table_insert (closure->items, g_strdup (path), item);
}
}
if (closure->items_loading == 0) {
collection_update_items (self, closure->items);
g_simple_async_result_complete_in_idle (res);
}
g_variant_unref (paths);
g_object_unref (res);
}
static gboolean
collection_load_items_finish (SecretCollection *self,
GAsyncResult *result,
GError **error)
{
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
return FALSE;
return TRUE;
}
static gboolean
collection_load_items_sync (SecretCollection *self,
GCancellable *cancellable,
GError **error)
{
SecretItem *item;
GHashTable *items;
GVariant *paths;
GVariantIter iter;
const gchar *path;
gboolean ret = TRUE;
paths = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (self), "Items");
g_return_val_if_fail (paths != NULL, FALSE);
items = items_table_new ();
g_variant_iter_init (&iter, paths);
while (g_variant_iter_next (&iter, "&o", &path)) {
item = collection_lookup_item (self, path);
/* No such collection yet create a new one */
if (item == NULL) {
item = secret_item_new_sync (self->pv->service, path,
SECRET_ITEM_NONE,
cancellable, error);
if (item == NULL) {
ret = FALSE;
break;
}
}
g_hash_table_insert (items, g_strdup (path), item);
}
if (ret)
collection_update_items (self, items);
g_hash_table_unref (items);
g_variant_unref (paths);
return ret;
}
static void static void
handle_property_changed (SecretCollection *self, handle_property_changed (SecretCollection *self,
const gchar *property_name, const gchar *property_name,
GVariant *value) GVariant *value)
{ {
if (g_str_equal (property_name, "Label")) gboolean perform;
if (g_str_equal (property_name, "Label")) {
g_object_notify (G_OBJECT (self), "label"); g_object_notify (G_OBJECT (self), "label");
else if (g_str_equal (property_name, "Locked")) } else if (g_str_equal (property_name, "Locked")) {
g_object_notify (G_OBJECT (self), "locked"); g_object_notify (G_OBJECT (self), "locked");
else if (g_str_equal (property_name, "Created")) } else if (g_str_equal (property_name, "Created")) {
g_object_notify (G_OBJECT (self), "created"); g_object_notify (G_OBJECT (self), "created");
else if (g_str_equal (property_name, "Modified")) } else if (g_str_equal (property_name, "Modified")) {
g_object_notify (G_OBJECT (self), "modified"); g_object_notify (G_OBJECT (self), "modified");
else if (g_str_equal (property_name, "Items") && !self->pv->constructing) } else if (g_str_equal (property_name, "Items") && !self->pv->constructing) {
collection_load_items_async (self, self->pv->cancellable, NULL, NULL); g_mutex_lock (&self->pv->mutex);
perform = self->pv->items != NULL;
g_mutex_unlock (&self->pv->mutex);
if (perform)
secret_collection_load_items (self, self->pv->cancellable, NULL, NULL);
}
} }
static void static void
@ -542,6 +419,17 @@ secret_collection_class_init (SecretCollectionClass *klass)
g_param_spec_object ("service", "Service", "Secret Service", g_param_spec_object ("service", "Service", "Secret Service",
SECRET_TYPE_SERVICE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); SECRET_TYPE_SERVICE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
/**
* SecretCollection:flags:
*
* A set of flags describing which parts of the secret collection have
* been initialized.
*/
g_object_class_install_property (gobject_class, PROP_FLAGS,
g_param_spec_flags ("flags", "Flags", "Collection flags",
secret_collection_flags_get_type (), SECRET_COLLECTION_NONE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
/** /**
* SecretCollection:items: * SecretCollection:items:
* *
@ -622,8 +510,10 @@ secret_collection_initable_init (GInitable *initable,
self = SECRET_COLLECTION (initable); self = SECRET_COLLECTION (initable);
if (!collection_load_items_sync (self, cancellable, error)) if (self->pv->init_flags & SECRET_COLLECTION_LOAD_ITEMS) {
return FALSE; if (!secret_collection_load_items_sync (self, cancellable, error))
return FALSE;
}
self->pv->constructing = FALSE; self->pv->constructing = FALSE;
return TRUE; return TRUE;
@ -658,7 +548,7 @@ on_init_items (GObject *source,
SecretCollection *self = SECRET_COLLECTION (source); SecretCollection *self = SECRET_COLLECTION (source);
GError *error = NULL; GError *error = NULL;
if (!collection_load_items_finish (self, result, &error)) if (!secret_collection_load_items_finish (self, result, &error))
g_simple_async_result_take_error (res, error); g_simple_async_result_take_error (res, error);
g_simple_async_result_complete (res); g_simple_async_result_complete (res);
@ -687,9 +577,12 @@ on_init_base (GObject *source,
g_dbus_proxy_get_object_path (proxy)); g_dbus_proxy_get_object_path (proxy));
g_simple_async_result_complete (res); g_simple_async_result_complete (res);
} else if (self->pv->init_flags & SECRET_COLLECTION_LOAD_ITEMS) {
secret_collection_load_items (self, closure->cancellable,
on_init_items, g_object_ref (res));
} else { } else {
collection_load_items_async (self, closure->cancellable, g_simple_async_result_complete (res);
on_init_items, g_object_ref (res));
} }
g_object_unref (res); g_object_unref (res);
@ -749,6 +642,7 @@ secret_collection_async_initable_iface (GAsyncInitableIface *iface)
* secret_collection_new: * secret_collection_new:
* @service: a secret service object * @service: a secret service object
* @collection_path: the D-Bus path of the collection * @collection_path: the D-Bus path of the collection
* @flags: options for the collection initialization
* @cancellable: optional cancellation object * @cancellable: optional cancellation object
* @callback: called when the operation completes * @callback: called when the operation completes
* @user_data: data to be passed to the callback * @user_data: data to be passed to the callback
@ -760,6 +654,7 @@ secret_collection_async_initable_iface (GAsyncInitableIface *iface)
void void
secret_collection_new (SecretService *service, secret_collection_new (SecretService *service,
const gchar *collection_path, const gchar *collection_path,
SecretCollectionFlags flags,
GCancellable *cancellable, GCancellable *cancellable,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data) gpointer user_data)
@ -781,6 +676,7 @@ secret_collection_new (SecretService *service,
"g-object-path", collection_path, "g-object-path", collection_path,
"g-interface-name", SECRET_COLLECTION_INTERFACE, "g-interface-name", SECRET_COLLECTION_INTERFACE,
"service", service, "service", service,
"flags", flags,
NULL); NULL);
} }
@ -820,6 +716,7 @@ secret_collection_new_finish (GAsyncResult *result,
* secret_collection_new_sync: * secret_collection_new_sync:
* @service: a secret service object * @service: a secret service object
* @collection_path: the D-Bus path of the collection * @collection_path: the D-Bus path of the collection
* @flags: options for the collection initialization
* @cancellable: optional cancellation object * @cancellable: optional cancellation object
* @error: location to place an error on failure * @error: location to place an error on failure
* *
@ -834,6 +731,7 @@ secret_collection_new_finish (GAsyncResult *result,
SecretCollection * SecretCollection *
secret_collection_new_sync (SecretService *service, secret_collection_new_sync (SecretService *service,
const gchar *collection_path, const gchar *collection_path,
SecretCollectionFlags flags,
GCancellable *cancellable, GCancellable *cancellable,
GError **error) GError **error)
{ {
@ -855,9 +753,218 @@ secret_collection_new_sync (SecretService *service,
"g-object-path", collection_path, "g-object-path", collection_path,
"g-interface-name", SECRET_COLLECTION_INTERFACE, "g-interface-name", SECRET_COLLECTION_INTERFACE,
"service", service, "service", service,
"flags", flags,
NULL); NULL);
} }
typedef struct {
GCancellable *cancellable;
GHashTable *items;
gint items_loading;
} ItemsClosure;
static void
items_closure_free (gpointer data)
{
ItemsClosure *closure = data;
g_clear_object (&closure->cancellable);
g_hash_table_unref (closure->items);
g_slice_free (ItemsClosure, closure);
}
static void
on_load_item (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data);
ItemsClosure *closure = g_simple_async_result_get_op_res_gpointer (res);
SecretCollection *self = SECRET_COLLECTION (g_async_result_get_source_object (user_data));
const gchar *path;
GError *error = NULL;
SecretItem *item;
closure->items_loading--;
item = secret_item_new_finish (result, &error);
if (error != NULL)
g_simple_async_result_take_error (res, error);
if (item != NULL) {
path = g_dbus_proxy_get_object_path (G_DBUS_PROXY (item));
g_hash_table_insert (closure->items, g_strdup (path), item);
}
if (closure->items_loading == 0) {
collection_update_items (self, closure->items);
g_simple_async_result_complete_in_idle (res);
}
g_object_unref (self);
g_object_unref (res);
}
/**
* secret_collection_load_items:
* @self: the secret collection
* @cancellable: optional cancellation object
* @callback: called when the operation completes
* @user_data: data to be passed to the callback
*
* Ensure that the #SecretCollection proxy has loaded all the items present
* in the Secret Service. This affects the result of
* secret_collection_get_items().
*
* You can also pass the %SECRET_COLLECTION_LOAD_ITEMS to
* secret_collection_new() in order to ensure that the collections have been
* loaded by the time you get the #SecretCollection proxy.
*
* This method will return immediately and complete asynchronously.
*/
void
secret_collection_load_items (SecretCollection *self,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
ItemsClosure *closure;
SecretItem *item;
GSimpleAsyncResult *res;
const gchar *path;
GVariant *paths;
GVariantIter iter;
g_return_if_fail (SECRET_IS_COLLECTION (self));
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
paths = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (self), "Items");
g_return_if_fail (paths != NULL);
res = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
secret_collection_load_items);
closure = g_slice_new0 (ItemsClosure);
closure->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
closure->items = items_table_new ();
g_simple_async_result_set_op_res_gpointer (res, closure, items_closure_free);
g_variant_iter_init (&iter, paths);
while (g_variant_iter_loop (&iter, "&o", &path)) {
item = collection_lookup_item (self, path);
/* No such collection yet create a new one */
if (item == NULL) {
secret_item_new (self->pv->service, path, SECRET_ITEM_NONE,
cancellable, on_load_item, g_object_ref (res));
closure->items_loading++;
} else {
g_hash_table_insert (closure->items, g_strdup (path), item);
}
}
if (closure->items_loading == 0) {
collection_update_items (self, closure->items);
g_simple_async_result_complete_in_idle (res);
}
g_variant_unref (paths);
g_object_unref (res);
}
/**
* secret_collection_load_items_finish:
* @self: the secret collection
* @result: the asynchronous result passed to the callback
* @error: location to place an error on failure
*
* Complete an asynchronous operation to ensure that the #SecretCollection proxy
* has loaded all the items present in the Secret Service.
*
* Returns: whether the load was successful or not
*/
gboolean
secret_collection_load_items_finish (SecretCollection *self,
GAsyncResult *result,
GError **error)
{
g_return_val_if_fail (SECRET_IS_COLLECTION (self), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self),
secret_collection_load_items), FALSE);
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
return FALSE;
return TRUE;
}
/**
* secret_collection_load_items_sync:
* @self: the secret collection
* @cancellable: optional cancellation object
* @error: location to place an error on failure
*
* Ensure that the #SecretCollection proxy has loaded all the items present
* in the Secret Service. This affects the result of
* secret_collection_get_items().
*
* You can also pass the %SECRET_COLLECTION_LOAD_ITEMS to
* secret_collection_new_sync() in order to ensure that the items have been
* loaded by the time you get the #SecretCollection proxy.
*
* This method may block indefinitely and should not be used in user interface
* threads.
*
* Returns: whether the load was successful or not
*/
gboolean
secret_collection_load_items_sync (SecretCollection *self,
GCancellable *cancellable,
GError **error)
{
SecretItem *item;
GHashTable *items;
GVariant *paths;
GVariantIter iter;
const gchar *path;
gboolean ret = TRUE;
g_return_val_if_fail (SECRET_IS_COLLECTION (self), FALSE);
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
paths = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (self), "Items");
g_return_val_if_fail (paths != NULL, FALSE);
items = items_table_new ();
g_variant_iter_init (&iter, paths);
while (g_variant_iter_next (&iter, "&o", &path)) {
item = collection_lookup_item (self, path);
/* No such collection yet create a new one */
if (item == NULL) {
item = secret_item_new_sync (self->pv->service, path,
SECRET_ITEM_NONE,
cancellable, error);
if (item == NULL) {
ret = FALSE;
break;
}
}
g_hash_table_insert (items, g_strdup (path), item);
}
if (ret)
collection_update_items (self, items);
g_hash_table_unref (items);
g_variant_unref (paths);
return ret;
}
/** /**
* secret_collection_refresh: * secret_collection_refresh:
* @self: the collection * @self: the collection
@ -922,7 +1029,8 @@ on_create_path (GObject *source,
path = secret_service_create_collection_path_finish (service, result, &error); path = secret_service_create_collection_path_finish (service, result, &error);
if (error == NULL) { if (error == NULL) {
secret_collection_new (service, path, closure->cancellable, secret_collection_new (service, path, SECRET_COLLECTION_LOAD_ITEMS,
closure->cancellable,
on_create_collection, g_object_ref (res)); on_create_collection, g_object_ref (res));
} else { } else {
g_simple_async_result_take_error (res, error); g_simple_async_result_take_error (res, error);
@ -1082,7 +1190,9 @@ secret_collection_create_sync (SecretService *service,
if (path == NULL) if (path == NULL)
return NULL; return NULL;
collection = secret_collection_new_sync (service, path, cancellable, error); collection = secret_collection_new_sync (service, path,
SECRET_COLLECTION_LOAD_ITEMS,
cancellable, error);
g_free (path); g_free (path);
return collection; return collection;
@ -1220,6 +1330,35 @@ secret_collection_get_service (SecretCollection *self)
return self->pv->service; return self->pv->service;
} }
/**
* secret_collection_get_flags:
* @self: the secret collection proxy
*
* Get the flags representing what features of the #SecretCollection proxy
* have been initialized.
*
* Use secret_collection_load_items() to initialize further features
* and change the flags.
*
* Returns: the flags for features initialized
*/
SecretCollectionFlags
secret_collection_get_flags (SecretCollection *self)
{
SecretCollectionFlags flags = 0;
g_return_val_if_fail (SECRET_IS_COLLECTION (self), SECRET_COLLECTION_NONE);
g_mutex_lock (&self->pv->mutex);
if (self->pv->items)
flags |= SECRET_COLLECTION_LOAD_ITEMS;
g_mutex_unlock (&self->pv->mutex);
return flags;
}
/** /**
* secret_collection_get_items: * secret_collection_get_items:
* @self: a collection * @self: a collection

View File

@ -25,6 +25,11 @@
G_BEGIN_DECLS G_BEGIN_DECLS
typedef enum {
SECRET_COLLECTION_NONE = 0,
SECRET_COLLECTION_LOAD_ITEMS = 1 << 1,
} SecretCollectionFlags;
#define SECRET_TYPE_COLLECTION (secret_collection_get_type ()) #define SECRET_TYPE_COLLECTION (secret_collection_get_type ())
#define SECRET_COLLECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), SECRET_TYPE_COLLECTION, SecretCollection)) #define SECRET_COLLECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), SECRET_TYPE_COLLECTION, SecretCollection))
#define SECRET_COLLECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), SECRET_TYPE_COLLECTION, SecretCollectionClass)) #define SECRET_COLLECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), SECRET_TYPE_COLLECTION, SecretCollectionClass))
@ -53,6 +58,7 @@ GType secret_collection_get_type (void) G_GNUC_CON
void secret_collection_new (SecretService *service, void secret_collection_new (SecretService *service,
const gchar *collection_path, const gchar *collection_path,
SecretCollectionFlags flags,
GCancellable *cancellable, GCancellable *cancellable,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data); gpointer user_data);
@ -62,6 +68,20 @@ SecretCollection * secret_collection_new_finish (GAsyncResult *re
SecretCollection * secret_collection_new_sync (SecretService *service, SecretCollection * secret_collection_new_sync (SecretService *service,
const gchar *collection_path, const gchar *collection_path,
SecretCollectionFlags flags,
GCancellable *cancellable,
GError **error);
void secret_collection_load_items (SecretCollection *self,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean secret_collection_load_items_finish (SecretCollection *self,
GAsyncResult *result,
GError **error);
gboolean secret_collection_load_items_sync (SecretCollection *self,
GCancellable *cancellable, GCancellable *cancellable,
GError **error); GError **error);
@ -98,6 +118,8 @@ gboolean secret_collection_delete_sync (SecretCollection
SecretService * secret_collection_get_service (SecretCollection *self); SecretService * secret_collection_get_service (SecretCollection *self);
SecretCollectionFlags secret_collection_get_flags (SecretCollection *self);
GList * secret_collection_get_items (SecretCollection *self); GList * secret_collection_get_items (SecretCollection *self);
gchar * secret_collection_get_label (SecretCollection *self); gchar * secret_collection_get_label (SecretCollection *self);

View File

@ -1532,7 +1532,8 @@ on_read_alias_path (GObject *source,
/* No collection loaded, but valid path, load */ /* No collection loaded, but valid path, load */
} else { } else {
secret_collection_new (self, collection_path, read->cancellable, secret_collection_new (self, collection_path, SECRET_COLLECTION_NONE,
read->cancellable,
on_read_alias_collection, g_object_ref (async)); on_read_alias_collection, g_object_ref (async));
} }
} }
@ -1662,6 +1663,7 @@ secret_service_read_alias_sync (SecretService *self,
/* No collection loaded, but valid path, load */ /* No collection loaded, but valid path, load */
if (collection == NULL) { if (collection == NULL) {
collection = secret_collection_new_sync (self, collection_path, collection = secret_collection_new_sync (self, collection_path,
SECRET_COLLECTION_LOAD_ITEMS,
cancellable, error); cancellable, error);
} }
} }

View File

@ -54,7 +54,7 @@
* represent those collections while initializing a #SecretService then pass * represent those collections while initializing a #SecretService then pass
* the %SECRET_SERVICE_LOAD_COLLECTIONS flag to the secret_service_get() or * the %SECRET_SERVICE_LOAD_COLLECTIONS flag to the secret_service_get() or
* secret_service_new() functions. In order to establish a session on an already * secret_service_new() functions. In order to establish a session on an already
* existing #SecretService, use the secret_service_ensure_collections() function. * existing #SecretService, use the secret_service_load_collections() function.
* To access the list of collections use secret_service_get_collections(). * To access the list of collections use secret_service_get_collections().
* *
* Certain actions on the Secret Service require user prompting to complete, * Certain actions on the Secret Service require user prompting to complete,
@ -306,7 +306,7 @@ handle_property_changed (SecretService *self,
g_mutex_unlock (&self->pv->mutex); g_mutex_unlock (&self->pv->mutex);
if (perform) if (perform)
secret_service_ensure_collections (self, self->pv->cancellable, NULL, NULL); secret_service_load_collections (self, self->pv->cancellable, NULL, NULL);
} }
g_variant_unref (value); g_variant_unref (value);
@ -455,7 +455,7 @@ secret_service_class_init (SecretServiceClass *klass)
* *
* To load the collections, specify the %SECRET_SERVICE_LOAD_COLLECTIONS * To load the collections, specify the %SECRET_SERVICE_LOAD_COLLECTIONS
* initialization flag when calling the secret_service_get() or * initialization flag when calling the secret_service_get() or
* secret_service_new() functions. Or call the secret_service_ensure_collections() * secret_service_new() functions. Or call the secret_service_load_collections()
* method. * method.
*/ */
g_object_class_install_property (object_class, PROP_COLLECTIONS, g_object_class_install_property (object_class, PROP_COLLECTIONS,
@ -489,22 +489,22 @@ service_ensure_for_flags_sync (SecretService *self,
return FALSE; return FALSE;
if (flags & SECRET_SERVICE_LOAD_COLLECTIONS) if (flags & SECRET_SERVICE_LOAD_COLLECTIONS)
if (!secret_service_ensure_collections_sync (self, cancellable, error)) if (!secret_service_load_collections_sync (self, cancellable, error))
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
static void static void
on_ensure_collections (GObject *source, on_load_collections (GObject *source,
GAsyncResult *result, GAsyncResult *result,
gpointer user_data) gpointer user_data)
{ {
GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data);
SecretService *self = SECRET_SERVICE (source); SecretService *self = SECRET_SERVICE (source);
GError *error = NULL; GError *error = NULL;
if (!secret_service_ensure_collections_finish (self, result, &error)) if (!secret_service_load_collections_finish (self, result, &error))
g_simple_async_result_take_error (res, error); g_simple_async_result_take_error (res, error);
g_simple_async_result_complete (res); g_simple_async_result_complete (res);
@ -526,8 +526,8 @@ on_ensure_session (GObject *source,
g_simple_async_result_complete (res); g_simple_async_result_complete (res);
} else if (closure->flags & SECRET_SERVICE_LOAD_COLLECTIONS) { } else if (closure->flags & SECRET_SERVICE_LOAD_COLLECTIONS) {
secret_service_ensure_collections (self, closure->cancellable, secret_service_load_collections (self, closure->cancellable,
on_ensure_collections, g_object_ref (res)); on_load_collections, g_object_ref (res));
} else { } else {
g_simple_async_result_complete_in_idle (res); g_simple_async_result_complete_in_idle (res);
@ -550,8 +550,8 @@ service_ensure_for_flags_async (SecretService *self,
on_ensure_session, g_object_ref (res)); on_ensure_session, g_object_ref (res));
else if (closure->flags & SECRET_SERVICE_LOAD_COLLECTIONS) else if (closure->flags & SECRET_SERVICE_LOAD_COLLECTIONS)
secret_service_ensure_collections (self, closure->cancellable, secret_service_load_collections (self, closure->cancellable,
on_ensure_collections, g_object_ref (res)); on_load_collections, g_object_ref (res));
else else
g_simple_async_result_complete_in_idle (res); g_simple_async_result_complete_in_idle (res);
@ -973,7 +973,7 @@ secret_service_new_sync (GType service_gtype,
* Get the flags representing what features of the #SecretService proxy * Get the flags representing what features of the #SecretService proxy
* have been initialized. * have been initialized.
* *
* Use secret_service_ensure_session() or secret_service_ensure_collections() * Use secret_service_ensure_session() or secret_service_load_collections()
* to initialize further features and change the flags. * to initialize further features and change the flags.
* *
* Returns: the flags for features initialized * Returns: the flags for features initialized
@ -1006,7 +1006,7 @@ secret_service_get_flags (SecretService *self)
* *
* If the %SECRET_SERVICE_LOAD_COLLECTIONS flag was not specified when * If the %SECRET_SERVICE_LOAD_COLLECTIONS flag was not specified when
* initializing #SecretService proxy object, then this method will return * initializing #SecretService proxy object, then this method will return
* %NULL. Use secret_service_ensure_collections() to load the collections. * %NULL. Use secret_service_load_collections() to load the collections.
* *
* Returns: (transfer full) (element-type Secret.Collection) (allow-none): a * Returns: (transfer full) (element-type Secret.Collection) (allow-none): a
* list of the collections in the secret service * list of the collections in the secret service
@ -1379,7 +1379,7 @@ on_ensure_collection (GObject *source,
} }
/** /**
* secret_service_ensure_collections: * secret_service_load_collections:
* @self: the secret service * @self: the secret service
* @cancellable: optional cancellation object * @cancellable: optional cancellation object
* @callback: called when the operation completes * @callback: called when the operation completes
@ -1396,10 +1396,10 @@ on_ensure_collection (GObject *source,
* This method will return immediately and complete asynchronously. * This method will return immediately and complete asynchronously.
*/ */
void void
secret_service_ensure_collections (SecretService *self, secret_service_load_collections (SecretService *self,
GCancellable *cancellable, GCancellable *cancellable,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data) gpointer user_data)
{ {
EnsureClosure *closure; EnsureClosure *closure;
SecretCollection *collection; SecretCollection *collection;
@ -1415,7 +1415,7 @@ secret_service_ensure_collections (SecretService *self,
g_return_if_fail (paths != NULL); g_return_if_fail (paths != NULL);
res = g_simple_async_result_new (G_OBJECT (self), callback, user_data, res = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
secret_service_ensure_collections); secret_service_load_collections);
closure = g_slice_new0 (EnsureClosure); closure = g_slice_new0 (EnsureClosure);
closure->cancellable = cancellable ? g_object_ref (cancellable) : NULL; closure->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
closure->collections = collections_table_new (); closure->collections = collections_table_new ();
@ -1427,7 +1427,7 @@ secret_service_ensure_collections (SecretService *self,
/* No such collection yet create a new one */ /* No such collection yet create a new one */
if (collection == NULL) { if (collection == NULL) {
secret_collection_new (self, path, cancellable, secret_collection_new (self, path, SECRET_COLLECTION_LOAD_ITEMS, cancellable,
on_ensure_collection, g_object_ref (res)); on_ensure_collection, g_object_ref (res));
closure->collections_loading++; closure->collections_loading++;
} else { } else {
@ -1445,7 +1445,7 @@ secret_service_ensure_collections (SecretService *self,
} }
/** /**
* secret_service_ensure_collections_finish: * secret_service_load_collections_finish:
* @self: the secret service * @self: the secret service
* @result: the asynchronous result passed to the callback * @result: the asynchronous result passed to the callback
* @error: location to place an error on failure * @error: location to place an error on failure
@ -1456,14 +1456,14 @@ secret_service_ensure_collections (SecretService *self,
* Returns: whether the load was successful or not * Returns: whether the load was successful or not
*/ */
gboolean gboolean
secret_service_ensure_collections_finish (SecretService *self, secret_service_load_collections_finish (SecretService *self,
GAsyncResult *result, GAsyncResult *result,
GError **error) GError **error)
{ {
g_return_val_if_fail (SECRET_IS_SERVICE (self), FALSE); g_return_val_if_fail (SECRET_IS_SERVICE (self), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self), g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self),
secret_service_ensure_collections), FALSE); secret_service_load_collections), FALSE);
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
return FALSE; return FALSE;
@ -1472,7 +1472,7 @@ secret_service_ensure_collections_finish (SecretService *self,
} }
/** /**
* secret_service_ensure_collections_sync: * secret_service_load_collections_sync:
* @self: the secret service * @self: the secret service
* @cancellable: optional cancellation object * @cancellable: optional cancellation object
* @error: location to place an error on failure * @error: location to place an error on failure
@ -1491,9 +1491,9 @@ secret_service_ensure_collections_finish (SecretService *self,
* Returns: whether the load was successful or not * Returns: whether the load was successful or not
*/ */
gboolean gboolean
secret_service_ensure_collections_sync (SecretService *self, secret_service_load_collections_sync (SecretService *self,
GCancellable *cancellable, GCancellable *cancellable,
GError **error) GError **error)
{ {
SecretCollection *collection; SecretCollection *collection;
GHashTable *collections; GHashTable *collections;
@ -1517,7 +1517,9 @@ secret_service_ensure_collections_sync (SecretService *self,
/* No such collection yet create a new one */ /* No such collection yet create a new one */
if (collection == NULL) { if (collection == NULL) {
collection = secret_collection_new_sync (self, path, cancellable, error); collection = secret_collection_new_sync (self, path,
SECRET_COLLECTION_LOAD_ITEMS,
cancellable, error);
if (collection == NULL) { if (collection == NULL) {
ret = FALSE; ret = FALSE;
break; break;

View File

@ -137,16 +137,16 @@ const gchar * secret_service_ensure_session_sync (SecretService
GCancellable *cancellable, GCancellable *cancellable,
GError **error); GError **error);
void secret_service_ensure_collections (SecretService *self, void secret_service_load_collections (SecretService *self,
GCancellable *cancellable, GCancellable *cancellable,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data); gpointer user_data);
gboolean secret_service_ensure_collections_finish (SecretService *self, gboolean secret_service_load_collections_finish (SecretService *self,
GAsyncResult *result, GAsyncResult *result,
GError **error); GError **error);
gboolean secret_service_ensure_collections_sync (SecretService *self, gboolean secret_service_load_collections_sync (SecretService *self,
GCancellable *cancellable, GCancellable *cancellable,
GError **error); GError **error);

View File

@ -88,7 +88,8 @@ test_new_sync (Test *test,
GError *error = NULL; GError *error = NULL;
SecretCollection *collection; SecretCollection *collection;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
g_assert_cmpstr (g_dbus_proxy_get_object_path (G_DBUS_PROXY (collection)), ==, collection_path); g_assert_cmpstr (g_dbus_proxy_get_object_path (G_DBUS_PROXY (collection)), ==, collection_path);
@ -106,7 +107,8 @@ test_new_async (Test *test,
SecretCollection *collection; SecretCollection *collection;
GAsyncResult *result = NULL; GAsyncResult *result = NULL;
secret_collection_new (test->service, collection_path, NULL, on_async_result, &result); secret_collection_new (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, on_async_result, &result);
g_assert (result == NULL); g_assert (result == NULL);
egg_test_wait (); egg_test_wait ();
@ -129,7 +131,8 @@ test_new_sync_noexist (Test *test,
GError *error = NULL; GError *error = NULL;
SecretCollection *collection; SecretCollection *collection;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_error (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD); g_assert_error (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD);
g_assert (collection == NULL); g_assert (collection == NULL);
} }
@ -143,7 +146,8 @@ test_new_async_noexist (Test *test,
SecretCollection *collection; SecretCollection *collection;
GAsyncResult *result = NULL; GAsyncResult *result = NULL;
secret_collection_new (test->service, collection_path, NULL, on_async_result, &result); secret_collection_new (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, on_async_result, &result);
g_assert (result == NULL); g_assert (result == NULL);
egg_test_wait (); egg_test_wait ();
@ -211,7 +215,8 @@ test_properties (Test *test,
gboolean locked; gboolean locked;
gchar *label; gchar *label;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
g_assert (secret_collection_get_locked (collection) == FALSE); g_assert (secret_collection_get_locked (collection) == FALSE);
@ -281,7 +286,8 @@ test_items (Test *test,
GError *error = NULL; GError *error = NULL;
GList *items; GList *items;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_LOAD_ITEMS, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
items = secret_collection_get_items (collection); items = secret_collection_get_items (collection);
@ -312,7 +318,8 @@ test_items_empty (Test *test,
GError *error = NULL; GError *error = NULL;
GList *items; GList *items;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_LOAD_ITEMS, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
items = secret_collection_get_items (collection); items = secret_collection_get_items (collection);
@ -336,7 +343,9 @@ test_items_empty_async (Test *test,
GError *error = NULL; GError *error = NULL;
GList *items; GList *items;
secret_collection_new (test->service, collection_path, NULL, on_async_result, &result); secret_collection_new (test->service, collection_path,
SECRET_COLLECTION_LOAD_ITEMS,
NULL, on_async_result, &result);
g_assert (result == NULL); g_assert (result == NULL);
egg_test_wait (); egg_test_wait ();
@ -366,7 +375,8 @@ test_set_label_sync (Test *test,
gboolean ret; gboolean ret;
gchar *label; gchar *label;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
label = secret_collection_get_label (collection); label = secret_collection_get_label (collection);
@ -395,7 +405,8 @@ test_set_label_async (Test *test,
gboolean ret; gboolean ret;
gchar *label; gchar *label;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
label = secret_collection_get_label (collection); label = secret_collection_get_label (collection);
@ -429,7 +440,8 @@ test_set_label_prop (Test *test,
guint sigs = 2; guint sigs = 2;
gchar *label; gchar *label;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
label = secret_collection_get_label (collection); label = secret_collection_get_label (collection);
@ -458,7 +470,8 @@ test_delete_sync (Test *test,
GError *error = NULL; GError *error = NULL;
gboolean ret; gboolean ret;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
ret = secret_collection_delete_sync (collection, NULL, &error); ret = secret_collection_delete_sync (collection, NULL, &error);
@ -467,7 +480,8 @@ test_delete_sync (Test *test,
g_object_unref (collection); g_object_unref (collection);
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_error (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD); g_assert_error (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD);
g_assert (collection == NULL); g_assert (collection == NULL);
} }
@ -482,7 +496,8 @@ test_delete_async (Test *test,
GError *error = NULL; GError *error = NULL;
gboolean ret; gboolean ret;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
secret_collection_delete (collection, NULL, on_async_result, &result); secret_collection_delete (collection, NULL, on_async_result, &result);
@ -497,7 +512,8 @@ test_delete_async (Test *test,
g_object_unref (collection); g_object_unref (collection);
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_error (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD); g_assert_error (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD);
g_assert (collection == NULL); g_assert (collection == NULL);
} }

View File

@ -166,7 +166,8 @@ test_create_sync (Test *test,
GHashTable *attributes; GHashTable *attributes;
SecretValue *value; SecretValue *value;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
attributes = g_hash_table_new (g_str_hash, g_str_equal); attributes = g_hash_table_new (g_str_hash, g_str_equal);
@ -204,7 +205,8 @@ test_create_async (Test *test,
GHashTable *attributes; GHashTable *attributes;
SecretValue *value; SecretValue *value;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
attributes = g_hash_table_new (g_str_hash, g_str_equal); attributes = g_hash_table_new (g_str_hash, g_str_equal);

View File

@ -397,7 +397,8 @@ test_lock_sync (Test *test,
GList *objects; GList *objects;
gboolean ret; gboolean ret;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
objects = g_list_append (NULL, collection); objects = g_list_append (NULL, collection);
@ -426,7 +427,8 @@ test_unlock_sync (Test *test,
GList *objects; GList *objects;
gboolean ret; gboolean ret;
collection = secret_collection_new_sync (test->service, collection_path, NULL, &error); collection = secret_collection_new_sync (test->service, collection_path,
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
objects = g_list_append (NULL, collection); objects = g_list_append (NULL, collection);
@ -922,7 +924,8 @@ test_set_alias_sync (Test *test,
g_assert_no_error (error); g_assert_no_error (error);
g_assert (blah == NULL); g_assert (blah == NULL);
collection = secret_collection_new_sync (test->service, "/org/freedesktop/secrets/collection/english", NULL, &error); collection = secret_collection_new_sync (test->service, "/org/freedesktop/secrets/collection/english",
SECRET_COLLECTION_NONE, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
g_assert (SECRET_IS_COLLECTION (collection)); g_assert (SECRET_IS_COLLECTION (collection));

View File

@ -479,7 +479,7 @@ test_ensure_sync (Test *test,
flags = secret_service_get_flags (service); flags = secret_service_get_flags (service);
g_assert_cmpuint (flags, ==, SECRET_SERVICE_NONE); g_assert_cmpuint (flags, ==, SECRET_SERVICE_NONE);
ret = secret_service_ensure_collections_sync (service, NULL, &error); ret = secret_service_load_collections_sync (service, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
g_assert (ret == TRUE); g_assert (ret == TRUE);
@ -517,12 +517,12 @@ test_ensure_async (Test *test,
flags = secret_service_get_flags (service); flags = secret_service_get_flags (service);
g_assert_cmpuint (flags, ==, SECRET_SERVICE_NONE); g_assert_cmpuint (flags, ==, SECRET_SERVICE_NONE);
secret_service_ensure_collections (service, NULL, on_complete_get_result, &result); secret_service_load_collections (service, NULL, on_complete_get_result, &result);
g_assert (result == NULL); g_assert (result == NULL);
egg_test_wait (); egg_test_wait ();
ret = secret_service_ensure_collections_finish (service, result, &error); ret = secret_service_load_collections_finish (service, result, &error);
g_assert_no_error (error); g_assert_no_error (error);
g_assert (ret == TRUE); g_assert (ret == TRUE);
g_object_unref (result); g_object_unref (result);