evolution-data-server r9518 - trunk/camel



Author: sragavan
Date: Wed Sep 10 20:50:49 2008
New Revision: 9518
URL: http://svn.gnome.org/viewvc/evolution-data-server?rev=9518&view=rev

Log:
2008-09-11  Srinivasa Ragavan  <sragavan novell com>

	* camel/camel-vee-folder.c:
	* camel/camel-vee-summary.c: Refix vfolder counts.


Modified:
   trunk/camel/ChangeLog
   trunk/camel/camel-vee-folder.c
   trunk/camel/camel-vee-summary.c

Modified: trunk/camel/camel-vee-folder.c
==============================================================================
--- trunk/camel/camel-vee-folder.c	(original)
+++ trunk/camel/camel-vee-folder.c	Wed Sep 10 20:50:49 2008
@@ -217,14 +217,13 @@
 
 	CAMEL_VEE_FOLDER_UNLOCK(vf, subfolder_lock);
 
-	d(printf("camel_vee_folder_add_folde(%p, %p)\n", vf, sub));
+	d(printf("camel_vee_folder_add_folder(%s, %s)\n", ((CamelFolder *)vf)->full_name, sub->full_name));
 
 	cache = camel_folder_summary_cache_size(sub->summary);
 	if (!cache) {
 		camel_object_hook_event(sub->summary, "summary_reloaded", summary_reloaded, vf);
 		g_hash_table_insert(vf->loaded, sub, GINT_TO_POINTER(1));
 	}
-	
 	camel_object_hook_event((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc)folder_changed, vf);
 	camel_object_hook_event((CamelObject *)sub, "deleted", (CamelObjectEventHookFunc)subfolder_deleted, vf);
 	camel_object_hook_event((CamelObject *)sub, "renamed", (CamelObjectEventHookFunc)folder_renamed, vf);
@@ -1219,7 +1218,7 @@
  */
 
 static void
