diff options
Diffstat (limited to 'addressbook/backend/ebook/e-book.c')
-rw-r--r-- | addressbook/backend/ebook/e-book.c | 121 |
1 files changed, 112 insertions, 9 deletions
diff --git a/addressbook/backend/ebook/e-book.c b/addressbook/backend/ebook/e-book.c index b3c2e12b57..e95ff8f751 100644 --- a/addressbook/backend/ebook/e-book.c +++ b/addressbook/backend/ebook/e-book.c @@ -1,3 +1,4 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * The Evolution addressbook client object. * @@ -97,6 +98,25 @@ e_book_pop_op (EBook *book) } static void +e_book_do_response_create_card (EBook *book, + EBookListenerResponse *resp) +{ + EBookOp *op; + + op = e_book_pop_op (book); + + if (op == NULL) { + g_warning ("e_book_do_response_create_card: Cannot find operation " + "in local op queue!\n"); + return; + } + + ((EBookIdCallback) op->cb) (book, resp->status, resp->id, op->closure); + g_free (resp->id); + g_free (op); +} + +static void e_book_do_response_generic (EBook *book, EBookListenerResponse *resp) { @@ -115,6 +135,52 @@ e_book_do_response_generic (EBook *book, } static void +e_book_do_response_get_cursor (EBook *book, + EBookListenerResponse *resp) +{ + CORBA_Environment ev; + EBookOp *op; + ECardCursor *cursor; + + op = e_book_pop_op (book); + + if (op == NULL) { + g_warning ("e_book_do_response_create_card: Cannot find operation " + "in local op queue!\n"); + return; + } + + cursor = e_card_cursor_new(resp->cursor); + + ((EBookCursorCallback) op->cb) (book, resp->status, cursor, op->closure); + + /* + * Release the remote Evolution_Book in the PAS. + */ + CORBA_exception_init (&ev); + + Bonobo_Unknown_unref (resp->cursor, &ev); + + if (ev._major != CORBA_NO_EXCEPTION) { + g_warning ("e_book_do_response_get_curosr: Exception unref'ing " + "remote Evolution_CardCursor interface!\n"); + CORBA_exception_free (&ev); + CORBA_exception_init (&ev); + } + + CORBA_Object_release (resp->cursor, &ev); + + if (ev._major != CORBA_NO_EXCEPTION) { + g_warning ("e_book_do_response_get_cursor: Exception releasing " + "remote Evolution_CardCursor interface!\n"); + } + + CORBA_exception_free (&ev); + + g_free (op); +} + +static void e_book_do_response_open (EBook *book, EBookListenerResponse *resp) { @@ -205,10 +271,15 @@ e_book_check_listener_queue (EBookListener *listener) switch (resp->op) { case CreateCardResponse: + e_book_do_response_create_card (book, resp); + break; case RemoveCardResponse: case ModifyCardResponse: e_book_do_response_generic (book, resp); break; + case GetCursorResponse: + e_book_do_response_get_cursor (book, resp); + break; case OpenBookResponse: e_book_do_response_open (book, resp); break; @@ -541,10 +612,10 @@ e_book_remove_card_by_id (EBook *book, * e_book_add_card: */ gboolean -e_book_add_card (EBook *book, - ECard *card, - EBookCallback cb, - gpointer closure) +e_book_add_card (EBook *book, + ECard *card, + EBookIdCallback cb, + gpointer closure) { char *vcard; @@ -579,10 +650,10 @@ e_book_add_card (EBook *book, * e_book_add_vcard: */ gboolean -e_book_add_vcard (EBook *book, - const char *vcard, - EBookCallback cb, - gpointer closure) +e_book_add_vcard (EBook *book, + const char *vcard, + EBookIdCallback cb, + gpointer closure) { CORBA_Environment ev; @@ -609,7 +680,7 @@ e_book_add_vcard (EBook *book, CORBA_exception_free (&ev); - e_book_queue_op (book, cb, closure); + e_book_queue_op (book, (EBookCallback) cb, closure); return TRUE; } @@ -726,6 +797,38 @@ e_book_check_connection (EBook *book) return TRUE; } +gboolean e_book_get_all_cards (EBook *book, + EBookCursorCallback cb, + gpointer closure) +{ + CORBA_Environment ev; + + g_return_val_if_fail (book != NULL, FALSE); + g_return_val_if_fail (E_IS_BOOK (book), FALSE); + + if (book->priv->load_state != URILoaded) { + g_warning ("e_book_check_connection: No URI loaded!\n"); + return FALSE; + } + + CORBA_exception_init (&ev); + + Evolution_Book_get_all_cards (book->priv->corba_book, &ev); + + if (ev._major != CORBA_NO_EXCEPTION) { + g_warning ("e_book_get_all_cards: Exception " + "querying list of cards!\n"); + CORBA_exception_free (&ev); + return FALSE; + } + + CORBA_exception_free (&ev); + + e_book_queue_op (book, cb, closure); + + return TRUE; +} + /** * e_book_get_name: */ |