[evolution] Bug #534369 - [new-mail-notify] Intermittent notifications
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug #534369 - [new-mail-notify] Intermittent notifications
- Date: Mon, 14 Jun 2010 18:16:38 +0000 (UTC)
commit ead63f16b2269325c1e4080b3dce8818bbafe189
Author: Milan Crha <mcrha redhat com>
Date: Mon Jun 14 20:15:55 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 a0453a9..b2e22e3 100644
--- a/mail/e-mail-backend.c
+++ b/mail/e-mail-backend.c
@@ -335,7 +335,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 a9726ea..094a046 100644
--- a/mail/mail-folder-cache.c
+++ b/mail/mail-folder-cache.c
@@ -301,7 +301,8 @@ folder_changed_cb (CamelFolder *folder,
CamelFolderChangeInfo *changes,
MailFolderCache *self)
{
- static time_t last_newmail = 0;
+ static GHashTable *last_newmail_per_folder = NULL;
+ time_t latest_received;
CamelFolder *local_drafts;
CamelFolder *local_outbox;
CamelFolder *local_sent;
@@ -318,6 +319,12 @@ folder_changed_cb (CamelFolder *folder,
full_name = camel_folder_get_full_name (folder);
parent_store = camel_folder_get_parent_store (folder);
+ 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);
@@ -336,7 +343,8 @@ folder_changed_cb (CamelFolder *folder,
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));
@@ -357,8 +365,8 @@ folder_changed_cb (CamelFolder *folder,
}
}
- 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]