From 65438eb13d8d8f82f4a9fde03ed538809fe9be1b Mon Sep 17 00:00:00 2001 From: Chris Toshok Date: Wed, 21 Feb 2001 09:19:15 +0000 Subject: new function. (impl_GNOME_Evolution_Addressbook_Book_getSupportedFields): 2001-02-21 Chris Toshok * backend/pas/pas-book.c (pas_book_queue_get_supported_fields): new function. (impl_GNOME_Evolution_Addressbook_Book_getSupportedFields): track change to idl. (pas_book_respond_get_supported_fields): new function. * backend/pas/pas-book.h: add GetSupportedFields to the PASOperation enum. Also, add a stringlist field to the PASRequest struct. lastly, add a prototype for pas_book_respond_get_supported_fields. * backend/pas/pas-backend.h: remove prototype for pas_backend_get_supported_fields, and remove it from the vtable. * backend/pas/pas-backend.c (pas_backend_get_supported_fields): remove. (pas_backend_class_init): no vtable entry for get_supported_fields anymore. * backend/pas/pas-backend-ldap.c (pas_backend_ldap_process_get_supported_fields): new function. (pas_backend_ldap_process_client_requests): add case for GetSupportedFields. (pas_backend_ldap_class_init): get_supported_fields isn't in vtable anymore. * backend/pas/pas-backend-file.c (pas_backend_file_process_get_supported_fields): new function. (pas_backend_file_process_client_requests): add case for GetSupportedFields. (pas_backend_file_class_init): get_supported_fields isn't in vtable anymore. * backend/idl/addressbook.idl: Book::getSupportedFields now returns void and add BookListener::notifySupportedFields. * backend/ebook/test-client.c (get_fields_cb): new function. (auth_user_cb): track change to e_book_get_supported_fields. * backend/ebook/e-book.c (e_book_do_response_get_supported_fields): new function. (e_book_check_listener_queue): add case GetSupportedFieldsResponse. (e_book_get_supported_fields): switch to async model. * backend/ebook/e-book.h: switch e_book_get_supported_fields to an async model. * backend/ebook/e-book-listener.c (e_book_listener_queue_get_supported_fields_response): new function. (impl_BookListener_response_get_supported_fields): new function. (e_book_listener_get_epv): fill in epv's "notifySupportedFields" * backend/ebook/e-book-listener.h: add an async response for GetSupportedFields and add a stringlist member to the EBookListenerResponse struct. svn path=/trunk/; revision=8316 --- addressbook/backend/pas/pas-backend-file.c | 28 +++++++----- addressbook/backend/pas/pas-backend-ldap.c | 29 +++++++----- addressbook/backend/pas/pas-backend.c | 13 ------ addressbook/backend/pas/pas-backend.h | 3 -- addressbook/backend/pas/pas-book.c | 71 ++++++++++++++++++++++-------- addressbook/backend/pas/pas-book.h | 9 +++- 6 files changed, 97 insertions(+), 56 deletions(-) (limited to 'addressbook/backend/pas') diff --git a/addressbook/backend/pas/pas-backend-file.c b/addressbook/backend/pas/pas-backend-file.c index 94e65c9d81..e46bbd3976 100644 --- a/addressbook/backend/pas/pas-backend-file.c +++ b/addressbook/backend/pas/pas-backend-file.c @@ -1093,6 +1093,20 @@ pas_backend_file_process_authenticate_user (PASBackend *backend, GNOME_Evolution_Addressbook_BookListener_Success); } +static void +pas_backend_file_process_get_supported_fields (PASBackend *backend, + PASBook *book, + PASRequest *req) +{ + EList *fields = e_list_new ((EListCopyFunc)g_strdup, (EListFreeFunc)g_free, NULL); + + printf ("in pas_backend_file_get_supported_fields\n"); + + pas_book_respond_get_supported_fields (book, + GNOME_Evolution_Addressbook_BookListener_Success, + fields); +} + static gboolean can_write (PASBackend *backend) { @@ -1168,6 +1182,10 @@ pas_backend_file_process_client_requests (PASBook *book) case AuthenticateUser: pas_backend_file_process_authenticate_user (backend, book, req); break; + + case GetSupportedFields: + pas_backend_file_process_get_supported_fields (backend, book, req); + break; } g_free (req); @@ -1428,15 +1446,6 @@ pas_backend_file_get_static_capabilities (PASBackend *backend) return g_strdup("local"); } -static int -pas_backend_file_get_supported_fields (PASBackend *backend, - char ***fields) -{ - printf ("in pas_backend_file_get_supported_fields\n"); - *fields = NULL; - return 0; -} - static gboolean pas_backend_file_construct (PASBackendFile *backend) { @@ -1497,7 +1506,6 @@ pas_backend_file_class_init (PASBackendFileClass *klass) parent_class->add_client = pas_backend_file_add_client; parent_class->remove_client = pas_backend_file_remove_client; parent_class->get_static_capabilities = pas_backend_file_get_static_capabilities; - parent_class->get_supported_fields = pas_backend_file_get_supported_fields; object_class->destroy = pas_backend_file_destroy; } diff --git a/addressbook/backend/pas/pas-backend-ldap.c b/addressbook/backend/pas/pas-backend-ldap.c index 60e3aa0c88..1132c6fb14 100644 --- a/addressbook/backend/pas/pas-backend-ldap.c +++ b/addressbook/backend/pas/pas-backend-ldap.c @@ -1991,6 +1991,21 @@ pas_backend_ldap_process_authenticate_user (PASBackend *backend, check_for_evolve_person (bl); } +static void +pas_backend_ldap_process_get_supported_fields (PASBackend *backend, + PASBook *book, + PASRequest *req) + +{ + EList *fields = e_list_new ((EListCopyFunc)g_strdup, (EListFreeFunc)g_free, NULL); + + printf ("in pas_backend_ldap_get_supported_fields\n"); + + pas_book_respond_get_supported_fields (book, + GNOME_Evolution_Addressbook_BookListener_Success, + fields); +} + static gboolean pas_backend_ldap_can_write (PASBook *book) { @@ -2048,6 +2063,10 @@ pas_backend_ldap_process_client_requests (PASBook *book) case AuthenticateUser: pas_backend_ldap_process_authenticate_user (backend, book, req); break; + + case GetSupportedFields: + pas_backend_ldap_process_get_supported_fields (backend, book, req); + break; } g_free (req); @@ -2215,15 +2234,6 @@ pas_backend_ldap_get_static_capabilites (PASBackend *backend) return g_strdup("net"); } -static int -pas_backend_ldap_get_supported_fields (PASBackend *backend, - char ***fields) -{ - printf ("in pas_backend_ldap_get_supported_fields\n"); - *fields = NULL; - return 0; -} - static gboolean pas_backend_ldap_construct (PASBackendLDAP *backend) { @@ -2292,7 +2302,6 @@ pas_backend_ldap_class_init (PASBackendLDAPClass *klass) parent_class->add_client = pas_backend_ldap_add_client; parent_class->remove_client = pas_backend_ldap_remove_client; parent_class->get_static_capabilities = pas_backend_ldap_get_static_capabilites; - parent_class->get_supported_fields = pas_backend_ldap_get_supported_fields; object_class->destroy = pas_backend_ldap_destroy; } diff --git a/addressbook/backend/pas/pas-backend.c b/addressbook/backend/pas/pas-backend.c index 30bfdf773f..22b7184813 100644 --- a/addressbook/backend/pas/pas-backend.c +++ b/addressbook/backend/pas/pas-backend.c @@ -107,18 +107,6 @@ pas_backend_get_static_capabilities (PASBackend *backend) return CLASS (backend)->get_static_capabilities (backend); } -int -pas_backend_get_supported_fields (PASBackend *backend, - char ***fields) -{ - g_return_val_if_fail (backend != NULL, NULL); - g_return_val_if_fail (PAS_IS_BACKEND (backend), NULL); - - g_assert (CLASS (backend)->get_supported_fields != NULL); - - return CLASS (backend)->get_supported_fields (backend, fields); -} - /** * pas_backend_last_client_gone: * @backend: An addressbook backend. @@ -161,7 +149,6 @@ pas_backend_class_init (PASBackendClass *klass) klass->add_client = NULL; klass->remove_client = NULL; klass->get_static_capabilities = NULL; - klass->get_supported_fields = NULL; } /** diff --git a/addressbook/backend/pas/pas-backend.h b/addressbook/backend/pas/pas-backend.h index 547824ea44..be08d48950 100644 --- a/addressbook/backend/pas/pas-backend.h +++ b/addressbook/backend/pas/pas-backend.h @@ -45,7 +45,6 @@ typedef struct { gboolean (*add_client) (PASBackend *backend, GNOME_Evolution_Addressbook_BookListener listener); void (*remove_client) (PASBackend *backend, PASBook *book); char *(*get_static_capabilities) (PASBackend *backend); - int (*get_supported_fields) (PASBackend *backend, char ***fields); /* Notification signals */ void (* last_client_gone) (PASBackend *backend); @@ -64,8 +63,6 @@ void pas_backend_remove_client (PASBackend *backen PASBook *book); char *pas_backend_get_static_capabilities (PASBackend *backend); -int pas_backend_get_supported_fields (PASBackend *backend, - char ***fields); void pas_backend_last_client_gone (PASBackend *backend); GtkType pas_backend_get_type (void); diff --git a/addressbook/backend/pas/pas-book.c b/addressbook/backend/pas/pas-book.c index 2cb6c2f142..6add0987fc 100644 --- a/addressbook/backend/pas/pas-book.c +++ b/addressbook/backend/pas/pas-book.c @@ -7,6 +7,7 @@ #include #include +#include "e-util/e-list.h" #include "pas-book.h" static BonoboObjectClass *pas_book_parent_class; @@ -119,6 +120,18 @@ pas_book_queue_authenticate_user (PASBook *book, pas_book_queue_request (book, req); } +static void +pas_book_queue_get_supported_fields (PASBook *book) +{ + PASRequest *req; + + req = g_new0 (PASRequest, 1); + req->op = GetSupportedFields; + + pas_book_queue_request (book, req); +} + + static void pas_book_queue_get_book_view (PASBook *book, const GNOME_Evolution_Addressbook_BookViewListener listener, const char *search) { @@ -315,30 +328,13 @@ impl_GNOME_Evolution_Addressbook_Book_getStaticCapabilities (PortableServer_Serv return ret_val; } -static GNOME_Evolution_Addressbook_stringlist * +static void impl_GNOME_Evolution_Addressbook_Book_getSupportedFields (PortableServer_Servant servant, CORBA_Environment *ev) { PASBook *book = PAS_BOOK (bonobo_object_from_servant (servant)); - GNOME_Evolution_Addressbook_stringlist *stringlist; - char **supported_fields; - int num_fields, i; - - stringlist = GNOME_Evolution_Addressbook_stringlist__alloc (); - num_fields = pas_backend_get_supported_fields (book->priv->backend, &supported_fields); - stringlist->_buffer = CORBA_sequence_CORBA_string_allocbuf (num_fields); - stringlist->_maximum = num_fields; - stringlist->_length = num_fields; - - for (i = 0; num_fields; i++) { - stringlist->_buffer[i] = CORBA_string_dup (supported_fields[i]); - g_free (supported_fields[i]); - } - - g_free (supported_fields); - - return stringlist; + pas_book_queue_get_supported_fields (book); } /** @@ -523,6 +519,43 @@ pas_book_respond_authenticate_user (PASBook *book, CORBA_exception_free (&ev); } +void +pas_book_respond_get_supported_fields (PASBook *book, + GNOME_Evolution_Addressbook_BookListener_CallStatus status, + EList *fields) +{ + CORBA_Environment ev; + GNOME_Evolution_Addressbook_stringlist stringlist; + int num_fields; + EIterator *iter; + int i; + + CORBA_exception_init (&ev); + + num_fields = e_list_length (fields); + + stringlist._buffer = CORBA_sequence_CORBA_string_allocbuf (num_fields); + stringlist._maximum = num_fields; + stringlist._length = num_fields; + + iter = e_list_get_iterator (fields); + + for (i = 0; e_iterator_is_valid (iter); e_iterator_next (iter), i ++) { + stringlist._buffer[i] = CORBA_string_dup (e_iterator_get(iter)); + } + + gtk_object_unref (GTK_OBJECT (fields)); + + GNOME_Evolution_Addressbook_BookListener_notifySupportedFields ( + book->priv->listener, status, + &stringlist, + &ev); + + CORBA_exception_free (&ev); + + CORBA_free(stringlist._buffer); +} + /** * pas_book_respond_get_cursor: */ diff --git a/addressbook/backend/pas/pas-book.h b/addressbook/backend/pas/pas-book.h index d94d859d3e..1d401d33a4 100644 --- a/addressbook/backend/pas/pas-book.h +++ b/addressbook/backend/pas/pas-book.h @@ -16,6 +16,7 @@ #include #include #include +#include "e-util/e-list.h" typedef struct _PASBook PASBook; typedef struct _PASBookPrivate PASBookPrivate; @@ -31,7 +32,8 @@ typedef enum { GetBookView, GetChanges, CheckConnection, - AuthenticateUser + AuthenticateUser, + GetSupportedFields } PASOperation; typedef struct { @@ -43,6 +45,7 @@ typedef struct { char *user; char *passwd; GNOME_Evolution_Addressbook_BookViewListener listener; + GNOME_Evolution_Addressbook_stringlist fields; } PASRequest; struct _PASBook { @@ -81,6 +84,10 @@ void pas_book_respond_modify (PASBook GNOME_Evolution_Addressbook_BookListener_CallStatus status); void pas_book_respond_authenticate_user (PASBook *book, GNOME_Evolution_Addressbook_BookListener_CallStatus status); +void pas_book_respond_get_supported_fields (PASBook *book, + GNOME_Evolution_Addressbook_BookListener_CallStatus status, + EList *fields); + void pas_book_respond_get_cursor (PASBook *book, GNOME_Evolution_Addressbook_BookListener_CallStatus status, PASCardCursor *cursor); -- cgit v1.2.3