summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author0 <NotZed@Ximian.com>2001-09-20 22:58:23 +0000
committerMichael Zucci <zucchi@src.gnome.org>2001-09-20 22:58:23 +0000
commitda3221e63cf01de4b2ac53899639351d0fc4330b (patch)
tree2b5dcaa35227f00ade537799515222b6c948c37d
parenta0a432512c358181fd204a76c3dd6026e8d74623 (diff)
downloadevolution-data-server-da3221e63cf01de4b2ac53899639351d0fc4330b.tar.gz
Build the path on the folderinfo.
2001-09-20 <NotZed@Ximian.com> * providers/local/camel-maildir-store.c (camel_folder_info_new): Build the path on the folderinfo. * providers/local/camel-spool-store.c (get_folder_info): If we have this folder open, then set unread from the folder itself. (get_folder_info): Change the INBOX path to not include the leading /. * providers/local/camel-spool-folder.c (camel_spool_folder_construct): Fix path. (camel_spool_folder_construct): Properly setup the url field when we say we've got a new folder created. * providers/imap/camel-imap-store.c (unsubscribe_folder): Build path on folderinfo. * camel-store.c (camel_folder_info_build_path): Prepend / to path. * camel-vee-folder.c (camel_vee_folder_construct): Use macro for unmatched folder name. (camel_vee_folder_new): " * camel-vee-store.c (vee_get_folder_info): Use macro for unmatched folder name. (vee_delete_folder): " (vee_rename_folder): " (vee_get_folder): Prepend / onto path. (vee_delete_folder): Setup path in folderinfo. (vee_get_folder_info): Fix path in folderinfo. * camel-vee-folder.h (CAMEL_UNMATCHED_NAME): New define for unmatched (internal) name.
-rw-r--r--camel/ChangeLog35
-rw-r--r--camel/camel-store.c2
-rw-r--r--camel/camel-vee-folder.c6
-rw-r--r--camel/camel-vee-folder.h2
-rw-r--r--camel/camel-vee-store.c17
-rw-r--r--camel/providers/imap/camel-imap-store.c4
-rw-r--r--camel/providers/local/camel-local-folder.c9
-rw-r--r--camel/providers/local/camel-local-store.c3
-rw-r--r--camel/providers/local/camel-maildir-store.c1
-rw-r--r--camel/providers/local/camel-spool-folder.c4
-rw-r--r--camel/providers/local/camel-spool-store.c17
11 files changed, 73 insertions, 27 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index f826c94d4..482549acd 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,3 +1,38 @@
+2001-09-20 <NotZed@Ximian.com>
+
+ * providers/local/camel-maildir-store.c (camel_folder_info_new):
+ Build the path on the folderinfo.
+
+ * providers/local/camel-spool-store.c (get_folder_info): If we
+ have this folder open, then set unread from the folder itself.
+ (get_folder_info): Change the INBOX path to not include the
+ leading /.
+
+ * providers/local/camel-spool-folder.c
+ (camel_spool_folder_construct): Fix path.
+ (camel_spool_folder_construct): Properly setup the url field when
+ we say we've got a new folder created.
+
+ * providers/imap/camel-imap-store.c (unsubscribe_folder): Build
+ path on folderinfo.
+
+ * camel-store.c (camel_folder_info_build_path): Prepend / to path.
+
+ * camel-vee-folder.c (camel_vee_folder_construct): Use macro for
+ unmatched folder name.
+ (camel_vee_folder_new): "
+
+ * camel-vee-store.c (vee_get_folder_info): Use macro for unmatched
+ folder name.
+ (vee_delete_folder): "
+ (vee_rename_folder): "
+ (vee_get_folder): Prepend / onto path.
+ (vee_delete_folder): Setup path in folderinfo.
+ (vee_get_folder_info): Fix path in folderinfo.
+
+ * camel-vee-folder.h (CAMEL_UNMATCHED_NAME): New define for
+ unmatched (internal) name.
+
2001-09-20 Jeffrey Stedfast <fejj@ximian.com>
* providers/local/camel-spool-folder.c
diff --git a/camel/camel-store.c b/camel/camel-store.c
index adef02a0b..939b99bb4 100644
--- a/camel/camel-store.c
+++ b/camel/camel-store.c
@@ -684,7 +684,7 @@ camel_folder_info_free (CamelFolderInfo *fi)
void
camel_folder_info_build_path (CamelFolderInfo *fi, char separator)
{
- fi->path = g_strdup (fi->full_name);
+ fi->path = g_strdup_printf("/%s", fi->full_name);
if (separator != '/') {
char *p;
diff --git a/camel/camel-vee-folder.c b/camel/camel-vee-folder.c
index 31c50a52a..59bbcfcbf 100644
--- a/camel/camel-vee-folder.c
+++ b/camel/camel-vee-folder.c
@@ -217,7 +217,7 @@ camel_vee_folder_construct(CamelVeeFolder *vf, CamelStore *parent_store, const c
folder_unmatched = (CamelVeeFolder *)camel_object_new (camel_vee_folder_get_type ());
d(printf("created foldeer unmatched %p\n", folder_unmatched));
- vee_folder_construct (folder_unmatched, parent_store, "UNMATCHED", CAMEL_STORE_FOLDER_PRIVATE);
+ vee_folder_construct (folder_unmatched, parent_store, CAMEL_UNMATCHED_NAME, CAMEL_STORE_FOLDER_PRIVATE);
}
UNMATCHED_UNLOCK();
@@ -247,12 +247,12 @@ camel_vee_folder_new(CamelStore *parent_store, const char *name, guint32 flags)
unmatched_uids = g_hash_table_new(g_str_hash, g_str_equal);
folder_unmatched = vf = (CamelVeeFolder *)camel_object_new(camel_vee_folder_get_type());
d(printf("created foldeer unmatched %p\n", folder_unmatched));
- vee_folder_construct (vf, parent_store, "UNMATCHED", CAMEL_STORE_FOLDER_PRIVATE);
+ vee_folder_construct (vf, parent_store, CAMEL_UNMATCHED_NAME, CAMEL_STORE_FOLDER_PRIVATE);
}
UNMATCHED_UNLOCK();
- if (strcmp(name, "UNMATCHED") == 0) {
+ if (strcmp(name, CAMEL_UNMATCHED_NAME) == 0) {
camel_object_ref((CamelObject *)folder_unmatched);
d(printf("returning unmatched %p, count = %d\n", folder_unmatched, camel_folder_get_message_count((CamelFolder *)folder_unmatched)));
return (CamelFolder *)folder_unmatched;
diff --git a/camel/camel-vee-folder.h b/camel/camel-vee-folder.h
index 83705751c..a2295ba7d 100644
--- a/camel/camel-vee-folder.h
+++ b/camel/camel-vee-folder.h
@@ -56,6 +56,8 @@ struct _CamelVeeFolderClass {
CamelFolderClass parent_class;
};
+#define CAMEL_UNMATCHED_NAME "UNMATCHED"
+
guint camel_vee_folder_get_type (void);
CamelFolder *camel_vee_folder_new (CamelStore *parent_store, const char *name, guint32 flags);
void camel_vee_folder_construct (CamelVeeFolder *vf, CamelStore *parent_store, const char *name, guint32 flags);
diff --git a/camel/camel-vee-store.c b/camel/camel-vee-store.c
index 48465fc87..dc3febc85 100644
--- a/camel/camel-vee-store.c
+++ b/camel/camel-vee-store.c
@@ -135,7 +135,7 @@ vee_get_folder (CamelStore *store, const char *folder_name, guint32 flags, Camel
fi->url = g_strdup_printf("vfolder:%s#%s", ((CamelService *)store)->url->path,
((CamelFolder *)vf)->full_name);
fi->unread_message_count = camel_folder_get_message_count((CamelFolder *)vf);
- fi->path = g_strdup (fi->full_name);
+ camel_folder_info_build_path(fi, '/');
camel_object_trigger_event(CAMEL_OBJECT(store), "folder_created", fi);
camel_folder_info_free(fi);
}
@@ -207,13 +207,13 @@ vee_get_folder_info(CamelStore *store, const char *top, guint32 flags, CamelExce
CAMEL_STORE_UNLOCK(store, cache_lock);
/* and always add UNMATCHED, if scanning from top/etc */
- if (top == NULL || top[0] == 0 || strncmp(top, "UNMATCHED", strlen("UNMATCHED")) == 0) {
+ if (top == NULL || top[0] == 0 || strncmp(top, CAMEL_UNMATCHED_NAME, strlen(CAMEL_UNMATCHED_NAME)) == 0) {
info = g_malloc0(sizeof(*info));
- info->url = g_strdup_printf("vfolder:%s#UNMATCHED", ((CamelService *)store)->url->path);
- info->full_name = g_strdup("UNMATCHED");
- info->name = g_strdup("UNMATCHED");
+ info->url = g_strdup_printf("vfolder:%s#%s", ((CamelService *)store)->url->path, CAMEL_UNMATCHED_NAME);
+ info->full_name = g_strdup(CAMEL_UNMATCHED_NAME);
+ info->name = g_strdup(CAMEL_UNMATCHED_NAME);
info->unread_message_count = -1;
- info->path = g_strdup (info->full_name);
+ camel_folder_info_build_path(info, '/');
g_ptr_array_add(data.infos, info);
}
@@ -230,7 +230,7 @@ vee_delete_folder(CamelStore *store, const char *folder_name, CamelException *ex
CamelFolder *folder;
char *key;
- if (strcmp(folder_name, "UNMATCHED") == 0) {
+ if (strcmp(folder_name, CAMEL_UNMATCHED_NAME) == 0) {
camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
_("Cannot delete folder: %s: Invalid operation"), folder_name);
return;
@@ -258,6 +258,7 @@ vee_delete_folder(CamelStore *store, const char *folder_name, CamelException *ex
fi->name = g_strdup(fi->name);
fi->url = g_strdup_printf("vfolder:%s#%s", ((CamelService *)store)->url->path, key);
fi->unread_message_count = -1;
+ camel_folder_info_build_path(fi, '/');
camel_object_trigger_event(CAMEL_OBJECT(store), "folder_deleted", fi);
camel_folder_info_free(fi);
@@ -277,7 +278,7 @@ vee_rename_folder(CamelStore *store, const char *old, const char *new, CamelExce
CamelFolder *folder;
char *key, *oldname, *full_oldname;
- if (strcmp(old, "UNMATCHED") == 0) {
+ if (strcmp(old, CAMEL_UNMATCHED_NAME) == 0) {
camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
_("Cannot rename folder: %s: Invalid operation"), old);
return;
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
index 08c871cee..a632c6f0d 100644
--- a/camel/providers/imap/camel-imap-store.c
+++ b/camel/providers/imap/camel-imap-store.c
@@ -1542,14 +1542,11 @@ subscribe_folder (CamelStore *store, const char *folder_name,
if (name)
name++;
- /* FIXME: we should probably relocate all code that generates
- fi->path to a single location and have all code use that */
fi = g_new0 (CamelFolderInfo, 1);
fi->full_name = g_strdup (folder_name);
fi->name = g_strdup (name);
fi->url = g_strdup_printf ("%s/%s", imap_store->base_url, folder_name);
fi->unread_message_count = -1;
-
camel_folder_info_build_path (fi, imap_store->dir_sep);
camel_object_trigger_event (CAMEL_OBJECT (store), "folder_created", fi);
@@ -1591,6 +1588,7 @@ unsubscribe_folder (CamelStore *store, const char *folder_name,
fi->name = g_strdup (name);
fi->url = g_strdup_printf ("%s/%s", imap_store->base_url, folder_name);
fi->unread_message_count = -1;
+ camel_folder_info_build_path (fi, imap_store->dir_sep);
camel_object_trigger_event (CAMEL_OBJECT (store), "folder_deleted", fi);
camel_folder_info_free (fi);
diff --git a/camel/providers/local/camel-local-folder.c b/camel/providers/local/camel-local-folder.c
index bce610bc7..2887fcce7 100644
--- a/camel/providers/local/camel-local-folder.c
+++ b/camel/providers/local/camel-local-folder.c
@@ -226,12 +226,9 @@ camel_local_folder_construct(CamelLocalFolder *lf, CamelStore *parent_store, con
fi->name = g_strdup (name);
fi->url = g_strdup (lf->folder_path);
fi->unread_message_count = -1;
- fi->path = g_strdup (full_name);
-
- camel_object_trigger_event (CAMEL_OBJECT (parent_store),
- "folder_created", fi);
-
- camel_folder_info_free (fi);
+ camel_folder_info_build_path(fi, '/');
+ camel_object_trigger_event(CAMEL_OBJECT (parent_store), "folder_created", fi);
+ camel_folder_info_free(fi);
return lf;
}
diff --git a/camel/providers/local/camel-local-store.c b/camel/providers/local/camel-local-store.c
index 20f90ce31..92e5159f1 100644
--- a/camel/providers/local/camel-local-store.c
+++ b/camel/providers/local/camel-local-store.c
@@ -303,7 +303,8 @@ delete_folder(CamelStore *store, const char *folder_name, CamelException *ex)
fi->name = g_strdup (g_basename (folder_name));
fi->url = g_strdup_printf ("%s%s", CAMEL_SERVICE(store)->url->path, folder_name);
fi->unread_message_count = -1;
-
+ camel_folder_info_build_path(fi, '/');
+
camel_object_trigger_event (CAMEL_OBJECT (store),
"folder_deleted", fi);
diff --git a/camel/providers/local/camel-maildir-store.c b/camel/providers/local/camel-maildir-store.c
index 09188ad86..974a66a03 100644
--- a/camel/providers/local/camel-maildir-store.c
+++ b/camel/providers/local/camel-maildir-store.c
@@ -224,6 +224,7 @@ static CamelFolderInfo *camel_folder_info_new(const char *url, const char *full,
fi->full_name = g_strdup(full);
fi->name = g_strdup(name);
fi->unread_message_count = unread;
+ camel_folder_info_build_path(fi, '/');
return fi;
}
diff --git a/camel/providers/local/camel-spool-folder.c b/camel/providers/local/camel-spool-folder.c
index 43b8abec6..8e8b3758a 100644
--- a/camel/providers/local/camel-spool-folder.c
+++ b/camel/providers/local/camel-spool-folder.c
@@ -206,9 +206,9 @@ camel_spool_folder_construct(CamelSpoolFolder *lf, CamelStore *parent_store, con
fi = g_malloc0(sizeof(*fi));
fi->full_name = g_strdup(full_name);
fi->name = g_strdup(name);
- fi->url = g_strdup(lf->folder_path);
+ fi->url = g_strdup_printf("spool:%s#%s", ((CamelService *)parent_store)->url->path, fi->name);
fi->unread_message_count = camel_folder_get_unread_message_count(folder);
- fi->path = g_strdup (full_name);
+ camel_folder_info_build_path(fi, '/');
camel_object_trigger_event(CAMEL_OBJECT(parent_store), "folder_created", fi);
camel_folder_info_free (fi);
diff --git a/camel/providers/local/camel-spool-store.c b/camel/providers/local/camel-spool-store.c
index 998c97597..c10c0f252 100644
--- a/camel/providers/local/camel-spool-store.c
+++ b/camel/providers/local/camel-spool-store.c
@@ -34,6 +34,7 @@
#include "camel-spool-folder.h"
#include "camel-exception.h"
#include "camel-url.h"
+#include "camel-private.h"
#define d(x)
@@ -186,14 +187,24 @@ get_folder_info (CamelStore *store, const char *top,
{
CamelFolderInfo *fi = NULL;
CamelService *service = (CamelService *)store;
+ CamelFolder *folder;
- if (top == NULL || strcmp(top, "/INBOX") == 0) {
+ if (top == NULL || strcmp(top, "INBOX") == 0) {
/* FIXME: if the folder is opened we could look it up? */
fi = g_malloc0(sizeof(*fi));
- fi->full_name = "/INBOX";
+ fi->full_name = "INBOX";
fi->name = "INBOX";
fi->url = g_strdup_printf("spool:%s#%s", service->url->path, fi->name);
- fi->unread_message_count = -1;
+
+ CAMEL_STORE_LOCK(store, cache_lock);
+ folder = g_hash_table_lookup(store->folders, fi->full_name);
+ if (folder)
+ fi->unread_message_count = camel_folder_get_message_count(folder);
+ else
+ fi->unread_message_count = -1;
+ CAMEL_STORE_UNLOCK(store, cache_lock);
+
+ camel_folder_info_build_path(fi, '/');
}
return fi;