-update_summary (CamelVeeMessageInfo *mi, guint32 flags, guint32 oldflags, gboolean add)
+update_summary (CamelVeeMessageInfo *mi, guint32 flags, guint32 oldflags, gboolean add, gboolean use_old)
 {
 	int unread=0, deleted=0, junk=0;
 	CamelFolderSummary *summary = ((CamelMessageInfo *) mi)->summary;
@@ -1232,10 +1231,11 @@
 
 	if (flags & CAMEL_MESSAGE_JUNK)
 		junk = 1;
+
+	d(printf("folder: %s %d %d: %p:%s\n", summary->folder->full_name, oldflags, add, mi, ((CamelMessageInfo *)mi)->uid));
+	d(printf("%d %d %d\n%d %d %d\n", !(flags & CAMEL_MESSAGE_SEEN), flags & CAMEL_MESSAGE_DELETED, flags & CAMEL_MESSAGE_JUNK, !(oldflags & CAMEL_MESSAGE_SEEN), oldflags & CAMEL_MESSAGE_DELETED, oldflags & CAMEL_MESSAGE_JUNK));
 	
-	d(printf("%d %d %d\n%d %d %d\n", !(flags & CAMEL_MESSAGE_SEEN), flags & CAMEL_MESSAGE_DELETED, flags & CAMEL_MESSAGE_JUNK, !(oldflags & CAMEL_MESSAGE_SEEN), flags & CAMEL_MESSAGE_DELETED, flags & CAMEL_MESSAGE_JUNK));
-	
-	if (!oldflags) {
+	if (!use_old) {
 		if (add) {
 			if (unread)
 				summary->unread_count += unread;
@@ -1250,15 +1250,26 @@
 				summary->visible_count -= junk ? junk : deleted;
 
 			summary->saved_count++;		
-		} else {
+		} else  {
+			oldflags = use_old ? oldflags : flags;
+			unread = deleted = junk = 0;
+			if (!(oldflags & CAMEL_MESSAGE_SEEN))
+				unread -= 1;
+
+			if (oldflags & CAMEL_MESSAGE_DELETED)
+				deleted -= 1;
+
+			if (oldflags & CAMEL_MESSAGE_JUNK)
+				junk -= 1;			
+
 			if (unread)
-				summary->unread_count -= unread;
+				summary->unread_count += unread;
 			if (deleted)
-				summary->deleted_count -= deleted;
+				summary->deleted_count += deleted;
 			if (junk)
-				summary->junk_count -= junk;
+				summary->junk_count += junk;
 			if (junk && !deleted)
-				summary->junk_not_deleted_count -= junk;
+				summary->junk_not_deleted_count += junk;
 			if (!junk && !deleted)
 				summary->visible_count--;
 
@@ -1268,12 +1279,11 @@
 		if (!(oldflags & CAMEL_MESSAGE_SEEN))
 			unread -= 1;
 
-		if (flags & CAMEL_MESSAGE_DELETED)
+		if (oldflags & CAMEL_MESSAGE_DELETED)
 			deleted -= 1;
 
-		if (flags & CAMEL_MESSAGE_JUNK)
+		if (oldflags & CAMEL_MESSAGE_JUNK)
 			junk -= 1;
-		
 		if (unread)
 			summary->unread_count += unread;
 		if (deleted)
@@ -1308,7 +1318,7 @@
 	camel_db_add_to_vfolder_transaction (folder->parent_store->cdb, folder->full_name, (char *)vuid, NULL);
 	camel_folder_change_info_add_uid(vf->changes,  vuid);
 	/* old flags and new flags should  be same, since we sync all times  */
-	update_summary (vinfo, camel_message_info_flags(vinfo), 0, TRUE);
+	update_summary (vinfo, camel_message_info_flags(vinfo), 0, TRUE, FALSE);
 	if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0 && !CAMEL_IS_VEE_FOLDER(sub) && folder_unmatched != NULL) {
 		if (g_hash_table_lookup_extended(unmatched_uids, vuid, (void **)&oldkey, &oldval)) {
 			n = GPOINTER_TO_INT (oldval);
@@ -1342,7 +1352,7 @@
 
 	vinfo = (CamelVeeMessageInfo *) camel_folder_summary_uid (((CamelFolder *) vf)->summary, vuid);
 	if (vinfo) {
-		update_summary (vinfo, vinfo->old_flags, 0, FALSE);
+		update_summary (vinfo, vinfo->old_flags, 0, FALSE, FALSE);
 		camel_message_info_free((CamelMessageInfo *)vinfo);
 	}
 	camel_folder_change_info_remove_uid(vf->changes, vuid);
@@ -1403,13 +1413,13 @@
 		if (info) {
 			if (vinfo) {
 				camel_folder_change_info_change_uid(vf->changes, vuid);
-				update_summary (vinfo, camel_message_info_flags(info), vinfo->old_flags, FALSE /* Doesn't matter */);
+				update_summary (vinfo, camel_message_info_flags(info), vinfo->old_flags, FALSE /* Doesn't matter */, TRUE);
 				camel_message_info_free((CamelMessageInfo *)vinfo);
 			}
 
 			if (uinfo) {
 				camel_folder_change_info_change_uid(folder_unmatched->changes, vuid);
-				update_summary (uinfo, camel_message_info_flags(info), uinfo->old_flags, FALSE /* Doesn't matter */);				
+				update_summary (uinfo, camel_message_info_flags(info), uinfo->old_flags, FALSE /* Doesn't matter */, TRUE);				
 				camel_message_info_free((CamelMessageInfo *)uinfo);
 			}
 
@@ -1882,7 +1892,7 @@
 
 	camel_vee_folder_hash_folder(sub, hash);	
 	shash = g_strdup_printf("%c%c%c%c%c%c%c%c", hash[0], hash[1], hash[2], hash[3], hash[4], hash[5], hash[6], hash[7]);
-
+	dd(printf("Loading summary of %s to vfolder %s\n", sub->full_name, folder->full_name));
 
 	/* Get the summary of vfolder */
 	array = camel_folder_summary_array (folder->summary);

Modified: trunk/camel/camel-vee-summary.c
==============================================================================
--- trunk/camel/camel-vee-summary.c	(original)
+++ trunk/camel/camel-vee-summary.c	Wed Sep 10 20:50:49 2008
@@ -378,7 +378,6 @@
 	mi = (CamelVeeMessageInfo *)camel_message_info_new(&s->summary);
 	mi->summary = summary;
 	/* We would do lazy loading of flags, when the folders are loaded to memory through folder_reloaded signal */
-	mi->old_flags = 0;
 	camel_object_ref (summary);
 	mi->info.uid = (char *) camel_pstring_strdup (vuid);
 	g_free (vuid);



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