
2001-10-02 Jeffrey Stedfast <fejj@ximian.com> * mail-vfolder.c (vfolder_setup_do): Pass an empty flags argument to mail_tool_uri_to_folder. (vfolder_adduri_do): Same. * mail-session.c (get_folder): Pass an empty flags argument to mail_tool_uri_to_folder. * mail-send-recv.c (receive_get_folder): Pass an empty flags argument to mail_tool_uri_to_folder. * mail-ops.c (get_folder_get): Pass the flags to mail_tool_uri_to_folder. (mail_get_folder): Now takes a flags argument. (remove_folder_get): Pass an empty flags argument to mail_tool_uri_to_folder. (mail_send_message): Pass an empty argument flag to mail_tool_uri_to_folder. (transfer_messages_transfer): Same. Destination folder should already be created by this time. * folder-info.c (do_get_info): Pass an empty flags argument to mail_tool_uri_to_folder. * importers/evolution-mbox-importer.c (folder_created_cb): Pass the CREATE flag here too. (load_file_fn): And here. (load_file_fn): And here too. * importers/evolution-outlook-importer.c (load_file_fn): Pass the CREATE flag to mail_tool_uri_to_folder. * folder-browser.c (folder_browser_new): Pass an empty flags argument. (x_evolution_message_parse): Pass an empty flags argument to mail_tool_uri_to_folder. * component-factory.c (create_folder): Pass a CREATE flag to mail_get_folder here too. (owner_set_cb): And here. (xfer_folder): Shouldn't need the CREATE flag here, so not passing any flags. (destination_folder_handle_drop): Same. * mail-local.c (mail_local_store_add_folder): Pass a CREATE flag to mail_get_folder. (reconfigure_folder_reconfigure): Pass an empty flags argument to mail_tool_uri_to_folder. * mail-tools.c (mail_tool_uri_to_folder): Take a flags argument. (mail_tool_get_local_inbox): Pass an empty flags argument to mail_tool_uri_to_folder. svn path=/trunk/; revision=13353
247 lines
5.5 KiB
C
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;
|
|
}
|