summaryrefslogtreecommitdiff
path: root/camel/providers
diff options
context:
space:
mode:
authorNot Zed <NotZed@Ximian.com>2004-03-26 05:23:46 +0000
committerMichael Zucci <zucchi@src.gnome.org>2004-03-26 05:23:46 +0000
commite597019bc7b17554a30a15ab0b3ae76a9622a445 (patch)
treec964d03234dd2a3b20078ef7589d6937b6cb4271 /camel/providers
parent38a67c4410bf2eaedc74c5f4403ea175a3ad8922 (diff)
downloadevolution-data-server-e597019bc7b17554a30a15ab0b3ae76a9622a445.tar.gz
Added new maildir flags D for draft and commented P for forwarded.
2004-03-26 Not Zed <NotZed@Ximian.com> * providers/local/camel-maildir-summary.c (flagbits[]): Added new maildir flags D for draft and commented P for forwarded. * providers/imap/camel-imap-store.c (get_folder_counts): Instead of looking up the folder in the object bag which will handle reservations and perhaps deadlock, just get the list of opened folders and use them if they're available. Should fix #56045.
Diffstat (limited to 'camel/providers')
-rw-r--r--camel/providers/imap/camel-imap-store.c22
-rw-r--r--camel/providers/local/camel-maildir-summary.c2
2 files changed, 20 insertions, 4 deletions
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
index 32bb41179..2d8206b79 100644
--- a/camel/providers/imap/camel-imap-store.c
+++ b/camel/providers/imap/camel-imap-store.c
@@ -2392,7 +2392,19 @@ static void
get_folder_counts(CamelImapStore *imap_store, CamelFolderInfo *fi, CamelException *ex)
{
GSList *q;
+ GPtrArray *folders;
+ GHashTable *folders_table;
CamelFolder *folder;
+ int i;
+
+ /* We list rather than use get here, and manage our own lookups outside of the bag,
+ since get will wait if someone has reserved the name - can cause deadlock */
+ folders = camel_object_bag_list(CAMEL_STORE(imap_store)->folders);
+ folders_table = g_hash_table_new(g_str_hash, g_str_equal);
+ for (i=0; i<folders->len;i++) {
+ folder = folders->pdata[i];
+ g_hash_table_insert(folders_table, folder->full_name, folder);
+ }
/* non-recursive breath first search */
@@ -2424,15 +2436,12 @@ get_folder_counts(CamelImapStore *imap_store, CamelFolderInfo *fi, CamelExceptio
fi->unread = get_folder_status (imap_store, fi->full_name, "UNSEEN");
fi->total = get_folder_status(imap_store, fi->full_name, "MESSAGES");
/* if we have this folder open, and the unread count has changed, update */
- folder = camel_object_bag_get(CAMEL_STORE(imap_store)->folders, fi->full_name);
+ folder = g_hash_table_lookup(folders_table, fi->full_name);
if (folder && fi->unread != camel_folder_get_unread_message_count(folder)) {
CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(folder))->refresh_info(folder, ex);
fi->unread = camel_folder_get_unread_message_count(folder);
fi->total = camel_folder_get_message_count(folder);
}
- if (folder)
- camel_object_unref(folder);
-
}
CAMEL_SERVICE_UNLOCK (imap_store, connect_lock);
@@ -2446,6 +2455,11 @@ get_folder_counts(CamelImapStore *imap_store, CamelFolderInfo *fi, CamelExceptio
fi = fi->next;
}
}
+
+ g_hash_table_destroy(folders_table);
+ for (i=0; i<folders->len;i++)
+ camel_object_unref(folders->pdata[i]);
+ g_ptr_array_free(folders, TRUE);
}
/* imap needs to treat inbox case insensitive */
diff --git a/camel/providers/local/camel-maildir-summary.c b/camel/providers/local/camel-maildir-summary.c
index 37e1ac2ce..edc81a523 100644
--- a/camel/providers/local/camel-maildir-summary.c
+++ b/camel/providers/local/camel-maildir-summary.c
@@ -168,7 +168,9 @@ static struct {
char flag;
guint32 flagbit;
} flagbits[] = {
+ { 'D', CAMEL_MESSAGE_DRAFT },
{ 'F', CAMEL_MESSAGE_FLAGGED },
+ /*{ 'P', CAMEL_MESSAGE_FORWARDED },*/
{ 'R', CAMEL_MESSAGE_ANSWERED },
{ 'S', CAMEL_MESSAGE_SEEN },
{ 'T', CAMEL_MESSAGE_DELETED },