diff options
author | Travis Reitter <treitter@gmail.com> | 2009-12-14 10:47:42 -0800 |
---|---|---|
committer | Travis Reitter <treitter@gmail.com> | 2009-12-14 11:16:11 -0800 |
commit | 630417dd8cf0e693955b0f424a51d22d84a452ad (patch) | |
tree | 2b38baf9b859bfc1d5dd0cd06862e0e44a44573d | |
parent | c7f3d975bcf5397ecb00b5e710bf4f0fbf740165 (diff) | |
download | evolution-data-server-630417dd8cf0e693955b0f424a51d22d84a452ad.tar.gz |
Port remaining EBook D-Bus methods (authenticateUser, getChanges, cancelOperation) over to gdbus. These have less-complete testing than the previous ones.
-rw-r--r-- | addressbook/libebook/e-book.c | 48 | ||||
-rw-r--r-- | addressbook/libebook/e-data-book-gdbus-bindings-common.h | 61 | ||||
-rw-r--r-- | addressbook/libebook/e-data-book-gdbus-bindings.h | 124 |
3 files changed, 211 insertions, 22 deletions
diff --git a/addressbook/libebook/e-book.c b/addressbook/libebook/e-book.c index 5c48b7e54..b2850a748 100644 --- a/addressbook/libebook/e-book.c +++ b/addressbook/libebook/e-book.c @@ -32,8 +32,6 @@ #include "e-contact.h" #include "e-book-view-private.h" #include "e-data-book-factory-gdbus-bindings.h" -/* FIXME: cut this out */ -#include "e-data-book-bindings.h" #include "e-data-book-gdbus-bindings.h" #include "libedata-book/e-data-book-types.h" #include "e-book-marshal.h" @@ -828,17 +826,19 @@ e_book_authenticate_user (EBook *book, GError *err = NULL; e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG); - e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE); + e_return_error_if_fail (book->priv->gdbus_proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE); LOCK_CONN (); - org_gnome_evolution_dataserver_addressbook_Book_authenticate_user (book->priv->proxy, user, passwd, auth_method, &err); + e_data_book_gdbus_authenticate_user_sync (book->priv->gdbus_proxy, user, passwd, auth_method, &err); UNLOCK_CONN (); return unwrap_gerror (err, error); } static void -authenticate_user_reply(DBusGProxy *proxy, GError *error, gpointer user_data) +authenticate_user_reply (GDBusProxy *proxy, + GError *error, + gpointer user_data) { AsyncData *data = user_data; EBookCallback cb = data->callback; @@ -867,17 +867,17 @@ authenticate_user_reply(DBusGProxy *proxy, GError *error, gpointer user_data) * Return value: %FALSE if successful, %TRUE otherwise. **/ guint -e_book_async_authenticate_user (EBook *book, - const gchar *user, - const gchar *passwd, - const gchar *auth_method, - EBookCallback cb, - gpointer closure) +e_book_async_authenticate_user (EBook *book, + const gchar *user, + const gchar *passwd, + const gchar *auth_method, + EBookCallback cb, + gpointer closure) { AsyncData *data; e_return_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG); - e_return_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE); + e_return_async_error_if_fail (book->priv->gdbus_proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE); e_return_async_error_if_fail (user, E_BOOK_ERROR_INVALID_ARG); e_return_async_error_if_fail (passwd, E_BOOK_ERROR_INVALID_ARG); e_return_async_error_if_fail (auth_method, E_BOOK_ERROR_INVALID_ARG); @@ -888,7 +888,7 @@ e_book_async_authenticate_user (EBook *book, data->closure = closure; LOCK_CONN (); - org_gnome_evolution_dataserver_addressbook_Book_authenticate_user_async (book->priv->proxy, user, passwd, auth_method, authenticate_user_reply, data); + e_data_book_gdbus_authenticate_user (book->priv->gdbus_proxy, user, passwd, auth_method, authenticate_user_reply, data); UNLOCK_CONN (); return 0; @@ -1532,11 +1532,12 @@ e_book_get_changes (EBook *book, GPtrArray *array = NULL; e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG); - e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE); + e_return_error_if_fail (book->priv->gdbus_proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE); LOCK_CONN (); - org_gnome_evolution_dataserver_addressbook_Book_get_changes (book->priv->proxy, changeid, &array, &err); + e_data_book_gdbus_get_changes_sync (book->priv->gdbus_proxy, changeid, &array, &err); UNLOCK_CONN (); + if (!err) { *changes = parse_changes_array (array); return TRUE; @@ -1546,7 +1547,10 @@ e_book_get_changes (EBook *book, } static void -get_changes_reply (DBusGProxy *proxy, GPtrArray *changes, GError *error, gpointer user_data) +get_changes_reply (GDBusProxy *proxy, + GPtrArray *changes, + GError *error, + gpointer user_data) { AsyncData *data = user_data; EBookListCallback cb = data->callback; @@ -1583,7 +1587,7 @@ e_book_async_get_changes (EBook *book, AsyncData *data; e_return_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG); - e_return_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE); + e_return_async_error_val_if_fail (book->priv->gdbus_proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE); data = g_slice_new0 (AsyncData); data->book = g_object_ref (book); @@ -1591,7 +1595,7 @@ e_book_async_get_changes (EBook *book, data->closure = closure; LOCK_CONN (); - org_gnome_evolution_dataserver_addressbook_Book_get_changes_async (book->priv->proxy, changeid, get_changes_reply, data); + e_data_book_gdbus_get_changes (book->priv->gdbus_proxy, changeid, get_changes_reply, data); UNLOCK_CONN (); return 0; @@ -1641,10 +1645,10 @@ e_book_cancel (EBook *book, gboolean res; e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG); - e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE); + e_return_error_if_fail (book->priv->gdbus_proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE); LOCK_CONN (); - res = org_gnome_evolution_dataserver_addressbook_Book_cancel_operation (book->priv->proxy, error); + res = e_data_book_gdbus_cancel_operation_sync (book->priv->gdbus_proxy, error); UNLOCK_CONN (); return res; @@ -1661,10 +1665,10 @@ e_book_cancel_async_op (EBook *book, GError **error) gboolean res; e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG); - e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE); + e_return_error_if_fail (book->priv->gdbus_proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE); LOCK_CONN (); - res = org_gnome_evolution_dataserver_addressbook_Book_cancel_operation (book->priv->proxy, error); + res = e_data_book_gdbus_cancel_operation_sync (book->priv->gdbus_proxy, error); UNLOCK_CONN (); return res; diff --git a/addressbook/libebook/e-data-book-gdbus-bindings-common.h b/addressbook/libebook/e-data-book-gdbus-bindings-common.h index 8ccb7498b..2c85b599d 100644 --- a/addressbook/libebook/e-data-book-gdbus-bindings-common.h +++ b/addressbook/libebook/e-data-book-gdbus-bindings-common.h @@ -123,6 +123,62 @@ demarshal_retvals__STRINGVECTOR (GVariant *retvals, char ***OUT_strv1) return success; } +static gboolean +demarshal_retvals__GPTRARRAY_with_GVALUEARRAY_with_UINT_STRING_endwith_endwith + (GVariant *retvals, + GPtrArray **OUT_ptrarray1) +{ + gboolean success = TRUE; + + if (retvals) { + GVariant *array1_variant; + GVariantIter iter1; + GPtrArray *ptrarray1 = NULL; + const guint uint1_tmp; + const char *string1_tmp = NULL; + + /* deshelling a (a(us)); there should always be exactly one + * a(us) in the outermost tuple */ + array1_variant = g_variant_get_child_value (retvals, 0); + g_variant_iter_init (&iter1, array1_variant); + + /* return NULL instead of an empty GPtrArray* if there's nothing + * to put in it */ + if (g_variant_n_children (array1_variant) < 1) { + goto empty_inner_array; + } + + ptrarray1 = g_ptr_array_new (); + + while (g_variant_iter_next (&iter1, "(us)", &uint1_tmp, &string1_tmp)) { + GValueArray *valuearray = NULL; + GValue uint_value1 = {0}; + GValue string_value1 = {0}; + + valuearray = g_value_array_new (2); + g_value_init (&uint_value1, G_TYPE_UINT); + g_value_init (&string_value1, G_TYPE_STRING); + + g_value_set_uint (&uint_value1, uint1_tmp); + g_value_set_string (&string_value1, string1_tmp); + + g_value_array_append (valuearray, &uint_value1); + g_value_array_append (valuearray, &string_value1); + g_ptr_array_add (ptrarray1, valuearray); + } + +empty_inner_array: + *OUT_ptrarray1 = ptrarray1; + + g_variant_unref (retvals); + } else { + success = FALSE; + } + + return success; +} + + typedef void (*reply__VOID) (GDBusProxy *proxy, GError *error, gpointer user_data); @@ -142,4 +198,9 @@ typedef void (*reply__STRINGVECTOR) (GDBusProxy *proxy, GError *error, gpointer user_data); +typedef void (*reply__GPTRARRAY_with_GVALUEARRAY_with_UINT_STRING_endwith_endwith) (GDBusProxy *proxy, + GPtrArray *OUT_ptrarray1, + GError *error, + gpointer user_data); + #endif /* _E_DATA_BOOK_GDBUS_BINDINGS_COMMON_H */ diff --git a/addressbook/libebook/e-data-book-gdbus-bindings.h b/addressbook/libebook/e-data-book-gdbus-bindings.h index d6ed01914..385b25810 100644 --- a/addressbook/libebook/e-data-book-gdbus-bindings.h +++ b/addressbook/libebook/e-data-book-gdbus-bindings.h @@ -97,6 +97,62 @@ e_data_book_gdbus_close_sync (GDBusProxy *proxy, } static gboolean +e_data_book_gdbus_authenticate_user_sync (GDBusProxy *proxy, + const char *IN_user, + const char *IN_passwd, + const char *IN_auth_method, + GError **error) +{ + GVariant *parameters; + GVariant *retvals; + + parameters = g_variant_new ("(sss)", IN_user, IN_passwd, IN_auth_method); + retvals = g_dbus_proxy_invoke_method_sync (proxy, "authenticateUser", parameters, -1, NULL, error); + + return demarshal_retvals__VOID (retvals); +} + +static void +authenticate_user_cb (GDBusProxy *proxy, + GAsyncResult *result, + gpointer user_data) +{ + Closure *closure = user_data; + GVariant *retvals; + GError *error = NULL; + + retvals = g_dbus_proxy_invoke_method_finish (proxy, result, &error); + if (retvals) { + if (!demarshal_retvals__VOID (retvals)) { + error = g_error_new (E_BOOK_ERROR, E_BOOK_ERROR_CORBA_EXCEPTION, "demarshalling results for Book method 'authenticateUser'"); + } + } + + (*(reply__VOID)closure->cb) (proxy, error, closure->user_data); + closure_free (closure); +} + +static void +e_data_book_gdbus_authenticate_user (GDBusProxy *proxy, + const char *IN_user, + const char *IN_passwd, + const char *IN_auth_method, + reply__VOID callback, + gpointer user_data) +{ + GVariant *parameters; + Closure *closure; + + parameters = g_variant_new ("(sss)", IN_user, IN_passwd, IN_auth_method); + + closure = g_slice_new (Closure); + closure->cb = G_CALLBACK (callback); + closure->user_data = user_data; + + g_dbus_proxy_invoke_method (proxy, "authenticateUser", parameters, -1, NULL, (GAsyncReadyCallback) authenticate_user_cb, closure); +} + +static gboolean e_data_book_gdbus_remove_sync (GDBusProxy *proxy, GError **error) { @@ -642,4 +698,72 @@ e_data_book_gdbus_get_book_view (GDBusProxy *proxy, g_dbus_proxy_invoke_method (proxy, "getBookView", parameters, -1, NULL, (GAsyncReadyCallback) get_book_view_cb, closure); } +static gboolean +e_data_book_gdbus_cancel_operation_sync (GDBusProxy *proxy, + GError **error) +{ + GVariant *parameters; + GVariant *retvals; + + parameters = g_variant_new ("()"); + retvals = g_dbus_proxy_invoke_method_sync (proxy, "cancelOperation", parameters, -1, NULL, error); + + return demarshal_retvals__VOID (retvals); +} + +static gboolean +e_data_book_gdbus_get_changes_sync (GDBusProxy *proxy, + const char *IN_change_id, + GPtrArray **OUT_changes, + GError **error) +{ + GVariant *parameters; + GVariant *retvals; + + parameters = g_variant_new ("(s)", IN_change_id); + retvals = g_dbus_proxy_invoke_method_sync (proxy, "getChanges", parameters, -1, NULL, error); + + return demarshal_retvals__GPTRARRAY_with_GVALUEARRAY_with_UINT_STRING_endwith_endwith (retvals, OUT_changes); +} + +static void +get_changes_cb (GDBusProxy *proxy, + GAsyncResult *result, + gpointer user_data) +{ + Closure *closure = user_data; + GVariant *retvals; + GError *error = NULL; + GPtrArray *OUT_changes = NULL; + + retvals = g_dbus_proxy_invoke_method_finish (proxy, result, &error); + if (retvals) { + if (!demarshal_retvals__GPTRARRAY_with_GVALUEARRAY_with_UINT_STRING_endwith_endwith (retvals, &OUT_changes)) { + error = g_error_new (E_BOOK_ERROR, E_BOOK_ERROR_CORBA_EXCEPTION, "demarshalling results for Book method 'getChanges'"); + } + } + + (*(reply__GPTRARRAY_with_GVALUEARRAY_with_UINT_STRING_endwith_endwith) closure->cb) (proxy, OUT_changes, error, closure->user_data); + closure_free (closure); +} + +static void +e_data_book_gdbus_get_changes (GDBusProxy *proxy, + const char *IN_change_id, + reply__GPTRARRAY_with_GVALUEARRAY_with_UINT_STRING_endwith_endwith callback, + gpointer user_data) +{ + GVariant *parameters; + Closure *closure; + + parameters = g_variant_new ("(s)", IN_change_id); + + closure = g_slice_new (Closure); + closure->cb = G_CALLBACK (callback); + closure->user_data = user_data; + + g_dbus_proxy_invoke_method (proxy, "getChanges", parameters, -1, NULL, (GAsyncReadyCallback) get_changes_cb, closure); +} + + G_END_DECLS |