[evolution/gnome-2-30] Bug #534369 - [new-mail-notify] Intermittent notifications



commit b501bfacc54d745aefa83fd028ff08ff4feabc8d
Author: Milan Crha <mcrha redhat com>
Date:   Mon Jun 14 20:17:28 2010 +0200

    Bug #534369 - [new-mail-notify] Intermittent notifications

 mail/e-mail-backend.c    |    2 +-
 mail/mail-folder-cache.c |   16 ++++++++++++----
 2 files changed, 13 insertions(+), 5 deletions(-)
---
diff --git a/mail/e-mail-backend.c b/mail/e-mail-backend.c
index 4ab4440..8b27dd2 100644
--- a/mail/e-mail-backend.c
+++ b/mail/e-mail-backend.c
@@ -341,7 +341,7 @@ mail_backend_folder_changed_cb (MailFolderCache *folder_cache,
 	gint folder_type;
 	gint flags = 0;
 
-	if (!mail_folder_cache_get_folder_from_uri (folder_cache, folder_uri, &folder))
+	if (mail_folder_cache_get_folder_from_uri (folder_cache, folder_uri, &folder))
 		if (folder && !mail_folder_cache_get_folder_info_flags (folder_cache, folder, &flags))
 			g_return_if_reached ();
 
diff --git a/mail/mail-folder-cache.c b/mail/mail-folder-cache.c
index 10a66a4..d0d552d 100644
--- a/mail/mail-folder-cache.c
+++ b/mail/mail-folder-cache.c
@@ -402,7 +402,8 @@ create_folders(MailFolderCache *self, CamelFolderInfo *fi, struct _store_info *s
 static void
 folder_changed (CamelObject *o, gpointer event_data, gpointer user_data)
 {
-	static time_t last_newmail = 0;
+	static GHashTable *last_newmail_per_folder = NULL;
+	time_t latest_received;
 	CamelFolderChangeInfo *changes = event_data;
 	CamelFolder *folder = (CamelFolder *)o;
 	CamelFolder *local_drafts;
@@ -420,6 +421,12 @@ folder_changed (CamelObject *o, gpointer event_data, gpointer user_data)
 
 	d(printf("folder '%s' changed\n", folder->full_name));
 
+	if (!last_newmail_per_folder)
+		last_newmail_per_folder = g_hash_table_new (g_direct_hash, g_direct_equal);
+
+	/* it's fine to hash them by folder pointer here */
+	latest_received = GPOINTER_TO_INT (g_hash_table_lookup (last_newmail_per_folder, folder));
+
 	local_drafts = e_mail_local_get_folder (E_MAIL_FOLDER_DRAFTS);
 	local_outbox = e_mail_local_get_folder (E_MAIL_FOLDER_OUTBOX);
 	local_sent = e_mail_local_get_folder (E_MAIL_FOLDER_SENT);
@@ -438,7 +445,8 @@ folder_changed (CamelObject *o, gpointer event_data, gpointer user_data)
 				if (((flags & CAMEL_MESSAGE_SEEN) == 0) &&
 				    ((flags & CAMEL_MESSAGE_JUNK) == 0) &&
 				    ((flags & CAMEL_MESSAGE_DELETED) == 0) &&
-				    (camel_message_info_date_received (info) > last_newmail)) {
+				    (camel_message_info_date_received (info) > latest_received)) {
+					latest_received = camel_message_info_date_received (info);
 					new++;
 					if (new == 1) {
 						uid = g_strdup (camel_message_info_uid (info));
@@ -459,8 +467,8 @@ folder_changed (CamelObject *o, gpointer event_data, gpointer user_data)
 		}
 	}
 
-	if (new > 0 || !last_newmail)
-		time (&last_newmail);
+	if (new > 0)
+		g_hash_table_insert (last_newmail_per_folder, folder, GINT_TO_POINTER (latest_received));
 
 	g_mutex_lock (self->priv->stores_mutex);
 	if (self->priv->stores != NULL



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]