Fix for counts on junk
authorSrinivasa Ragavan <sragavan@novell.com>
Mon, 15 Sep 2008 11:30:01 +0000 (11:30 +0000)
committerSrinivasa Ragavan <sragavan@src.gnome.org>
Mon, 15 Sep 2008 11:30:01 +0000 (11:30 +0000)
2008-09-15  Srinivasa Ragavan  <sragavan@novell.com>

* camel-folder-summary.c (info_set_flags): Fix for counts on junk
* camel-vee-folder.c (update_summary), (folder_changed_change_uid):
* camel-vtrash-folder.c (vtrash_getv),
(camel_vtrash_folder_class_init):

svn path=/trunk/; revision=9552

camel/ChangeLog
camel/camel-folder-summary.c
camel/camel-vee-folder.c
camel/camel-vtrash-folder.c

index 9c83622..506e182 100644 (file)
 
 2008-09-12  Andre Klapper  <a9016009@gmx.de>
 
+       * camel-folder-summary.c (info_set_flags): Fix for counts on junk
+       * camel-vee-folder.c (update_summary), (folder_changed_change_uid):
+       * camel-vtrash-folder.c (vtrash_getv),
+       (camel_vtrash_folder_class_init):
+
+2008-09-15  Srinivasa Ragavan  <sragavan@novell.com>
+
        * camel-store.c: Fixing typo.
 
 2008-09-12  Srinivasa Ragavan  <sragavan@novell.com>
index 8cd8883..f7c887f 100644 (file)
@@ -4542,8 +4542,13 @@ info_set_flags(CamelMessageInfo *info, guint32 flags, guint32 set)
                return FALSE;
 
        if (mi->summary) {
-               if (read)
+               if (read && junk == 0 && !(mi->flags & CAMEL_MESSAGE_JUNK))
                        mi->summary->unread_count -= read;
+               else if (junk > 0) 
+                       mi->summary->unread_count -= (old & CAMEL_MESSAGE_SEEN) ? 0 : 1;
+               else if (junk < 0)
+                       mi->summary->unread_count -= (old & CAMEL_MESSAGE_SEEN) ? 0 : -1;
+
                if (deleted)
                        mi->summary->deleted_count += deleted;
                if (junk)
index ec8a537..fdc0a21 100644 (file)
@@ -1221,7 +1221,7 @@ update_summary (CamelVeeMessageInfo *mi, guint32 flags, guint32 oldflags, gboole
        int unread=0, deleted=0, junk=0;
        CamelFolderSummary *summary = ((CamelMessageInfo *) mi)->summary;
        
-       if (!(flags & CAMEL_MESSAGE_SEEN))
+       if (!(flags & CAMEL_MESSAGE_SEEN) && !(flags & CAMEL_MESSAGE_JUNK))
                unread = 1;
        
        if (flags & CAMEL_MESSAGE_DELETED)
@@ -1251,7 +1251,7 @@ update_summary (CamelVeeMessageInfo *mi, guint32 flags, guint32 oldflags, gboole
                } else  {
                        oldflags = use_old ? oldflags : flags;
                        unread = deleted = junk = 0;
-                       if (!(oldflags & CAMEL_MESSAGE_SEEN))
+                       if (!(oldflags & CAMEL_MESSAGE_SEEN) && !(oldflags & CAMEL_MESSAGE_JUNK))
                                unread -= 1;
 
                        if (oldflags & CAMEL_MESSAGE_DELETED)
@@ -1274,7 +1274,7 @@ update_summary (CamelVeeMessageInfo *mi, guint32 flags, guint32 oldflags, gboole
                        summary->saved_count--;         
                }
        } else {
-               if (!(oldflags & CAMEL_MESSAGE_SEEN))
+               if (!(oldflags & CAMEL_MESSAGE_SEEN) && !(oldflags & CAMEL_MESSAGE_JUNK))
                        unread -= 1;
 
                if (oldflags & CAMEL_MESSAGE_DELETED)
@@ -1410,8 +1410,9 @@ folder_changed_change_uid(CamelFolder *sub, const char *uid, const char hash[8],
                info = camel_folder_get_message_info(sub, uid);
                if (info) {
                        if (vinfo) {
+                               guint32 of = vinfo->old_flags;
                                camel_folder_change_info_change_uid(vf->changes, vuid);
-                               update_summary (vinfo, camel_message_info_flags(info), vinfo->old_flags, FALSE /* Doesn't matter */, TRUE);
+                               update_summary (vinfo, camel_message_info_flags(info), of, FALSE /* Doesn't matter */, TRUE);
                                camel_message_info_free((CamelMessageInfo *)vinfo);
                        }
 
index 6f755c5..c795e06 100644 (file)
@@ -138,13 +138,17 @@ vtrash_getv(CamelObject *object, CamelException *ex, CamelArgGetV *args)
                        /* This is so we can get the values atomically, and also so we can calculate them only once */
                        if (unread == -1) {
                                int j;
-                               CamelMessageInfo *info;
+                               CamelMessageInfoBase *info;
+                               CamelVeeMessageInfo *vinfo;
 
                                unread = 0;
                                count = camel_folder_summary_count(folder->summary);
                                for (j=0; j<count; j++) {
-                                       if ((info = camel_folder_summary_index(folder->summary, j))) {
-                                               guint32 flags = camel_message_info_flags(info);
+                                       if ((info = (CamelMessageInfoBase *) camel_folder_summary_index(folder->summary, j))) {
+                                               guint32 flags;
+
+                                               vinfo = (CamelVeeMessageInfo *) info;
+                                               flags = vinfo->old_flags ? vinfo->old_flags : camel_message_info_flags(info);
 
                                                if ((flags & (CAMEL_MESSAGE_SEEN)) == 0)
                                                        unread++;
@@ -637,7 +641,7 @@ camel_vtrash_folder_class_init (CamelVTrashFolderClass *klass)
        camel_vtrash_folder_parent = CAMEL_VEE_FOLDER_CLASS(camel_vee_folder_get_type());
 
        /* Not required from here on. We don't count */
-       /* ((CamelObjectClass *)klass)->getv = vtrash_getv; */ 
+       ((CamelObjectClass *)klass)->getv = vtrash_getv; 
        
        folder_class->append_message = vtrash_append_message;
        folder_class->transfer_messages_to = vtrash_transfer_messages_to;