aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/mail-remote/evolution-mail-listener.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/mail-remote/evolution-mail-listener.c')
-rw-r--r--plugins/mail-remote/evolution-mail-listener.c112
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