mirror of
https://gitlab.gnome.org/GNOME/libsecret.git
synced 2024-12-22 12:48:51 +00:00
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:
parent
3f0c69d862
commit
153dfcec5f
@ -3,9 +3,13 @@
|
||||
<INCLUDE>secret/secret-unstable.h</INCLUDE>
|
||||
SecretCollection
|
||||
SecretCollectionClass
|
||||
SecretCollectionFlags
|
||||
secret_collection_new
|
||||
secret_collection_new_finish
|
||||
secret_collection_new_sync
|
||||
secret_collection_load_items
|
||||
secret_collection_load_items_finish
|
||||
secret_collection_load_items_sync
|
||||
secret_collection_create
|
||||
secret_collection_create_finish
|
||||
secret_collection_create_sync
|
||||
@ -14,6 +18,7 @@ secret_collection_delete_finish
|
||||
secret_collection_delete_sync
|
||||
secret_collection_get_created
|
||||
secret_collection_get_service
|
||||
secret_collection_get_flags
|
||||
secret_collection_get_items
|
||||
secret_collection_get_label
|
||||
secret_collection_set_label
|
||||
@ -29,8 +34,10 @@ SECRET_COLLECTION_GET_CLASS
|
||||
SECRET_IS_COLLECTION
|
||||
SECRET_IS_COLLECTION_CLASS
|
||||
SECRET_TYPE_COLLECTION
|
||||
SECRET_TYPE_COLLECTION_FLAGS
|
||||
SecretCollectionPrivate
|
||||
secret_collection_get_type
|
||||
secret_collection_flags_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
@ -183,9 +190,9 @@ secret_service_get_session_path
|
||||
secret_service_ensure_session
|
||||
secret_service_ensure_session_finish
|
||||
secret_service_ensure_session_sync
|
||||
secret_service_ensure_collections
|
||||
secret_service_ensure_collections_finish
|
||||
secret_service_ensure_collections_sync
|
||||
secret_service_load_collections
|
||||
secret_service_load_collections_finish
|
||||
secret_service_load_collections_sync
|
||||
SecretSearchFlags
|
||||
secret_service_search
|
||||
secret_service_search_finish
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
#include "secret-collection.h"
|
||||
#include "secret-dbus-generated.h"
|
||||
#include "secret-enum-types.h"
|
||||
#include "secret-item.h"
|
||||
#include "secret-paths.h"
|
||||
#include "secret-private.h"
|
||||
@ -55,9 +56,20 @@
|
||||
* 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 {
|
||||
PROP_0,
|
||||
PROP_SERVICE,
|
||||
PROP_FLAGS,
|
||||
PROP_ITEMS,
|
||||
PROP_LABEL,
|
||||
PROP_LOCKED,
|
||||
@ -70,6 +82,7 @@ struct _SecretCollectionPrivate {
|
||||
SecretService *service;
|
||||
GCancellable *cancellable;
|
||||
gboolean constructing;
|
||||
SecretCollectionFlags init_flags;
|
||||
|
||||
/* Protected by mutex */
|
||||
GMutex mutex;
|
||||
@ -141,6 +154,9 @@ secret_collection_set_property (GObject *obj,
|
||||
g_object_add_weak_pointer (G_OBJECT (self->pv->service),
|
||||
(gpointer *)&self->pv->service);
|
||||
break;
|
||||
case PROP_FLAGS:
|
||||
self->pv->init_flags = g_value_get_flags (value);
|
||||
break;
|
||||
case PROP_LABEL:
|
||||
secret_collection_set_label (self, g_value_get_string (value),
|
||||
self->pv->cancellable, on_set_label,
|
||||
@ -164,6 +180,9 @@ secret_collection_get_property (GObject *obj,
|
||||
case PROP_SERVICE:
|
||||
g_value_set_object (value, self->pv->service);
|
||||
break;
|
||||
case PROP_FLAGS:
|
||||
g_value_set_flags (value, secret_collection_get_flags (self));
|
||||
break;
|
||||
case PROP_ITEMS:
|
||||
g_value_take_boxed (value, secret_collection_get_items (self));
|
||||
break;
|
||||
@ -245,175 +264,33 @@ collection_update_items (SecretCollection *self,
|
||||
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
|
||||
handle_property_changed (SecretCollection *self,
|
||||
const gchar *property_name,
|
||||
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");
|
||||
|
||||
else if (g_str_equal (property_name, "Locked"))
|
||||
} else if (g_str_equal (property_name, "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");
|
||||
|
||||
else if (g_str_equal (property_name, "Modified"))
|
||||
} else if (g_str_equal (property_name, "Modified")) {
|
||||
g_object_notify (G_OBJECT (self), "modified");
|
||||
|
||||
else if (g_str_equal (property_name, "Items") && !self->pv->constructing)
|
||||
collection_load_items_async (self, self->pv->cancellable, NULL, NULL);
|
||||
} else if (g_str_equal (property_name, "Items") && !self->pv->constructing) {
|
||||
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
|
||||
@ -542,6 +419,17 @@ secret_collection_class_init (SecretCollectionClass *klass)
|
||||
g_param_spec_object ("service", "Service", "Secret Service",
|
||||
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:
|
||||
*
|
||||
@ -622,8 +510,10 @@ secret_collection_initable_init (GInitable *initable,
|
||||
|
||||
self = SECRET_COLLECTION (initable);
|
||||
|
||||
if (!collection_load_items_sync (self, cancellable, error))
|
||||
if (self->pv->init_flags & SECRET_COLLECTION_LOAD_ITEMS) {
|
||||
if (!secret_collection_load_items_sync (self, cancellable, error))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
self->pv->constructing = FALSE;
|
||||
return TRUE;
|
||||
@ -658,7 +548,7 @@ on_init_items (GObject *source,
|
||||
SecretCollection *self = SECRET_COLLECTION (source);
|
||||
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_complete (res);
|
||||
@ -687,9 +577,12 @@ on_init_base (GObject *source,
|
||||
g_dbus_proxy_get_object_path (proxy));
|
||||
g_simple_async_result_complete (res);
|
||||
|
||||
} else {
|
||||
collection_load_items_async (self, closure->cancellable,
|
||||
} 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 {
|
||||
g_simple_async_result_complete (res);
|
||||
}
|
||||
|
||||
g_object_unref (res);
|
||||
@ -749,6 +642,7 @@ secret_collection_async_initable_iface (GAsyncInitableIface *iface)
|
||||
* secret_collection_new:
|
||||
* @service: a secret service object
|
||||
* @collection_path: the D-Bus path of the collection
|
||||
* @flags: options for the collection initialization
|
||||
* @cancellable: optional cancellation object
|
||||
* @callback: called when the operation completes
|
||||
* @user_data: data to be passed to the callback
|
||||
@ -760,6 +654,7 @@ secret_collection_async_initable_iface (GAsyncInitableIface *iface)
|
||||
void
|
||||
secret_collection_new (SecretService *service,
|
||||
const gchar *collection_path,
|
||||
SecretCollectionFlags flags,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data)
|
||||
@ -781,6 +676,7 @@ secret_collection_new (SecretService *service,
|
||||
"g-object-path", collection_path,
|
||||
"g-interface-name", SECRET_COLLECTION_INTERFACE,
|
||||
"service", service,
|
||||
"flags", flags,
|
||||
NULL);
|
||||
}
|
||||
|
||||
@ -820,6 +716,7 @@ secret_collection_new_finish (GAsyncResult *result,
|
||||
* secret_collection_new_sync:
|
||||
* @service: a secret service object
|
||||
* @collection_path: the D-Bus path of the collection
|
||||
* @flags: options for the collection initialization
|
||||
* @cancellable: optional cancellation object
|
||||
* @error: location to place an error on failure
|
||||
*
|
||||
@ -834,6 +731,7 @@ secret_collection_new_finish (GAsyncResult *result,
|
||||
SecretCollection *
|
||||
secret_collection_new_sync (SecretService *service,
|
||||
const gchar *collection_path,
|
||||
SecretCollectionFlags flags,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
@ -855,9 +753,218 @@ secret_collection_new_sync (SecretService *service,
|
||||
"g-object-path", collection_path,
|
||||
"g-interface-name", SECRET_COLLECTION_INTERFACE,
|
||||
"service", service,
|
||||
"flags", flags,
|
||||
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:
|
||||
* @self: the collection
|
||||
@ -922,7 +1029,8 @@ on_create_path (GObject *source,
|
||||
|
||||
path = secret_service_create_collection_path_finish (service, result, &error);
|
||||
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));
|
||||
} else {
|
||||
g_simple_async_result_take_error (res, error);
|
||||
@ -1082,7 +1190,9 @@ secret_collection_create_sync (SecretService *service,
|
||||
if (path == 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);
|
||||
|
||||
return collection;
|
||||
@ -1220,6 +1330,35 @@ secret_collection_get_service (SecretCollection *self)
|
||||
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:
|
||||
* @self: a collection
|
||||
|
@ -25,6 +25,11 @@
|
||||
|
||||
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_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))
|
||||
@ -53,6 +58,7 @@ GType secret_collection_get_type (void) G_GNUC_CON
|
||||
|
||||
void secret_collection_new (SecretService *service,
|
||||
const gchar *collection_path,
|
||||
SecretCollectionFlags flags,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
@ -62,6 +68,20 @@ SecretCollection * secret_collection_new_finish (GAsyncResult *re
|
||||
|
||||
SecretCollection * secret_collection_new_sync (SecretService *service,
|
||||
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,
|
||||
GError **error);
|
||||
|
||||
@ -98,6 +118,8 @@ gboolean secret_collection_delete_sync (SecretCollection
|
||||
|
||||
SecretService * secret_collection_get_service (SecretCollection *self);
|
||||
|
||||
SecretCollectionFlags secret_collection_get_flags (SecretCollection *self);
|
||||
|
||||
GList * secret_collection_get_items (SecretCollection *self);
|
||||
|
||||
gchar * secret_collection_get_label (SecretCollection *self);
|
||||
|
@ -1532,7 +1532,8 @@ on_read_alias_path (GObject *source,
|
||||
|
||||
/* No collection loaded, but valid path, load */
|
||||
} 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));
|
||||
}
|
||||
}
|
||||
@ -1662,6 +1663,7 @@ secret_service_read_alias_sync (SecretService *self,
|
||||
/* No collection loaded, but valid path, load */
|
||||
if (collection == NULL) {
|
||||
collection = secret_collection_new_sync (self, collection_path,
|
||||
SECRET_COLLECTION_LOAD_ITEMS,
|
||||
cancellable, error);
|
||||
}
|
||||
}
|
||||
|
@ -54,7 +54,7 @@
|
||||
* represent those collections while initializing a #SecretService then pass
|
||||
* 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
|
||||
* 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().
|
||||
*
|
||||
* 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);
|
||||
|
||||
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);
|
||||
@ -455,7 +455,7 @@ secret_service_class_init (SecretServiceClass *klass)
|
||||
*
|
||||
* To load the collections, specify the %SECRET_SERVICE_LOAD_COLLECTIONS
|
||||
* 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.
|
||||
*/
|
||||
g_object_class_install_property (object_class, PROP_COLLECTIONS,
|
||||
@ -489,14 +489,14 @@ service_ensure_for_flags_sync (SecretService *self,
|
||||
return FALSE;
|
||||
|
||||
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 TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
on_ensure_collections (GObject *source,
|
||||
on_load_collections (GObject *source,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
@ -504,7 +504,7 @@ on_ensure_collections (GObject *source,
|
||||
SecretService *self = SECRET_SERVICE (source);
|
||||
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_complete (res);
|
||||
@ -526,8 +526,8 @@ on_ensure_session (GObject *source,
|
||||
g_simple_async_result_complete (res);
|
||||
|
||||
} else if (closure->flags & SECRET_SERVICE_LOAD_COLLECTIONS) {
|
||||
secret_service_ensure_collections (self, closure->cancellable,
|
||||
on_ensure_collections, g_object_ref (res));
|
||||
secret_service_load_collections (self, closure->cancellable,
|
||||
on_load_collections, g_object_ref (res));
|
||||
|
||||
} else {
|
||||
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));
|
||||
|
||||
else if (closure->flags & SECRET_SERVICE_LOAD_COLLECTIONS)
|
||||
secret_service_ensure_collections (self, closure->cancellable,
|
||||
on_ensure_collections, g_object_ref (res));
|
||||
secret_service_load_collections (self, closure->cancellable,
|
||||
on_load_collections, g_object_ref (res));
|
||||
|
||||
else
|
||||
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
|
||||
* 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.
|
||||
*
|
||||
* 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
|
||||
* 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
|
||||
* 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
|
||||
* @cancellable: optional cancellation object
|
||||
* @callback: called when the operation completes
|
||||
@ -1396,7 +1396,7 @@ on_ensure_collection (GObject *source,
|
||||
* This method will return immediately and complete asynchronously.
|
||||
*/
|
||||
void
|
||||
secret_service_ensure_collections (SecretService *self,
|
||||
secret_service_load_collections (SecretService *self,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data)
|
||||
@ -1415,7 +1415,7 @@ secret_service_ensure_collections (SecretService *self,
|
||||
g_return_if_fail (paths != NULL);
|
||||
|
||||
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->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
|
||||
closure->collections = collections_table_new ();
|
||||
@ -1427,7 +1427,7 @@ secret_service_ensure_collections (SecretService *self,
|
||||
|
||||
/* No such collection yet create a new one */
|
||||
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));
|
||||
closure->collections_loading++;
|
||||
} 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
|
||||
* @result: the asynchronous result passed to the callback
|
||||
* @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
|
||||
*/
|
||||
gboolean
|
||||
secret_service_ensure_collections_finish (SecretService *self,
|
||||
secret_service_load_collections_finish (SecretService *self,
|
||||
GAsyncResult *result,
|
||||
GError **error)
|
||||
{
|
||||
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 (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))
|
||||
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
|
||||
* @cancellable: optional cancellation object
|
||||
* @error: location to place an error on failure
|
||||
@ -1491,7 +1491,7 @@ secret_service_ensure_collections_finish (SecretService *self,
|
||||
* Returns: whether the load was successful or not
|
||||
*/
|
||||
gboolean
|
||||
secret_service_ensure_collections_sync (SecretService *self,
|
||||
secret_service_load_collections_sync (SecretService *self,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
@ -1517,7 +1517,9 @@ secret_service_ensure_collections_sync (SecretService *self,
|
||||
|
||||
/* No such collection yet create a new one */
|
||||
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) {
|
||||
ret = FALSE;
|
||||
break;
|
||||
|
@ -137,16 +137,16 @@ const gchar * secret_service_ensure_session_sync (SecretService
|
||||
GCancellable *cancellable,
|
||||
GError **error);
|
||||
|
||||
void secret_service_ensure_collections (SecretService *self,
|
||||
void secret_service_load_collections (SecretService *self,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
|
||||
gboolean secret_service_ensure_collections_finish (SecretService *self,
|
||||
gboolean secret_service_load_collections_finish (SecretService *self,
|
||||
GAsyncResult *result,
|
||||
GError **error);
|
||||
|
||||
gboolean secret_service_ensure_collections_sync (SecretService *self,
|
||||
gboolean secret_service_load_collections_sync (SecretService *self,
|
||||
GCancellable *cancellable,
|
||||
GError **error);
|
||||
|
||||
|
@ -88,7 +88,8 @@ test_new_sync (Test *test,
|
||||
GError *error = NULL;
|
||||
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_cmpstr (g_dbus_proxy_get_object_path (G_DBUS_PROXY (collection)), ==, collection_path);
|
||||
@ -106,7 +107,8 @@ test_new_async (Test *test,
|
||||
SecretCollection *collection;
|
||||
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);
|
||||
|
||||
egg_test_wait ();
|
||||
@ -129,7 +131,8 @@ test_new_sync_noexist (Test *test,
|
||||
GError *error = NULL;
|
||||
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 (collection == NULL);
|
||||
}
|
||||
@ -143,7 +146,8 @@ test_new_async_noexist (Test *test,
|
||||
SecretCollection *collection;
|
||||
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);
|
||||
|
||||
egg_test_wait ();
|
||||
@ -211,7 +215,8 @@ test_properties (Test *test,
|
||||
gboolean locked;
|
||||
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 (secret_collection_get_locked (collection) == FALSE);
|
||||
@ -281,7 +286,8 @@ test_items (Test *test,
|
||||
GError *error = NULL;
|
||||
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);
|
||||
|
||||
items = secret_collection_get_items (collection);
|
||||
@ -312,7 +318,8 @@ test_items_empty (Test *test,
|
||||
GError *error = NULL;
|
||||
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);
|
||||
|
||||
items = secret_collection_get_items (collection);
|
||||
@ -336,7 +343,9 @@ test_items_empty_async (Test *test,
|
||||
GError *error = NULL;
|
||||
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);
|
||||
|
||||
egg_test_wait ();
|
||||
@ -366,7 +375,8 @@ test_set_label_sync (Test *test,
|
||||
gboolean ret;
|
||||
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);
|
||||
|
||||
label = secret_collection_get_label (collection);
|
||||
@ -395,7 +405,8 @@ test_set_label_async (Test *test,
|
||||
gboolean ret;
|
||||
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);
|
||||
|
||||
label = secret_collection_get_label (collection);
|
||||
@ -429,7 +440,8 @@ test_set_label_prop (Test *test,
|
||||
guint sigs = 2;
|
||||
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);
|
||||
|
||||
label = secret_collection_get_label (collection);
|
||||
@ -458,7 +470,8 @@ test_delete_sync (Test *test,
|
||||
GError *error = NULL;
|
||||
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);
|
||||
|
||||
ret = secret_collection_delete_sync (collection, NULL, &error);
|
||||
@ -467,7 +480,8 @@ test_delete_sync (Test *test,
|
||||
|
||||
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 (collection == NULL);
|
||||
}
|
||||
@ -482,7 +496,8 @@ test_delete_async (Test *test,
|
||||
GError *error = NULL;
|
||||
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);
|
||||
|
||||
secret_collection_delete (collection, NULL, on_async_result, &result);
|
||||
@ -497,7 +512,8 @@ test_delete_async (Test *test,
|
||||
|
||||
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 (collection == NULL);
|
||||
}
|
||||
|
@ -166,7 +166,8 @@ test_create_sync (Test *test,
|
||||
GHashTable *attributes;
|
||||
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);
|
||||
|
||||
attributes = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
@ -204,7 +205,8 @@ test_create_async (Test *test,
|
||||
GHashTable *attributes;
|
||||
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);
|
||||
|
||||
attributes = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
|
@ -397,7 +397,8 @@ test_lock_sync (Test *test,
|
||||
GList *objects;
|
||||
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);
|
||||
|
||||
objects = g_list_append (NULL, collection);
|
||||
@ -426,7 +427,8 @@ test_unlock_sync (Test *test,
|
||||
GList *objects;
|
||||
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);
|
||||
|
||||
objects = g_list_append (NULL, collection);
|
||||
@ -922,7 +924,8 @@ test_set_alias_sync (Test *test,
|
||||
g_assert_no_error (error);
|
||||
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 (SECRET_IS_COLLECTION (collection));
|
||||
|
||||
|
@ -479,7 +479,7 @@ test_ensure_sync (Test *test,
|
||||
flags = secret_service_get_flags (service);
|
||||
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 (ret == TRUE);
|
||||
|
||||
@ -517,12 +517,12 @@ test_ensure_async (Test *test,
|
||||
flags = secret_service_get_flags (service);
|
||||
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);
|
||||
|
||||
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 (ret == TRUE);
|
||||
g_object_unref (result);
|
||||
|
Loading…
Reference in New Issue
Block a user