diff options
Diffstat (limited to 'plugins/mail-remote/evolution-mail-listener.c')
-rw-r--r-- | plugins/mail-remote/evolution-mail-listener.c | 112 |
1 files changed, 87 insertions, 25 deletions
diff --git a/plugins/mail-remote/evolution-mail-listener.c b/plugins/mail-remote/evolution-mail-listener.c index 26dac759ee..842edf4f4f 100644 --- a/plugins/mail-remote/evolution-mail-listener.c +++ b/plugins/mail-remote/evolution-mail-listener.c @@ -31,10 +31,10 @@ #include <bonobo/bonobo-exception.h> #include "evolution-mail-listener.h" -#include <libedataserver/e-account-list.h> - #include "evolution-mail-store.h" +#include "evolution-mail-marshal.h" + #define PARENT_TYPE bonobo_object_get_type () static BonoboObjectClass *parent_class = NULL; @@ -45,6 +45,15 @@ struct _EvolutionMailListenerPrivate { int dummy; }; +enum { + EML_SESSION_CHANGED, + EML_STORE_CHANGED, + EML_FOLDER_CHANGED, + EML_LAST_SIGNAL +}; + +static guint eml_signals[EML_LAST_SIGNAL]; + /* GObject methods */ static void @@ -60,39 +69,46 @@ impl_dispose (GObject *object) static void impl_finalize (GObject *object) { + printf("EvolutionMailListener finalised!\n"); + (* G_OBJECT_CLASS (parent_class)->finalize) (object); } /* Evolution.Mail.Listener */ - -static void -impl_sessionChanged(PortableServer_Servant _servant, - const GNOME_Evolution_Mail_Session session, - const GNOME_Evolution_Mail_SessionChange *change, CORBA_Environment * ev) +static const char *change_type_name(int type) { - EvolutionMailListener *ems = (EvolutionMailListener *)bonobo_object_from_servant(_servant); - const char *what; - int i; - - printf("session changed!\n"); - ems = ems; - - switch (change->type) { + switch (type) { case GNOME_Evolution_Mail_ADDED: - what = "added"; + return "added"; break; case GNOME_Evolution_Mail_CHANGED: - what = "changed"; + return "changed"; break; case GNOME_Evolution_Mail_REMOVED: - what = "removed"; + return "removed"; break; + default: + return ""; } +} - printf("%d %s\n", change->stores._length, what); - for (i=0;i<change->stores._length;i++) { - printf("Store '%s' '%s'\n", change->stores._buffer[i].name, change->stores._buffer[i].uid); +static void +impl_sessionChanged(PortableServer_Servant _servant, + const GNOME_Evolution_Mail_Session session, + const GNOME_Evolution_Mail_SessionChanges *changes, CORBA_Environment * ev) +{ + EvolutionMailListener *eml = (EvolutionMailListener *)bonobo_object_from_servant(_servant); + int i, j; + + printf("session changed!\n"); + for (i=0;i<changes->_length;i++) { + printf(" %d %s", changes->_buffer[i].stores._length, change_type_name(changes->_buffer[i].type)); + for (j=0;j<changes->_buffer[i].stores._length;j++) { + printf(" %s %s\n", changes->_buffer[i].stores._buffer[j].uid, changes->_buffer[i].stores._buffer[j].name); + } } + + g_signal_emit(eml, eml_signals[EML_SESSION_CHANGED], 0, session, changes); } static void @@ -102,10 +118,18 @@ impl_storeChanged(PortableServer_Servant _servant, const GNOME_Evolution_Mail_StoreChanges * changes, CORBA_Environment * ev) { - EvolutionMailListener *ems = (EvolutionMailListener *)bonobo_object_from_servant(_servant); + EvolutionMailListener *eml = (EvolutionMailListener *)bonobo_object_from_servant(_servant); + int i, j; printf("store changed!\n"); - ems = ems; + for (i=0;i<changes->_length;i++) { + printf(" %d %s", changes->_buffer[i].folders._length, change_type_name(changes->_buffer[i].type)); + for (j=0;j<changes->_buffer[i].folders._length;j++) { + printf(" %s %s\n", changes->_buffer[i].folders._buffer[j].full_name, changes->_buffer[i].folders._buffer[j].name); + } + } + + g_signal_emit(eml, eml_signals[EML_STORE_CHANGED], 0, session, store, changes); } static void @@ -115,10 +139,18 @@ impl_folderChanged(PortableServer_Servant _servant, const GNOME_Evolution_Mail_Folder folder, const GNOME_Evolution_Mail_FolderChanges *changes, CORBA_Environment * ev) { - EvolutionMailListener *ems = (EvolutionMailListener *)bonobo_object_from_servant(_servant); + EvolutionMailListener *eml = (EvolutionMailListener *)bonobo_object_from_servant(_servant); + int i, j; printf("folder changed!\n"); - ems = ems; + for (i=0;i<changes->_length;i++) { + printf(" %d %s", changes->_buffer[i].messages._length, change_type_name(changes->_buffer[i].type)); + for (j=0;j<changes->_buffer[i].messages._length;j++) { + printf(" %s %s\n", changes->_buffer[i].messages._buffer[j].uid, changes->_buffer[i].messages._buffer[j].subject); + } + } + + g_signal_emit(eml, eml_signals[EML_STORE_CHANGED], 0, session, store, folder, changes); } /* Initialization */ @@ -139,6 +171,36 @@ evolution_mail_listener_class_init (EvolutionMailListenerClass *klass) object_class->finalize = impl_finalize; g_type_class_add_private(klass, sizeof(struct _EvolutionMailListenerPrivate)); + + eml_signals[EML_SESSION_CHANGED] = + g_signal_new("session-changed", + G_OBJECT_CLASS_TYPE (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EvolutionMailListenerClass, session_changed), + NULL, NULL, + evolution_mail_marshal_VOID__POINTER_POINTER, + G_TYPE_NONE, 2, + G_TYPE_POINTER, G_TYPE_POINTER); + + eml_signals[EML_STORE_CHANGED] = + g_signal_new("store-changed", + G_OBJECT_CLASS_TYPE (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EvolutionMailListenerClass, store_changed), + NULL, NULL, + evolution_mail_marshal_VOID__POINTER_POINTER_POINTER, + G_TYPE_NONE, 3, + G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER); + + eml_signals[EML_FOLDER_CHANGED] = + g_signal_new("folder-changed", + G_OBJECT_CLASS_TYPE (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EvolutionMailListenerClass, folder_changed), + NULL, NULL, + evolution_mail_marshal_VOID__POINTER_POINTER_POINTER_POINTER, + G_TYPE_NONE, 4, + G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER); } static void |