#include #include #include #include "Evolution-DataServer-Mail.h" #include "evolution-mail-listener.h" #include static EvolutionMailListener *listener; static GNOME_Evolution_Mail_Session get_session(void) { char *path, *ior; GNOME_Evolution_Mail_Session sess = NULL; CORBA_Environment ev = { 0 }; /* The new-improved bonobo-activation ... */ path = g_build_filename(g_get_home_dir(), ".evolution-mail-remote.ior", NULL); if (g_file_get_contents(path, &ior, NULL, NULL)) { sess = CORBA_ORB_string_to_object(bonobo_orb(), ior, &ev); g_free(ior); } if (sess != CORBA_OBJECT_NIL) { listener = evolution_mail_listener_new(); GNOME_Evolution_Mail_Session_addListener(sess, bonobo_object_corba_objref((BonoboObject *)listener), 0, &ev); if (ev._major != CORBA_NO_EXCEPTION) { printf("AddListener failed: %s\n", ev._id); CORBA_exception_free(&ev); } } return sess; } static void list_folder(GNOME_Evolution_Mail_Folder folder) { CORBA_Environment ev = { 0 }; GNOME_Evolution_Mail_MessageIterator iter; int more, total = 0; iter = GNOME_Evolution_Mail_Folder_getMessages(folder, "", &ev); if (ev._major != CORBA_NO_EXCEPTION) { printf("getmessages failed: %s\n", ev._id); CORBA_exception_free(&ev); return; } do { GNOME_Evolution_Mail_MessageInfos *msgs; int i; msgs = GNOME_Evolution_Mail_MessageIterator_next(iter, 50, &ev); if (ev._major != CORBA_NO_EXCEPTION) { printf("msgs.next(): %s\n", ev._id); CORBA_exception_free(&ev); break; } /* NB: set the first 50 messages in private to unseen */ if (total == 0) { GNOME_Evolution_Mail_MessageInfoSets *changes; int j; changes = GNOME_Evolution_Mail_MessageInfoSets__alloc(); changes->_length = msgs->_length; changes->_maximum = msgs->_maximum; changes->_buffer = GNOME_Evolution_Mail_MessageInfoSets_allocbuf(changes->_maximum); for (j=0;j_length;j++) { changes->_buffer[j].uid = CORBA_string_dup(msgs->_buffer[j].uid); changes->_buffer[j].flagSet = 0; changes->_buffer[j].flagMask = CAMEL_MESSAGE_SEEN; } GNOME_Evolution_Mail_Folder_changeMessages(folder, changes, &ev); if (ev._major != CORBA_NO_EXCEPTION) { printf("changemessages failed: %s\n", ev._id); CORBA_exception_free(&ev); memset(&ev, 0, sizeof(ev)); } } total += msgs->_length; more = msgs->_length == 50; #if 0 for (i=0;i_length;i++) { printf("uid: %s '%s'\n", msgs->_buffer[i].uid, msgs->_buffer[i].subject); } #endif CORBA_free(msgs); } while (more); CORBA_Object_release(iter, &ev); printf("Got %d messages total\n", total); } static int domain(void *data) { GNOME_Evolution_Mail_Session sess; GNOME_Evolution_Mail_StoreInfos *stores; GNOME_Evolution_Mail_FolderInfos *folders; CORBA_Environment ev = { 0 }; int i, j, f; sess = get_session(); stores = GNOME_Evolution_Mail_Session_getStores(sess, "", &ev); if (ev._major != CORBA_NO_EXCEPTION) { printf("getStores failed: %s\n", ev._id); CORBA_exception_free(&ev); _exit(1); return 0; } printf("Got %d stores\n", stores->_length); for (i=0;i_length;i++) { #if 0 GNOME_Evolution_Mail_PropertyName namesarray[] = { "name", "uid" }; GNOME_Evolution_Mail_PropertyNames names = { 2, 2, namesarray, FALSE, }; GNOME_Evolution_Mail_Properties *props; #endif GNOME_Evolution_Mail_Store store = stores->_buffer[i].store; printf("store %p '%s' uid '%s'\n", store, stores->_buffer[i].name, stores->_buffer[i].uid); #if 0 GNOME_Evolution_Mail_Store_getProperties(store, &names, &props, &ev); if (ev._major != CORBA_NO_EXCEPTION) { printf("getProperties failed\n"); return 1; } for (j=0;j_length;j++) { printf(" %s = (%s)", props->_buffer[j].name, (char *)ORBit_tk_to_name(props->_buffer[j].value._type->kind)); if (props->_buffer[j].value._type == TC_CORBA_string) { printf(" '%s'\n", (char *)props->_buffer[j].value._value); } else { printf(" '%s' ", BONOBO_ARG_GET_STRING(&props->_buffer[j].value)); printf(" \n"); } } CORBA_free(props); #endif #if 1 { char *msg = "To: notzed@novell.com\r\n" "Subject: This is a test from auto-send\r\n" "\r\n" "Blah blah, test message!\r\n"; BonoboObject *mem; mem = bonobo_stream_mem_create(msg, strlen(msg), TRUE, FALSE); printf("attempt send mail to store\n"); GNOME_Evolution_Mail_Store_sendMessage(store, bonobo_object_corba_objref(mem), &ev); if (ev._major != CORBA_NO_EXCEPTION) { printf("sendmessage failed: %s\n", ev._id); CORBA_exception_free(&ev); CORBA_exception_init(&ev); } g_object_unref(mem); } #endif folders = GNOME_Evolution_Mail_Store_getFolders(store, "", &ev); if (ev._major != CORBA_NO_EXCEPTION) { printf("getfolders failed\n"); /* FIXME: leaks ex data? */ CORBA_exception_free(&ev); } else { for (f = 0; f_length;f++) { printf("folder %p full:'%s' name:'%s'\n", folders->_buffer[f].folder, folders->_buffer[f].full_name, folders->_buffer[f].name); } for (f = 0; f_length;f++) { if (!strcmp(folders->_buffer[f].full_name, "Private")) { list_folder(folders->_buffer[f].folder); } } } CORBA_free(folders); } CORBA_free(stores); return 0; } int main(int argc, char **argv) { bonobo_init(&argc, argv); g_idle_add(domain, NULL); bonobo_main(); return 0; }