diff options
Diffstat (limited to 'addressbook/backend/ebook/e-book-listener.c')
-rw-r--r-- | addressbook/backend/ebook/e-book-listener.c | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/addressbook/backend/ebook/e-book-listener.c b/addressbook/backend/ebook/e-book-listener.c new file mode 100644 index 0000000000..b0e10fc90c --- /dev/null +++ b/addressbook/backend/ebook/e-book-listener.c @@ -0,0 +1,271 @@ +/* + * Author: + * Nat Friedman (nat@helixcode.com) + * + * Copyright 2000, Helix Code, Inc. + */ + +#include <e-book-listener.h> + +static GnomeObjectClass *e_book_listener_parent_class; +POA_Evolution_BookListener__vepv e_book_listener_vepv; + +static EBookStatus +e_book_listener_convert_status (const Evolution_BookListener_CallStatus status) +{ + switch (status) { + + case Evolution_BookListener_RepositoryOffline: + return E_BOOK_STATUS_REPOSITORY_OFFLINE; + case Evolution_BookListener_PermissionDenied: + return E_BOOK_STATUS_PERMISSION_DENIED; + case Evolution_BookListener_CardNotFound: + return E_BOOK_STATUS_CARD_NOT_FOUND; + default: + g_warning ("e_book_listener_convert_status: Unknown status " + "from card server: %d\n", (int) status); + return E_BOOK_STATUS_UNKNOWN; + + } +} + +static EBookListener * +e_book_listener_construct (EBookListener *listener, EBook *book) +{ + POA_Evolution_BookListener *servant; + CORBA_Environment ev; + CORBA_Object obj; + + g_assert (listener != NULL); + g_assert (E_IS_BOOK_LISTENER (listener)); + g_assert (book != NULL); + g_assert (E_IS_BOOK (book)); + + listener->book = book; + + servant = (POA_Evolution_BookListener *) g_new0 (GnomeObjectServant, 1); + servant->vepv = &e_book_listener_vepv; + + CORBA_exception_init (&ev); + + POA_Evolution_BookListener__init ((PortableServer_Servant) servant, &ev); + if (ev._major != CORBA_NO_EXCEPTION) { + g_free (servant); + CORBA_exception_free (&ev); + + return NULL; + } + + CORBA_exception_free (&ev); + + obj = gnome_object_activate_servant (GNOME_OBJECT (listener), servant); + if (obj == CORBA_OBJECT_NIL) { + g_free (servant); + + return NULL; + } + + gnome_object_construct (GNOME_OBJECT (listener), obj); + + return listener; +} + +/** + * e_book_listener_new: + */ +EBookListener * +e_book_listener_new (EBook *book) +{ + EBookListener *listener; + EBookListener *retval; + + g_return_val_if_fail (book != NULL, NULL); + g_return_val_if_fail (E_IS_BOOK (book), NULL); + + listener = gtk_type_new (E_BOOK_LISTENER_TYPE); + + retval = e_book_listener_construct (listener, book); + + if (retval == NULL) { + g_warning ("e_book_listener_new: Error constructing " + "EBookListener!\n"); + gtk_object_unref (GTK_OBJECT (listener)); + return NULL; + } + + return retval; +} + +static void +impl_BookListener_respond_create_card (PortableServer_Servant servant, + const Evolution_BookListener_CallStatus status, + CORBA_Environment *ev) +{ + EBookListener *listener = E_BOOK_LISTENER (gnome_object_from_servant (servant)); + + if (listener->create_response == NULL) + return; + + (listener->create_response) (listener->book, + e_book_listener_convert_status (status), + listener->closure); +} + +static void +impl_BookListener_respond_remove_card (PortableServer_Servant servant, + const Evolution_BookListener_CallStatus status, + CORBA_Environment *ev) +{ + EBookListener *listener = E_BOOK_LISTENER (gnome_object_from_servant (servant)); + + if (listener->remove_response == NULL) + return; + + (listener->remove_response) (listener->book, + e_book_listener_convert_status (status), + listener->closure); +} + +static void +impl_BookListener_respond_modify_card (PortableServer_Servant servant, + const Evolution_BookListener_CallStatus status, + CORBA_Environment *ev) +{ + EBookListener *listener = E_BOOK_LISTENER (gnome_object_from_servant (servant)); + + if (listener->modify_response == NULL) + return; + + (listener->modify_response) (listener->book, + e_book_listener_convert_status (status), + listener->closure); +} + +static void +impl_BookListener_report_open_book_progress (PortableServer_Servant servant, + const CORBA_char *status_message, + const CORBA_short percent, + CORBA_Environment *ev) +{ + EBookListener *listener = E_BOOK_LISTENER (gnome_object_from_servant (servant)); + + if (listener->open_progress == NULL) + return; + + (listener->open_progress) (listener->book, + status_message, + percent, + listener->closure); +} + +static void +impl_BookListener_respond_open_book (PortableServer_Servant servant, + const Evolution_BookListener_CallStatus status, + const Evolution_Book book, + CORBA_Environment *ev) +{ + EBookListener *listener = E_BOOK_LISTENER (gnome_object_from_servant (servant)); + + if (listener->open_response == NULL) + return; + + (listener->open_response) (listener->book, + e_book_listener_convert_status (status), + book, + listener->closure); +} + + +static void +impl_BookListener_report_connection_status (PortableServer_Servant servant, + const CORBA_boolean connected, + CORBA_Environment *ev) +{ + EBookListener *listener = E_BOOK_LISTENER (gnome_object_from_servant (servant)); + + if (listener->connect_status == NULL) + return; + + (listener->connect_status) (listener->book, connected, listener->closure); +} + + +static void +e_book_listener_init (EBook *listener) +{ +} + +static void +e_book_listener_destroy (GtkObject *object) +{ + EBookListener *listener = E_BOOK_LISTENER (object); + CORBA_Environment ev; + + CORBA_exception_init (&ev); + + GTK_OBJECT_CLASS (e_book_listener_parent_class)->destroy (object); +} + +POA_Evolution_BookListener__epv * +e_book_listener_get_epv (void) +{ + POA_Evolution_BookListener__epv *epv; + + epv = g_new0 (POA_Evolution_BookListener__epv, 1); + + epv->report_open_book_progress = impl_BookListener_report_open_book_progress; + epv->respond_open_book = impl_BookListener_respond_open_book; + + epv->respond_create_card = impl_BookListener_respond_create_card; + epv->respond_remove_card = impl_BookListener_respond_remove_card; + epv->respond_modify_card = impl_BookListener_respond_modify_card; + + epv->report_connection_status = impl_BookListener_report_connection_status; + + return epv; +} + +static void +e_book_listener_corba_class_init (void) +{ + e_book_listener_vepv.GNOME_Unknown_epv = gnome_object_get_epv (); + e_book_listener_vepv.Evolution_BookListener_epv = e_book_listener_get_epv (); +} + +static void +e_book_listener_class_init (EBookListenerClass *klass) +{ + GtkObjectClass *object_class = (GtkObjectClass *) klass; + + e_book_listener_parent_class = gtk_type_class (gnome_object_get_type ()); + + object_class->destroy = e_book_listener_destroy; + + e_book_listener_corba_class_init (); +} + +/** + * e_book_listener_get_type: + */ +GtkType +e_book_listener_get_type (void) +{ + static GtkType type = 0; + + if (! type) { + GtkTypeInfo info = { + "EBookListener", + sizeof (EBookListener), + sizeof (EBookListenerClass), + (GtkClassInitFunc) e_book_listener_class_init, + (GtkObjectInitFunc) e_book_listener_init, + NULL, /* reserved 1 */ + NULL, /* reserved 2 */ + (GtkClassInitFunc) NULL + }; + + type = gtk_type_unique (gnome_object_get_type (), &info); + } + + return type; +} |