aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-local.c
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2001-08-21 05:49:09 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2001-08-21 05:49:09 +0800
commita1a0a6bc4c8b444afe9ba4ee3feaec28192252ae (patch)
tree4a81395fc00f583a469cf04bd4983a56fa7d507a /mail/mail-local.c
parentecda947f67aa5a7f2068fa73cea779c81df6806d (diff)
downloadgsoc2013-evolution-a1a0a6bc4c8b444afe9ba4ee3feaec28192252ae.tar
gsoc2013-evolution-a1a0a6bc4c8b444afe9ba4ee3feaec28192252ae.tar.gz
gsoc2013-evolution-a1a0a6bc4c8b444afe9ba4ee3feaec28192252ae.tar.bz2
gsoc2013-evolution-a1a0a6bc4c8b444afe9ba4ee3feaec28192252ae.tar.lz
gsoc2013-evolution-a1a0a6bc4c8b444afe9ba4ee3feaec28192252ae.tar.xz
gsoc2013-evolution-a1a0a6bc4c8b444afe9ba4ee3feaec28192252ae.tar.zst
gsoc2013-evolution-a1a0a6bc4c8b444afe9ba4ee3feaec28192252ae.zip
Modify the url and set the protocol to mbox rather than hacking it and
2001-08-20 Jeffrey Stedfast <fejj@ximian.com> * component-factory.c (create_folder): Modify the url and set the protocol to mbox rather than hacking it and prepending mbox: to the uri. * mail-local.c (get_folder): Don't prepend the folder_name with the store's path because the hash key is folder_name, not /folder_name. svn path=/trunk/; revision=12325
Diffstat (limited to 'mail/mail-local.c')
-rw-r--r--mail/mail-local.c275
1 files changed, 135 insertions, 140 deletions
diff --git a/mail/mail-local.c b/mail/mail-local.c
index 9892aa0ca6..7094d60aab 100644
--- a/mail/mail-local.c
+++ b/mail/mail-local.c
@@ -83,66 +83,66 @@ struct _local_meta {
};
static struct _local_meta *
-load_metainfo(const char *path)
+load_metainfo (const char *path)
{
xmlDocPtr doc;
xmlNodePtr node;
struct _local_meta *meta;
-
- meta = g_malloc0(sizeof(*meta));
- meta->path = g_strdup(path);
-
+
+ meta = g_malloc0 (sizeof (*meta));
+ meta->path = g_strdup (path);
+
d(printf("Loading folder metainfo from : %s\n", meta->path));
-
- doc = xmlParseFile(meta->path);
+
+ doc = xmlParseFile (meta->path);
if (doc == NULL) {
goto dodefault;
}
node = doc->root;
- if (strcmp(node->name, "folderinfo")) {
+ if (strcmp (node->name, "folderinfo")) {
goto dodefault;
}
node = node->childs;
while (node) {
- if (!strcmp(node->name, "folder")) {
+ if (!strcmp (node->name, "folder")) {
char *index, *txt;
-
- txt = xmlGetProp(node, "type");
+
+ txt = xmlGetProp (node, "type");
meta->format = g_strdup (txt ? txt : "mbox");
xmlFree (txt);
-
- txt = xmlGetProp(node, "name");
+
+ txt = xmlGetProp (node, "name");
meta->name = g_strdup (txt ? txt : "mbox");
xmlFree (txt);
-
- index = xmlGetProp(node, "index");
+
+ index = xmlGetProp (node, "index");
if (index) {
- meta->indexed = atoi(index);
- xmlFree(index);
+ meta->indexed = atoi (index);
+ xmlFree (index);
} else
meta->indexed = TRUE;
}
node = node->next;
}
- xmlFreeDoc(doc);
+ xmlFreeDoc (doc);
return meta;
dodefault:
- meta->format = g_strdup("mbox"); /* defaults */
- meta->name = g_strdup("mbox");
+ meta->format = g_strdup ("mbox"); /* defaults */
+ meta->name = g_strdup ("mbox");
meta->indexed = TRUE;
- xmlFreeDoc(doc);
+ xmlFreeDoc (doc);
return meta;
}
static void
-free_metainfo(struct _local_meta *meta)
+free_metainfo (struct _local_meta *meta)
{
- g_free(meta->path);
- g_free(meta->format);
- g_free(meta->name);
- g_free(meta);
+ g_free (meta->path);
+ g_free (meta->format);
+ g_free (meta->name);
+ g_free (meta);
}
static int
@@ -245,7 +245,7 @@ static void
mail_local_store_init (gpointer object, gpointer klass)
{
MailLocalStore *local_store = MAIL_LOCAL_STORE (object);
-
+
local_store->corba_storage = CORBA_OBJECT_NIL;
}
@@ -253,21 +253,21 @@ static void
free_local_folder (MailLocalFolder *lf)
{
if (lf->folder)
- camel_object_unref((CamelObject *)lf->folder);
-
- g_free(lf->path);
- g_free(lf->name);
- g_free(lf->uri);
- camel_object_unref((CamelObject *)lf->local_store);
+ camel_object_unref ((CamelObject *)lf->folder);
+
+ g_free (lf->path);
+ g_free (lf->name);
+ g_free (lf->uri);
+ camel_object_unref ((CamelObject *)lf->local_store);
}
static void
free_folder (gpointer key, gpointer data, gpointer user_data)
{
MailLocalFolder *lf = data;
-
- g_free(key);
- free_local_folder(lf);
+
+ g_free (key);
+ free_local_folder (lf);
}
static void
@@ -316,24 +316,20 @@ get_folder (CamelStore *store,
CamelException *ex)
{
MailLocalStore *local_store = (MailLocalStore *)store;
- CamelFolder *folder;
MailLocalFolder *local_folder;
- char *name;
-
- name = g_strconcat (CAMEL_SERVICE (store)->url->path, folder_name, NULL);
-
- local_folder = g_hash_table_lookup (local_store->folders, name);
-
+ CamelFolder *folder;
+
+ local_folder = g_hash_table_lookup (local_store->folders, folder_name);
+
if (local_folder) {
folder = local_folder->folder;
camel_object_ref (CAMEL_OBJECT (folder));
} else {
folder = NULL;
camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
- _("No such folder %s"), name);
+ _("No such folder /%s"), folder_name);
}
-
- g_free (name);
+
return folder;
}
@@ -457,17 +453,15 @@ struct _register_msg {
};
static char *
-register_folder_desc(struct _mail_msg *mm, int done)
+register_folder_desc (struct _mail_msg *mm, int done)
{
struct _register_msg *m = (struct _register_msg *)mm;
-
- d(printf("returning description for %s\n", m->local_folder->uri));
-
- return g_strdup_printf(_("Opening '%s'"), m->local_folder->uri);
+
+ return g_strdup_printf (_("Registering '%s'"), m->local_folder->uri);
}
static void
-register_folder_register(struct _mail_msg *mm)
+register_folder_register (struct _mail_msg *mm)
{
struct _register_msg *m = (struct _register_msg *)mm;
MailLocalFolder *local_folder = m->local_folder;
@@ -475,31 +469,31 @@ register_folder_register(struct _mail_msg *mm)
struct _local_meta *meta;
CamelStore *store;
guint32 flags;
-
+
name = g_strdup_printf ("%s/local-metadata.xml", path);
meta = load_metainfo (name);
g_free (name);
-
+
name = g_strdup_printf ("%s:%s", meta->format, path);
store = camel_session_get_store (session, name, &mm->ex);
g_free (name);
-
+
if (!store) {
free_metainfo (meta);
return;
}
-
+
flags = CAMEL_STORE_FOLDER_CREATE;
if (meta->indexed)
flags |= CAMEL_STORE_FOLDER_BODY_INDEX;
local_folder->folder = camel_store_get_folder (store, meta->name, flags, &mm->ex);
-
+
camel_object_unref (CAMEL_OBJECT (store));
free_metainfo (meta);
}
static void
-register_folder_registered(struct _mail_msg *mm)
+register_folder_registered (struct _mail_msg *mm)
{
struct _register_msg *m = (struct _register_msg *)mm;
MailLocalFolder *local_folder = m->local_folder;
@@ -510,12 +504,12 @@ register_folder_registered(struct _mail_msg *mm)
g_hash_table_insert (local_folder->local_store->folders,
local_folder->uri + 8,
local_folder);
-
- /* Remove the circular ref once the local store knows aboutthe folder */
+
+ /* Remove the circular ref once the local store knows about the folder */
camel_object_unref ((CamelObject *)local_folder->local_store);
/* add the folder to the vfolder lists FIXME: merge stuff above with this */
- vfolder_register_source(local_folder->folder);
+ vfolder_register_source (local_folder->folder);
mail_folder_cache_set_update_lstorage (local_folder->uri,
local_folder->local_store->corba_storage,
@@ -535,12 +529,12 @@ register_folder_registered(struct _mail_msg *mm)
}
static void
-register_folder_free(struct _mail_msg *mm)
+register_folder_free (struct _mail_msg *mm)
{
struct _register_msg *m = (struct _register_msg *)mm;
if (m->local_folder)
- free_local_folder(m->local_folder);
+ free_local_folder (m->local_folder);
}
static struct _mail_msg_op register_folder_op = {
@@ -560,7 +554,7 @@ local_storage_new_folder_cb (EvolutionStorageListener *storage_listener,
MailLocalFolder *local_folder;
struct _register_msg *m;
int id;
-
+
if (strcmp (folder->type, "mail") != 0 ||
strncmp (folder->physical_uri, "file://", 7) != 0 ||
strncmp (folder->physical_uri + 7, local_store->local_path,
@@ -572,16 +566,16 @@ local_storage_new_folder_cb (EvolutionStorageListener *storage_listener,
local_folder->path = g_strdup (path);
local_folder->uri = g_strdup (folder->physical_uri);
local_folder->local_store = local_store;
- camel_object_ref((CamelObject *)local_store);
+ camel_object_ref ((CamelObject *)local_store);
- m = mail_msg_new(&register_folder_op, NULL, sizeof(*m));
+ m = mail_msg_new (&register_folder_op, NULL, sizeof (*m));
m->local_folder = local_folder;
/* run synchronous, the shell expects it (I think) */
id = m->msg.seq;
- e_thread_put(mail_thread_queued, (EMsg *)m);
- mail_msg_wait(id);
+ e_thread_put (mail_thread_queued, (EMsg *)m);
+ mail_msg_wait (id);
}
static void
@@ -747,17 +741,17 @@ struct _reconfigure_msg {
};
static char *
-reconfigure_folder_describe(struct _mail_msg *mm, int done)
+reconfigure_folder_describe (struct _mail_msg *mm, int done)
{
struct _reconfigure_msg *m = (struct _reconfigure_msg *)mm;
-
+
return g_strdup_printf (_("Changing folder \"%s\" to \"%s\" format"),
m->fb->uri,
m->newtype);
}
static void
-reconfigure_folder_reconfigure(struct _mail_msg *mm)
+reconfigure_folder_reconfigure (struct _mail_msg *mm)
{
struct _reconfigure_msg *m = (struct _reconfigure_msg *)mm;
MailLocalFolder *local_folder = NULL;
@@ -770,19 +764,19 @@ reconfigure_folder_reconfigure(struct _mail_msg *mm)
CamelURL *url = NULL;
struct _local_meta *meta = NULL;
guint32 flags;
-
+
d(printf("reconfiguring folder: %s to type %s\n", m->fb->uri, m->newtype));
-
+
/* NOTE: This var is cleared by the folder_browser via the set_uri method */
m->fb->reconfigure = TRUE;
-
+
/* get the actual location of the mailbox */
- url = camel_url_new(m->fb->uri, &mm->ex);
- if (camel_exception_is_set(&mm->ex)) {
- g_warning("%s is not a workable url!", m->fb->uri);
+ url = camel_url_new (m->fb->uri, &mm->ex);
+ if (camel_exception_is_set (&mm->ex)) {
+ g_warning ("%s is not a workable url!", m->fb->uri);
goto cleanup;
}
-
+
tmpname = strchr (m->fb->uri, '/');
if (tmpname) {
while (*tmpname == '/')
@@ -791,103 +785,104 @@ reconfigure_folder_reconfigure(struct _mail_msg *mm)
} else
local_folder = NULL;
if (!local_folder) {
- g_warning("%s is not a registered local folder!", m->fb->uri);
+ g_warning ("%s is not a registered local folder!", m->fb->uri);
goto cleanup;
}
-
- metapath = g_strdup_printf("%s/local-metadata.xml", url->path);
- meta = load_metainfo(metapath);
- g_free(metapath);
-
+
+ metapath = g_strdup_printf ("%s/local-metadata.xml", url->path);
+ meta = load_metainfo (metapath);
+ g_free (metapath);
+
/* first, 'close' the old folder */
- camel_folder_sync(local_folder->folder, FALSE, &mm->ex);
-
+ camel_folder_sync (local_folder->folder, FALSE, &mm->ex);
+
/* Once for the FolderBrowser, once for the local store */
- camel_object_unref(CAMEL_OBJECT(local_folder->folder));
- camel_object_unref(CAMEL_OBJECT(local_folder->folder));
+ camel_object_unref (CAMEL_OBJECT (local_folder->folder));
+ camel_object_unref (CAMEL_OBJECT (local_folder->folder));
local_folder->folder = m->fb->folder = NULL;
-
+
camel_url_set_protocol (url, meta->format);
- fromurl = camel_url_to_string (url, CAMEL_URL_HIDE_PASSWORD | CAMEL_URL_HIDE_PARAMS);
+ fromurl = camel_url_to_string (url, CAMEL_URL_HIDE_ALL);
camel_url_set_protocol (url, m->newtype);
- tourl = camel_url_to_string (url, CAMEL_URL_HIDE_PASSWORD | CAMEL_URL_HIDE_PARAMS);
-
+ tourl = camel_url_to_string (url, CAMEL_URL_HIDE_ALL);
+
d(printf("opening stores %s and %s\n", fromurl, tourl));
-
- fromstore = camel_session_get_store(session, fromurl, &mm->ex);
-
- if (camel_exception_is_set(&mm->ex))
+
+ fromstore = camel_session_get_store (session, fromurl, &mm->ex);
+
+ if (camel_exception_is_set (&mm->ex))
goto cleanup;
-
- tostore = camel_session_get_store(session, tourl, &mm->ex);
- if (camel_exception_is_set(&mm->ex))
+
+ tostore = camel_session_get_store (session, tourl, &mm->ex);
+ if (camel_exception_is_set (&mm->ex))
goto cleanup;
-
+
/* rename the old mbox and open it again, without indexing */
- tmpname = g_strdup_printf("%s_reconfig", meta->name);
+ tmpname = g_strdup_printf ("%s_reconfig", meta->name);
d(printf("renaming %s to %s, and opening it\n", meta->name, tmpname));
-
- camel_store_rename_folder(fromstore, meta->name, tmpname, &mm->ex);
- if (camel_exception_is_set(&mm->ex)) {
+
+ camel_store_rename_folder (fromstore, meta->name, tmpname, &mm->ex);
+ if (camel_exception_is_set (&mm->ex)) {
goto cleanup;
}
/* we dont need to set the create flag ... or need an index if it has one */
- fromfolder = camel_store_get_folder(fromstore, tmpname, 0, &mm->ex);
- if (fromfolder == NULL || camel_exception_is_set(&mm->ex)) {
+ fromfolder = camel_store_get_folder (fromstore, tmpname, 0, &mm->ex);
+ if (fromfolder == NULL || camel_exception_is_set (&mm->ex)) {
/* try and recover ... */
camel_exception_clear (&mm->ex);
- camel_store_rename_folder(fromstore, tmpname, meta->name, &mm->ex);
+ camel_store_rename_folder (fromstore, tmpname, meta->name, &mm->ex);
goto cleanup;
}
-
+
/* create a new mbox */
d(printf("Creating the destination mbox\n"));
-
+
flags = CAMEL_STORE_FOLDER_CREATE;
if (meta->indexed)
flags |= CAMEL_STORE_FOLDER_BODY_INDEX;
- tofolder = camel_store_get_folder(tostore, meta->name, flags, &mm->ex);
- if (tofolder == NULL || camel_exception_is_set(&mm->ex)) {
+ tofolder = camel_store_get_folder (tostore, meta->name, flags, &mm->ex);
+ if (tofolder == NULL || camel_exception_is_set (&mm->ex)) {
d(printf("cannot open destination folder\n"));
/* try and recover ... */
camel_exception_clear (&mm->ex);
- camel_store_rename_folder(fromstore, tmpname, meta->name, &mm->ex);
+ camel_store_rename_folder (fromstore, tmpname, meta->name, &mm->ex);
goto cleanup;
}
-
+
uids = camel_folder_get_uids (fromfolder);
camel_folder_move_messages_to (fromfolder, uids, tofolder, &mm->ex);
camel_folder_free_uids (fromfolder, uids);
- if (camel_exception_is_set(&mm->ex))
+ if (camel_exception_is_set (&mm->ex))
goto cleanup;
camel_folder_expunge (fromfolder, &mm->ex);
-
+
d(printf("delete old mbox ...\n"));
- camel_store_delete_folder(fromstore, tmpname, &mm->ex);
-
+ camel_store_delete_folder (fromstore, tmpname, &mm->ex);
+
/* switch format */
- g_free(meta->format);
- meta->format = g_strdup(m->newtype);
- if (save_metainfo(meta) == -1) {
+ g_free (meta->format);
+ meta->format = g_strdup (m->newtype);
+ if (save_metainfo (meta) == -1) {
camel_exception_setv (&mm->ex, CAMEL_EXCEPTION_SYSTEM,
_("Cannot save folder metainfo; "
"you'll probably find you can't\n"
"open this folder anymore: %s"),
tourl);
}
-
+
cleanup:
if (local_folder && !local_folder->folder) {
- struct _register_msg *rm = mail_msg_new(&register_folder_op, NULL, sizeof(*m));
-
+ struct _register_msg *rm = mail_msg_new (&register_folder_op, NULL, sizeof (*m));
+
/* fake the internal part of this operation, nasty hackish thing */
rm->local_folder = local_folder;
- register_folder_register((struct _mail_msg *)rm);
+ register_folder_register ((struct _mail_msg *)rm);
rm->local_folder = NULL;
- mail_msg_free((struct _mail_msg *)rm);
+ mail_msg_free ((struct _mail_msg *)rm);
}
+
if (tofolder)
camel_object_unref (CAMEL_OBJECT (tofolder));
if (fromfolder)
@@ -897,36 +892,36 @@ reconfigure_folder_reconfigure(struct _mail_msg *mm)
if (tostore)
camel_object_unref (CAMEL_OBJECT (tostore));
if (meta)
- free_metainfo(meta);
- g_free(fromurl);
- g_free(tourl);
+ free_metainfo (meta);
+ g_free (fromurl);
+ g_free (tourl);
if (url)
camel_url_free (url);
}
static void
-reconfigure_folder_reconfigured(struct _mail_msg *mm)
+reconfigure_folder_reconfigured (struct _mail_msg *mm)
{
struct _reconfigure_msg *m = (struct _reconfigure_msg *)mm;
char *uri;
-
- if (camel_exception_is_set(&mm->ex)) {
+
+ if (camel_exception_is_set (&mm->ex)) {
gnome_error_dialog (_("If you can no longer open this mailbox, then\n"
"you may need to repair it manually."));
}
-
+
/* force a reload of the newly formatted folder */
d(printf("opening new source\n"));
- uri = g_strdup(m->fb->uri);
- folder_browser_set_uri(m->fb, uri);
- g_free(uri);
+ uri = g_strdup (m->fb->uri);
+ folder_browser_set_uri (m->fb, uri);
+ g_free (uri);
}
static void
-reconfigure_folder_free(struct _mail_msg *mm)
+reconfigure_folder_free (struct _mail_msg *mm)
{
struct _reconfigure_msg *m = (struct _reconfigure_msg *)mm;
-
+
gtk_object_unref (GTK_OBJECT (m->fb));
g_free (m->newtype);
}
@@ -992,7 +987,7 @@ mail_local_reconfigure_folder (FolderBrowser *fb)
gdk_window_raise (GTK_WIDGET (gd)->window);
return;
}
-
+
/* check if we can work on this folder */
name = strchr (fb->uri, '/');
if (name) {
@@ -1001,13 +996,13 @@ mail_local_reconfigure_folder (FolderBrowser *fb)
/* we just want to see if it's NULL or not */
name = (char *) g_hash_table_lookup (local_store->folders, name);
}
-
+
if (name == NULL) {
e_notice (NULL, GNOME_MESSAGE_BOX_WARNING,
_("You cannot change the format of a non-local folder."));
return;
}
-
+
m = mail_msg_new (&reconfigure_folder_op, NULL, sizeof (*m));
store = camel_folder_get_parent_store (fb->folder);