Files
evolution/mail/folder-info.c
0 f53a0de05a Comment out the Folder: and you've got mail prints.
2001-10-30    <NotZed@Ximian.com>

        * folder-info.c: Comment out the Folder: and you've got mail
        prints.

        * mail-config-druid.c (wizard_next_cb): If we have a next
        function, honour if it tells us its going to set the page, and
        dont set it, otherwise, set it to the next page, unless we're at
        the end of our pages, and let the wizard do it itself.
        (wizard_back_cb): Same for going back.  Rest of fix for #12127,
        see e-shell-startup-wizard for the rest.
        (next_func): If we're not on the last page, tell the druid we're
        gonna handle the next button, so we can sync properly with it,
        needed for above changes.
        (back_func): Similarly for going back past page 0.
        (wizard_listener_event): We want to set the page to the actual one
        asked for not, pagenum-1.

svn path=/trunk/; revision=14449
2001-10-30 11:10:48 +00:00

247 lines
5.5 KiB
C

/*
* folder-info.c: Implementation of GNOME_Evolution_FolderInfo
*
* Copyright (C) 2001 Ximian, Inc.
*
* Authors: Iain Holmes <iain@ximian.com>
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "Mail.h"
#include <glib.h>
#include <libgnome/gnome-defs.h>
#include <bonobo/bonobo-xobject.h>
#include <bonobo/bonobo-generic-factory.h>
#include <bonobo/bonobo-context.h>
#include <bonobo/bonobo-exception.h>
#include "mail.h"
#include "mail-mt.h"
#include "mail-tools.h"
#include <camel/camel-folder.h>
#include <camel/camel-exception.h>
#define FOLDER_INFO_IID "OAFIID:GNOME_Evolution_FolderInfo_Factory"
#define PARENT_TYPE BONOBO_X_OBJECT_TYPE
static BonoboObjectClass *parent_class = NULL;
typedef struct _EvolutionFolderInfo EvolutionFolderInfo;
typedef struct _EvolutionFolderInfoClass EvolutionFolderInfoClass;
struct _EvolutionFolderInfo {
BonoboXObject parent;
};
struct _EvolutionFolderInfoClass {
BonoboXObjectClass parent_class;
POA_GNOME_Evolution_FolderInfo__epv epv;
};
/* MT stuff */
struct _folder_info_msg {
struct _mail_msg msg;
Bonobo_Listener listener;
char *foldername;
int read;
int unread;
};
static GtkType evolution_folder_info_get_type (void);
static char *
do_describe_info (struct _mail_msg *mm, gint complete)
{
return g_strdup (_("Getting Folder Information"));
}
static void
do_get_info (struct _mail_msg *mm)
{
struct _folder_info_msg *m = (struct _folder_info_msg *) mm;
CamelFolder *folder;
CamelException *ex;
#if 0
char *uri_dup;
char *foldername, *start, *end;
char *storage, *protocol, *uri;
/* Fixme: Do other stuff. Different stuff to the stuff below */
uri_dup = g_strdup (m->foldername);
start = uri_dup + 11;
g_warning ("Start: %s", start);
end = strrchr (start, '/');
if (end == NULL) {
g_warning ("Bugger");
return;
}
storage = g_strndup (start, end - start);
start = end + 1;
foldername = g_strdup (start);
g_free (uri_dup);
/* Work out the protocol.
The storage is going to start as local, or vfolder, or an imap
server. */
g_warning ("Storage: %s", storage);
if (strncmp (storage, "local", 5) == 0) {
char *evolution_dir;
char *proto;
evolution_dir = gnome_util_prepend_user_home ("evolution/local");
proto = g_strconcat ("file://", evolution_dir, NULL);
uri = e_path_to_physical (proto, foldername);
g_free (evolution_dir);
g_free (proto);
} else if (strncmp (storage, "vfolder", 7) == 0) {
uri = g_strconcat ("vfolder://", foldername, NULL);
} else {
uri = g_strconcat ("imap://", storage, foldername, NULL);
}
#endif
ex = camel_exception_new ();
folder = mail_tool_uri_to_folder (m->foldername, 0, ex);
if (camel_exception_is_set (ex)) {
g_warning ("Camel exception: %s", camel_exception_get_description (ex));
}
camel_exception_free (ex);
m->read = camel_folder_get_message_count (folder);
m->unread = camel_folder_get_unread_message_count (folder);
}
static void
do_got_info (struct _mail_msg *mm)
{
struct _folder_info_msg *m = (struct _folder_info_msg *) mm;
CORBA_Environment ev;
CORBA_any a;
GNOME_Evolution_FolderInfo_MessageCount count;
/*g_print ("You've got mail: %d, %d\n", m->read, m->unread);*/
count.path = m->foldername;
count.count = m->read;
count.unread = m->unread;
a._type = (CORBA_TypeCode) TC_GNOME_Evolution_FolderInfo_MessageCount;
a._value = &count;
CORBA_exception_init (&ev);
Bonobo_Listener_event (m->listener, "youve-got-mail", &a, &ev);
if (BONOBO_EX (&ev)) {
g_warning ("Got exception on listener: %s", CORBA_exception_id (&ev));
}
CORBA_exception_free (&ev);
}
static void
do_free_info (struct _mail_msg *mm)
{
struct _folder_info_msg *m = (struct _folder_info_msg *) mm;
g_free (m->foldername);
}
struct _mail_msg_op get_info_op = {
do_describe_info,
do_get_info,
do_got_info,
do_free_info,
};
typedef struct {
int read;
int unread;
} MailFolderInfo;
/* Returns a MailFolderInfo struct or NULL on error */
static void
mail_get_info (const char *foldername,
Bonobo_Listener listener)
{
CORBA_Environment ev;
struct _folder_info_msg *m;
m = mail_msg_new (&get_info_op, NULL, sizeof (*m));
/*g_print ("Folder: %s", foldername);*/
m->foldername = g_strdup (foldername);
CORBA_exception_init (&ev);
m->listener = bonobo_object_dup_ref (listener, &ev);
CORBA_exception_free (&ev);
e_thread_put (mail_thread_new, (EMsg *) m);
}
static void
impl_GNOME_Evolution_FolderInfo_getInfo (PortableServer_Servant servant,
const CORBA_char *foldername,
const Bonobo_Listener listener,
CORBA_Environment *ev)
{
mail_get_info (foldername, listener);
}
static void
evolution_folder_info_class_init (EvolutionFolderInfoClass *klass)
{
POA_GNOME_Evolution_FolderInfo__epv *epv = &klass->epv;
parent_class = gtk_type_class (PARENT_TYPE);
epv->getInfo = impl_GNOME_Evolution_FolderInfo_getInfo;
}
static void
evolution_folder_info_init (EvolutionFolderInfo *info)
{
}
BONOBO_X_TYPE_FUNC_FULL (EvolutionFolderInfo,
GNOME_Evolution_FolderInfo,
PARENT_TYPE,
evolution_folder_info);
static BonoboObject *
evolution_folder_info_factory_fn (BonoboGenericFactory *factory,
void *closure)
{
EvolutionFolderInfo *info;
info = gtk_type_new (evolution_folder_info_get_type ());
return BONOBO_OBJECT (info);
}
gboolean
evolution_folder_info_factory_init (void)
{
BonoboGenericFactory *factory;
factory = bonobo_generic_factory_new (FOLDER_INFO_IID,
evolution_folder_info_factory_fn,
NULL);
if (factory == NULL) {
g_warning ("Error starting FolderInfo");
return FALSE;
}
bonobo_running_context_auto_exit_unref (BONOBO_OBJECT (factory));
return TRUE;
}