summaryrefslogtreecommitdiff
path: root/camel
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@novell.com>2006-05-01 21:18:49 +0000
committerJeffrey Stedfast <fejj@src.gnome.org>2006-05-01 21:18:49 +0000
commit84f17deff352653c6a120bc3ecc9c8782425b9fb (patch)
tree3839ac209d9a2d0ec8d7fb8bac39a880ae8edc20 /camel
parentfb678f7d050331130dda5acf178ce362dbce267f (diff)
downloadevolution-data-server-84f17deff352653c6a120bc3ecc9c8782425b9fb.tar.gz
Fix for bug #315976.
2006-05-01 Jeffrey Stedfast <fejj@novell.com> Fix for bug #315976. * camel-imap-store.c (construct): Only override the namespace if the URL param override_namespace is also set. (get_folder_info_offline): Always include INBOX if we are being asked for the toplevel folder-info tree. (refresh_refresh): Make sure to always query the server for INBOX. (get_folder_info_online): Same.
Diffstat (limited to 'camel')
-rw-r--r--camel/providers/imap/ChangeLog11
-rw-r--r--camel/providers/imap/camel-imap-store.c29
2 files changed, 31 insertions, 9 deletions
diff --git a/camel/providers/imap/ChangeLog b/camel/providers/imap/ChangeLog
index 4ec6407b1..6d1de831d 100644
--- a/camel/providers/imap/ChangeLog
+++ b/camel/providers/imap/ChangeLog
@@ -1,3 +1,14 @@
+2006-05-01 Jeffrey Stedfast <fejj@novell.com>
+
+ Fix for bug #315976.
+
+ * camel-imap-store.c (construct): Only override the namespace if
+ the URL param override_namespace is also set.
+ (get_folder_info_offline): Always include INBOX if we are being
+ asked for the toplevel folder-info tree.
+ (refresh_refresh): Make sure to always query the server for INBOX.
+ (get_folder_info_online): Same.
+
2006-04-21 Jeffrey Stedfast <fejj@novell.com>
* camel-imap-store.c (connect_to_server_wrapper): Don't do
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
index f34375421..d5b72d533 100644
--- a/camel/providers/imap/camel-imap-store.c
+++ b/camel/providers/imap/camel-imap-store.c
@@ -280,7 +280,7 @@ construct (CamelService *service, CamelSession *session,
imap_store->parameters = 0;
if (camel_url_get_param (url, "use_lsub"))
imap_store->parameters |= IMAP_PARAM_SUBSCRIPTIONS;
- if (camel_url_get_param (url, "namespace")) {
+ if (camel_url_get_param (url, "override_namespace") && camel_url_get_param (url, "namespace")) {
imap_store->parameters |= IMAP_PARAM_OVERRIDE_NAMESPACE;
g_free(imap_store->namespace);
imap_store->namespace = g_strdup (camel_url_get_param (url, "namespace"));
@@ -2618,7 +2618,10 @@ refresh_refresh(CamelSession *session, CamelSessionThreadMsg *msg)
if (store->namespace && store->namespace[0]) {
char *pattern;
-
+
+ get_folders_sync(store, "INBOX", &m->ex);
+ if (camel_exception_is_set(&m->ex))
+ goto done;
get_folders_sync(store, store->namespace, &m->ex);
if (camel_exception_is_set(&m->ex))
goto done;
@@ -2697,6 +2700,10 @@ get_folder_info_online (CamelStore *store, const char *top, guint32 flags, Camel
if (top[0] == 0) {
if (imap_store->namespace && imap_store->namespace[0]) {
+ get_folders_sync(imap_store, "INBOX", ex);
+ if (camel_exception_is_set(ex))
+ goto fail;
+
i = strlen(imap_store->namespace)-1;
pattern = g_alloca(i+5);
strcpy(pattern, imap_store->namespace);
@@ -2711,7 +2718,7 @@ get_folder_info_online (CamelStore *store, const char *top, guint32 flags, Camel
}
} else {
char *name;
-
+
name = camel_imap_store_summary_full_from_path(imap_store->summary, top);
if (name == NULL)
name = camel_imap_store_summary_path_to_full(imap_store->summary, top, imap_store->dir_sep);
@@ -2748,6 +2755,7 @@ get_folder_info_offline (CamelStore *store, const char *top,
guint32 flags, CamelException *ex)
{
CamelImapStore *imap_store = CAMEL_IMAP_STORE (store);
+ gboolean include_inbox = FALSE;
CamelFolderInfo *fi;
GPtrArray *folders;
char *pattern, *name;
@@ -2760,12 +2768,14 @@ get_folder_info_offline (CamelStore *store, const char *top,
folders = g_ptr_array_new ();
- if (top == NULL)
+ if (top == NULL || top[0] == '\0') {
+ include_inbox = TRUE;
top = "";
+ }
/* get starting point */
if (top[0] == 0) {
- if (imap_store->namespace) {
+ if (imap_store->namespace && imap_store->namespace[0]) {
name = g_strdup(imap_store->summary->namespace->full_name);
top = imap_store->summary->namespace->path;
} else
@@ -2789,9 +2799,10 @@ get_folder_info_offline (CamelStore *store, const char *top,
if (si == NULL)
continue;
-
+
if ((!strcmp(name, camel_imap_store_info_full_name(imap_store->summary, si))
- || imap_match_pattern(imap_store->dir_sep, pattern, camel_imap_store_info_full_name(imap_store->summary, si)))
+ || imap_match_pattern(imap_store->dir_sep, pattern, camel_imap_store_info_full_name(imap_store->summary, si))
+ || (include_inbox && !g_ascii_strcasecmp (camel_imap_store_info_full_name(imap_store->summary, si), "INBOX")))
&& ((imap_store->parameters & IMAP_PARAM_SUBSCRIPTIONS) == 0
|| (flags & CAMEL_STORE_FOLDER_INFO_SUBSCRIBED) == 0
|| (si->flags & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED))) {
@@ -2804,11 +2815,11 @@ get_folder_info_offline (CamelStore *store, const char *top,
it. See create folder */
if (fi->flags & CAMEL_FOLDER_NOINFERIORS)
fi->flags = (fi->flags & ~CAMEL_FOLDER_NOINFERIORS) | CAMEL_FOLDER_NOCHILDREN;
-
+
/* blah, this gets lost somewhere, i can't be bothered finding out why */
if (!g_ascii_strcasecmp(fi->full_name, "inbox"))
fi->flags = (fi->flags & ~CAMEL_FOLDER_TYPE_MASK) | CAMEL_FOLDER_TYPE_INBOX;
-
+
if (si->flags & CAMEL_FOLDER_NOSELECT) {
CamelURL *url = camel_url_new(fi->uri, NULL);