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/ebook/e-book-listener.c | 29 +++++++++++++++ addressbook/backend/ebook/e-book-listener.h | 4 +++ addressbook/backend/ebook/e-book.c | 56 ++++++++++++++++++++--------- addressbook/backend/ebook/e-book.h | 5 ++- addressbook/backend/ebook/test-client.c | 15 ++++---- 5 files changed, 85 insertions(+), 24 deletions(-) (limited to 'addressbook/backend/ebook') diff --git a/addressbook/backend/ebook/e-book-listener.c b/addressbook/backend/ebook/e-book-listener.c index 5e1ff72da3..8ef9072bf6 100644 --- a/addressbook/backend/ebook/e-book-listener.c +++ b/addressbook/backend/ebook/e-book-listener.c @@ -201,6 +201,22 @@ e_book_listener_queue_authentication_response (EBookListener *listener, e_book_listener_queue_response (listener, resp); } +static void +e_book_listener_queue_get_supported_fields_response (EBookListener *listener, + EBookStatus status, + const GNOME_Evolution_Addressbook_stringlist *fields) +{ + EBookListenerResponse *resp; + + resp = g_new0 (EBookListenerResponse, 1); + + resp->op = GetSupportedFieldsResponse; + resp->status = status; + resp->fields = fields; + + e_book_listener_queue_response (listener, resp); +} + static void impl_BookListener_respond_create_card (PortableServer_Servant servant, const GNOME_Evolution_Addressbook_BookListener_CallStatus status, @@ -350,6 +366,18 @@ impl_BookListener_respond_authentication_result (PortableServer_Servant servant, listener, status); } +static void +impl_BookListener_response_get_supported_fields (PortableServer_Servant servant, + const GNOME_Evolution_Addressbook_BookListener_CallStatus status, + const GNOME_Evolution_Addressbook_stringlist *fields, + CORBA_Environment *ev) +{ + EBookListener *listener = E_BOOK_LISTENER (bonobo_object_from_servant (servant)); + + e_book_listener_queue_get_supported_fields_response ( + listener, status, fields); +} + static void impl_BookListener_report_connection_status (PortableServer_Servant servant, const CORBA_boolean connected, @@ -587,6 +615,7 @@ e_book_listener_get_epv (void) epv->notifyCardModified = impl_BookListener_respond_modify_card; epv->notifyAuthenticationResult = impl_BookListener_respond_authentication_result; + epv->notifySupportedFields = impl_BookListener_response_get_supported_fields; epv->notifyCursorRequested = impl_BookListener_respond_get_cursor; epv->notifyViewRequested = impl_BookListener_respond_get_view; diff --git a/addressbook/backend/ebook/e-book-listener.h b/addressbook/backend/ebook/e-book-listener.h index 42b4644e60..d999d21a65 100644 --- a/addressbook/backend/ebook/e-book-listener.h +++ b/addressbook/backend/ebook/e-book-listener.h @@ -47,6 +47,7 @@ typedef enum { GetBookViewResponse, GetChangesResponse, AuthenticationResponse, + GetSupportedFieldsResponse, /* Async events */ LinkStatusEvent, @@ -68,6 +69,9 @@ typedef struct { /* For GetBookViewReponse */ GNOME_Evolution_Addressbook_BookView book_view; + /* For GetSupportedFields */ + const GNOME_Evolution_Addressbook_stringlist *fields; + /* For OpenProgressEvent */ char *msg; short percent; diff --git a/addressbook/backend/ebook/e-book.c b/addressbook/backend/ebook/e-book.c index 873aa77805..1471d67f4c 100644 --- a/addressbook/backend/ebook/e-book.c +++ b/addressbook/backend/ebook/e-book.c @@ -331,6 +331,32 @@ e_book_do_link_event (EBook *book, resp->connected); } +static void +e_book_do_response_get_supported_fields (EBook *book, + EBookListenerResponse *resp) +{ + EBookOp *op; + EList *list; + int i; + + op = e_book_pop_op (book); + + if (op == NULL) { + g_warning ("e_book_do_response_get_supported_fields: Cannot find operation " + "in local op queue!\n"); + return; + } + + list = e_list_new ((EListCopyFunc)g_strdup, (EListFreeFunc)g_free, NULL); + + for (i = 0; i < resp->fields->_length; i ++) { + e_list_append (list, g_strdup (resp->fields->_buffer[i])); + } + + if (op->cb) + ((EBookFieldsCallback) op->cb) (book, resp->status, list, op->closure); + g_free (op); +} /* * Reading notices out of the EBookListener's queue. @@ -366,6 +392,9 @@ e_book_check_listener_queue (EBookListener *listener, EBook *book) case OpenBookResponse: e_book_do_response_open (book, resp); break; + case GetSupportedFieldsResponse: + e_book_do_response_get_supported_fields (book, resp); + break; case OpenProgressEvent: e_book_do_progress_event (book, resp); @@ -522,41 +551,34 @@ e_book_get_static_capabilities (EBook *book) return ret_val; } -EList * -e_book_get_supported_fields (EBook *book) +gboolean +e_book_get_supported_fields (EBook *book, + EBookFieldsCallback cb, + gpointer closure) { CORBA_Environment ev; - GNOME_Evolution_Addressbook_stringlist *stringlist; - EList *list; - int i; CORBA_exception_init (&ev); if (book->priv->load_state != URILoaded) { g_warning ("e_book_unload_uri: No URI is loaded!\n"); - return NULL; + return FALSE; } - stringlist = GNOME_Evolution_Addressbook_Book_getSupportedFields(book->priv->corba_book, &ev); + GNOME_Evolution_Addressbook_Book_getSupportedFields(book->priv->corba_book, &ev); if (ev._major != CORBA_NO_EXCEPTION) { g_warning ("e_book_get_supported_fields: Exception " "during get_supported_fields!\n"); CORBA_exception_free (&ev); - return NULL; - } - - list = e_list_new ((EListCopyFunc)g_strdup, (EListFreeFunc)g_free, NULL); - - for (i = 0; i < stringlist->_length; i ++) { - e_list_append (list, g_strdup (stringlist->_buffer[i])); + return FALSE; } - CORBA_free (stringlist); - CORBA_exception_free (&ev); - return list; + e_book_queue_op (book, cb, closure, NULL); + + return TRUE; } static gboolean diff --git a/addressbook/backend/ebook/e-book.h b/addressbook/backend/ebook/e-book.h index 244baeb331..6a68e010e4 100644 --- a/addressbook/backend/ebook/e-book.h +++ b/addressbook/backend/ebook/e-book.h @@ -48,6 +48,7 @@ typedef void (*EBookOpenProgressCallback) (EBook *book, typedef void (*EBookIdCallback) (EBook *book, EBookStatus status, const char *id, gpointer closure); typedef void (*EBookCursorCallback) (EBook *book, EBookStatus status, ECardCursor *cursor, gpointer closure); typedef void (*EBookBookViewCallback) (EBook *book, EBookStatus status, EBookView *book_view, gpointer closure); +typedef void (*EBookFieldsCallback) (EBook *book, EBookStatus status, EList *fields, gpointer closure); /* Creating a new addressbook. */ @@ -59,7 +60,9 @@ gboolean e_book_load_uri (EBook *book, void e_book_unload_uri (EBook *book); char *e_book_get_static_capabilities (EBook *book); -EList *e_book_get_supported_fields (EBook *book); +gboolean e_book_get_supported_fields (EBook *book, + EBookFieldsCallback cb, + gpointer closure); /* User authentication. */ void e_book_authenticate_user (EBook *book, diff --git a/addressbook/backend/ebook/test-client.c b/addressbook/backend/ebook/test-client.c index 556517026d..25a3cb6dc9 100644 --- a/addressbook/backend/ebook/test-client.c +++ b/addressbook/backend/ebook/test-client.c @@ -89,13 +89,8 @@ add_card_cb (EBook *book, EBookStatus status, const gchar *id, gpointer closure) } static void -auth_user_cb (EBook *book, EBookStatus status, gpointer closure) +get_fields_cb (EBook *book, EBookStatus status, EList *fields, gpointer closure) { - EList *fields; - - printf ("user authenticated\n"); - - fields = e_book_get_supported_fields (book); if (fields) { EIterator *iter = e_list_get_iterator (fields); @@ -114,6 +109,14 @@ auth_user_cb (EBook *book, EBookStatus status, gpointer closure) e_book_add_vcard(book, cardstr, add_card_cb, NULL); } + +static void +auth_user_cb (EBook *book, EBookStatus status, gpointer closure) +{ + printf ("user authenticated\n"); + e_book_get_supported_fields (book, get_fields_cb, closure); +} + static void book_open_cb (EBook *book, EBookStatus status, gpointer closure) { -- cgit v1.2.3