[evolution-data-server] Bug #634658 - Unread counts for vfolders never update
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Bug #634658 - Unread counts for vfolders never update
- Date: Fri, 12 Nov 2010 16:10:07 +0000 (UTC)
commit e00854a79d1c513d4b2598e9a69673a17dd80a91
Author: Milan Crha <mcrha redhat com>
Date: Fri Nov 12 17:09:24 2010 +0100
Bug #634658 - Unread counts for vfolders never update
camel/camel-db.c | 57 --------------
camel/camel-db.h | 1 -
camel/camel-folder-summary.c | 106 +++++++++++----------------
camel/camel-folder-summary.h | 5 +-
camel/camel-vee-folder.c | 39 +++++++++-
camel/camel-vee-summary.c | 22 ++----
camel/providers/local/camel-local-summary.c | 1 -
7 files changed, 87 insertions(+), 144 deletions(-)
---
diff --git a/camel/camel-db.c b/camel/camel-db.c
index 137e7fc..2a001cd 100644
--- a/camel/camel-db.c
+++ b/camel/camel-db.c
@@ -1090,63 +1090,6 @@ camel_db_delete_uid_from_vfolder_transaction (CamelDB *db,
return ret;
}
-struct _db_data_uids_flags {
- GPtrArray *uids;
- GPtrArray *flags;
-};
-static gint
-read_uids_flags_callback (gpointer ref, gint ncol, gchar ** cols, gchar ** name)
-{
- struct _db_data_uids_flags *data= (struct _db_data_uids_flags *) ref;
-
- gint i;
- for (i = 0; i < ncol; ++i) {
- if (!strcmp (name [i], "uid"))
- g_ptr_array_add (data->uids, (gchar *) (camel_pstring_strdup (cols[i])));
- else if (!strcmp (name [i], "flags"))
- g_ptr_array_add (data->flags, GUINT_TO_POINTER (strtoul (cols[i], NULL, 10)));
- }
-
- return 0;
-}
-
-/**
- * camel_db_get_folder_uids_flags:
- *
- * Since: 2.26
- **/
-gint
-camel_db_get_folder_uids_flags (CamelDB *db,
- const gchar *folder_name,
- const gchar *sort_by,
- const gchar *collate,
- GPtrArray *summary,
- GHashTable *table,
- GError **error)
-{
- GPtrArray *uids = summary;
- GPtrArray *flags = g_ptr_array_new ();
- gchar *sel_query;
- gint ret;
- struct _db_data_uids_flags data;
- gint i;
-
- data.uids = uids;
- data.flags = flags;
-
- sel_query = sqlite3_mprintf("SELECT uid,flags FROM %Q%s%s%s%s", folder_name, sort_by ? " order by " : "", sort_by ? sort_by: "", (sort_by && collate) ? " collate " : "", (sort_by && collate) ? collate : "");
-
- ret = camel_db_select (db, sel_query, read_uids_flags_callback, &data, error);
- sqlite3_free (sel_query);
-
- for (i=0; i<uids->len; i++) {
- g_hash_table_insert (table, uids->pdata[i], flags->pdata[i]);
- }
-
- g_ptr_array_free (flags, TRUE);
- return ret;
-}
-
static gint
read_uids_callback (gpointer ref, gint ncol, gchar ** cols, gchar ** name)
{
diff --git a/camel/camel-db.h b/camel/camel-db.h
index bf047ff..14de951 100644
--- a/camel/camel-db.h
+++ b/camel/camel-db.h
@@ -259,7 +259,6 @@ gint camel_db_add_to_vfolder (CamelDB *db, gchar *folder_name, gchar *vuid, GErr
gint camel_db_add_to_vfolder_transaction (CamelDB *db, const gchar *folder_name, const gchar *vuid, GError **error);
gint camel_db_get_folder_uids (CamelDB *db, const gchar *folder_name, const gchar *sort_by, const gchar *collate, GPtrArray *array, GError **error);
-gint camel_db_get_folder_uids_flags (CamelDB *db, const gchar *folder_name, const gchar *sort_by, const gchar *collate, GPtrArray *summary, GHashTable *table, GError **error);
GPtrArray * camel_db_get_folder_junk_uids (CamelDB *db, gchar *folder_name, GError **error);
GPtrArray * camel_db_get_folder_deleted_uids (CamelDB *db, const gchar *folder_name, GError **error);
diff --git a/camel/camel-folder-summary.c b/camel/camel-folder-summary.c
index 1591669..e985125 100644
--- a/camel/camel-folder-summary.c
+++ b/camel/camel-folder-summary.c
@@ -85,7 +85,6 @@ struct _CamelFolderSummaryPrivate {
GStaticRecMutex filter_lock; /* for accessing any of the filtering/indexing stuff, since we share them */
GStaticRecMutex alloc_lock; /* for setting up and using allocators */
GStaticRecMutex ref_lock; /* for reffing/unreffing messageinfo's ALWAYS obtain before summary_lock */
- GHashTable *flag_cache;
gboolean need_preview;
GHashTable *preview_updates;
@@ -213,7 +212,6 @@ folder_summary_finalize (GObject *object)
{
CamelFolderSummary *summary = CAMEL_FOLDER_SUMMARY (object);
- g_hash_table_destroy (summary->priv->flag_cache);
if (summary->timeout_handle)
g_source_remove (summary->timeout_handle);
/*camel_folder_summary_clear(s);*/
@@ -853,8 +851,6 @@ info_set_flags (CamelMessageInfo *info, guint32 flags, guint32 set)
if (((junk && !(mi->flags & CAMEL_MESSAGE_DELETED)))|| (deleted && !(mi->flags & CAMEL_MESSAGE_JUNK)) )
mi->summary->visible_count -= junk ? junk : deleted;
}
- if (mi->uid)
- g_hash_table_replace (CAMEL_FOLDER_SUMMARY_GET_PRIVATE (mi->summary)->flag_cache, (gchar *)mi->uid, GUINT_TO_POINTER (mi->flags));
if (mi->summary && mi->summary->folder && mi->uid) {
CamelFolderChangeInfo *changes = camel_folder_change_info_new ();
@@ -928,8 +924,6 @@ camel_folder_summary_init (CamelFolderSummary *summary)
summary->priv->filter_charset = g_hash_table_new (
camel_strcase_hash, camel_strcase_equal);
- summary->priv->flag_cache = g_hash_table_new (g_str_hash, g_str_equal);
-
summary->message_info_chunks = NULL;
summary->content_info_chunks = NULL;
summary->priv->need_preview = FALSE;
@@ -1798,19 +1792,6 @@ camel_folder_summary_prepare_fetch_all (CamelFolderSummary *s,
}
/**
- * camel_folder_summary_get_flag_cache:
- *
- * Since: 2.26
- **/
-GHashTable *
-camel_folder_summary_get_flag_cache (CamelFolderSummary *summary)
-{
- struct _CamelFolderSummaryPrivate *p = CAMEL_FOLDER_SUMMARY_GET_PRIVATE (summary);
-
- return p->flag_cache;
-}
-
-/**
* camel_folder_summary_load_from_db:
*
* Since: 2.24
@@ -1823,7 +1804,6 @@ camel_folder_summary_load_from_db (CamelFolderSummary *s,
CamelStore *parent_store;
const gchar *full_name;
gint ret = 0;
- struct _CamelFolderSummaryPrivate *p = CAMEL_FOLDER_SUMMARY_GET_PRIVATE (s);
GError *local_error = NULL;
/* struct _db_pass_data data; */
@@ -1839,9 +1819,9 @@ camel_folder_summary_load_from_db (CamelFolderSummary *s,
cdb = parent_store->cdb_r;
- ret = camel_db_get_folder_uids_flags (
+ ret = camel_db_get_folder_uids (
cdb, full_name, s->sort_by, s->collate,
- s->uids, p->flag_cache, &local_error);
+ s->uids, &local_error);
if (local_error != NULL && local_error->message != NULL &&
strstr (local_error->message, "no such table") != NULL) {
@@ -2448,7 +2428,6 @@ camel_folder_summary_add (CamelFolderSummary *s, CamelMessageInfo *info)
/* FIXME[disk-summary] SHould we ref it or redesign it later on */
/* The uid array should have its own memory. We will unload the infos when not reqd.*/
g_ptr_array_add (s->uids, (gpointer) camel_pstring_strdup ((camel_message_info_uid (info))));
- g_hash_table_replace (CAMEL_FOLDER_SUMMARY_GET_PRIVATE (s)->flag_cache, (gchar *)info->uid, GUINT_TO_POINTER (camel_message_info_flags (info)));
g_hash_table_insert (s->loaded_infos, (gpointer) camel_message_info_uid (info), info);
s->flags |= CAMEL_SUMMARY_DIRTY;
@@ -2477,9 +2456,6 @@ camel_folder_summary_insert (CamelFolderSummary *s, CamelMessageInfo *info, gboo
g_ptr_array_add (s->uids, (gchar *) camel_pstring_strdup (camel_message_info_uid (info)));
g_hash_table_insert (s->loaded_infos, (gchar *) camel_message_info_uid (info), info);
- if (load) {
- g_hash_table_replace (CAMEL_FOLDER_SUMMARY_GET_PRIVATE (s)->flag_cache, (gchar *)info->uid, GUINT_TO_POINTER (camel_message_info_flags (info)));
- }
if (!load)
s->flags |= CAMEL_SUMMARY_DIRTY;
@@ -2487,45 +2463,50 @@ camel_folder_summary_insert (CamelFolderSummary *s, CamelMessageInfo *info, gboo
camel_folder_summary_unlock (s, CAMEL_FOLDER_SUMMARY_SUMMARY_LOCK);
}
-static void
-update_summary (CamelFolderSummary *summary, CamelMessageInfoBase *info)
+void
+camel_folder_summary_update_counts_by_flags (CamelFolderSummary *summary, guint32 flags, gboolean subtract)
{
gint unread=0, deleted=0, junk=0;
- guint32 flags = info->flags;
+
+ g_return_if_fail (summary != NULL);
if (!(flags & CAMEL_MESSAGE_SEEN))
- unread = 1;
+ unread = subtract ? -1 : 1;
if (flags & CAMEL_MESSAGE_DELETED)
- deleted = 1;
+ deleted = subtract ? -1 : 1;
if (flags & CAMEL_MESSAGE_JUNK)
- junk = 1;
+ junk = subtract ? -1 : 1;
dd(printf("%p: %d %d %d | %d %d %d \n", (gpointer) summary, unread, deleted, junk, summary->unread_count, summary->visible_count, summary->saved_count));
- info->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
- info->dirty = TRUE;
-
- if (summary) {
- if (unread)
- summary->unread_count += unread;
- if (deleted)
- summary->deleted_count += deleted;
- if (junk)
- summary->junk_count += junk;
- if (junk && !deleted)
- summary->junk_not_deleted_count += junk;
- summary->visible_count++;
- if (junk || deleted)
- summary->visible_count -= junk ? junk : deleted;
+ if (unread)
+ summary->unread_count += unread;
+ if (deleted)
+ summary->deleted_count += deleted;
+ if (junk)
+ summary->junk_count += junk;
+ if (junk && !deleted)
+ summary->junk_not_deleted_count += junk;
+ if (!junk && !deleted)
+ summary->visible_count += subtract ? -1 : 1;
- summary->saved_count++;
- camel_folder_summary_touch (summary);
- }
+ summary->saved_count += subtract ? -1 : 1;
+ camel_folder_summary_touch (summary);
dd(printf("%p: %d %d %d | %d %d %d\n", (gpointer) summary, unread, deleted, junk, summary->unread_count, summary->visible_count, summary->saved_count));
+}
+static void
+update_summary (CamelFolderSummary *summary, CamelMessageInfoBase *info)
+{
+ g_return_if_fail (summary != NULL);
+ g_return_if_fail (info != NULL);
+
+ camel_folder_summary_update_counts_by_flags (summary, info->flags, FALSE);
+ info->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
+ info->dirty = TRUE;
}
/**
@@ -2813,7 +2794,12 @@ camel_folder_summary_clear (CamelFolderSummary *s)
g_ptr_array_foreach (s->uids, (GFunc) camel_pstring_free, NULL);
g_ptr_array_free (s->uids, TRUE);
s->uids = g_ptr_array_new ();
- s->visible_count = s->deleted_count = s->unread_count = 0;
+ s->saved_count = 0;
+ s->unread_count = 0;
+ s->deleted_count = 0;
+ s->junk_count = 0;
+ s->junk_not_deleted_count = 0;
+ s->visible_count = 0;
g_hash_table_destroy (s->loaded_infos);
s->loaded_infos = g_hash_table_new (g_str_hash, g_str_equal);
@@ -2853,7 +2839,12 @@ camel_folder_summary_clear_db (CamelFolderSummary *s)
g_ptr_array_foreach (s->uids, (GFunc) camel_pstring_free, NULL);
g_ptr_array_free (s->uids, TRUE);
s->uids = g_ptr_array_new ();
- s->visible_count = s->deleted_count = s->unread_count = 0;
+ s->saved_count = 0;
+ s->unread_count = 0;
+ s->deleted_count = 0;
+ s->junk_count = 0;
+ s->junk_not_deleted_count = 0;
+ s->visible_count = 0;
g_hash_table_destroy (s->loaded_infos);
s->loaded_infos = g_hash_table_new (g_str_hash, g_str_equal);
@@ -4649,17 +4640,6 @@ camel_message_info_user_tag (const CamelMessageInfo *mi, const gchar *id)
}
/**
- * camel_folder_summary_update_flag_cache:
- *
- * Since: 2.26
- **/
-void
-camel_folder_summary_update_flag_cache (CamelFolderSummary *s, const gchar *uid, guint32 flag)
-{
- g_hash_table_replace (CAMEL_FOLDER_SUMMARY_GET_PRIVATE (s)->flag_cache, (gchar *) uid, GUINT_TO_POINTER (flag));
-}
-
-/**
* camel_message_info_set_flags:
* @mi: a #CamelMessageInfo
* @flags: mask of flags to change
diff --git a/camel/camel-folder-summary.h b/camel/camel-folder-summary.h
index 0f36749..d536a99 100644
--- a/camel/camel-folder-summary.h
+++ b/camel/camel-folder-summary.h
@@ -398,6 +398,9 @@ void camel_folder_summary_remove_range (CamelFolderSummary *summary, gint start,
void camel_folder_summary_clear (CamelFolderSummary *summary);
void camel_folder_summary_clear_db (CamelFolderSummary *s);
+/* update visible/unread/... counts based on message flags */
+void camel_folder_summary_update_counts_by_flags (CamelFolderSummary *summary, guint32 flags, gboolean subtract);
+
/* lookup functions */
guint camel_folder_summary_count (CamelFolderSummary *summary);
CamelMessageInfo *camel_folder_summary_index (CamelFolderSummary *summary, gint index);
@@ -408,8 +411,6 @@ gboolean camel_folder_summary_check_uid (CamelFolderSummary *s, const gchar *uid
GPtrArray *camel_folder_summary_array (CamelFolderSummary *summary);
GHashTable *camel_folder_summary_get_hashtable (CamelFolderSummary *s);
void camel_folder_summary_free_hashtable (GHashTable *ht);
-GHashTable *camel_folder_summary_get_flag_cache (CamelFolderSummary *summary);
-void camel_folder_summary_update_flag_cache (CamelFolderSummary *s, const gchar *uid, guint32 flag);
/* basically like strings, but certain keywords can be compressed and de-cased */
gint camel_folder_summary_encode_token (FILE *out, const gchar *str);
diff --git a/camel/camel-vee-folder.c b/camel/camel-vee-folder.c
index 12a2ba2..bb2236c 100644
--- a/camel/camel-vee-folder.c
+++ b/camel/camel-vee-folder.c
@@ -161,6 +161,7 @@ folder_changed_add_uid (CamelFolder *sub, const gchar *uid, const gchar hash[8],
}
vinfo = (CamelVeeMessageInfo *)camel_folder_get_message_info ((CamelFolder *)folder_unmatched, vuid);
if (vinfo) {
+ camel_folder_summary_update_counts_by_flags (CAMEL_FOLDER (folder_unmatched)->summary, vinfo->old_flags, TRUE);
full_name = camel_folder_get_full_name (
CAMEL_FOLDER (folder_unmatched));
camel_folder_change_info_remove_uid (
@@ -197,6 +198,12 @@ folder_changed_remove_uid (CamelFolder *sub, const gchar *uid, const gchar hash[
parent_store = camel_folder_get_parent_store (folder);
+ vinfo = (CamelVeeMessageInfo *) camel_folder_summary_uid (folder->summary, vuid);
+ if (vinfo) {
+ camel_folder_summary_update_counts_by_flags (folder->summary, vinfo->old_flags, TRUE);
+ camel_message_info_free ((CamelMessageInfo *) vinfo);
+ }
+
camel_folder_change_info_remove_uid (vf->changes, vuid);
if (use_db) {
full_name = camel_folder_get_full_name (folder);
@@ -229,6 +236,7 @@ folder_changed_remove_uid (CamelFolder *sub, const gchar *uid, const gchar hash[
vinfo = (CamelVeeMessageInfo *)camel_folder_get_message_info ((CamelFolder *)folder_unmatched, vuid);
if (vinfo) {
+ camel_folder_summary_update_counts_by_flags (CAMEL_FOLDER (folder_unmatched)->summary, vinfo->old_flags, TRUE);
full_name = camel_folder_get_full_name (
CAMEL_FOLDER (folder_unmatched));
camel_folder_change_info_remove_uid (
@@ -246,6 +254,17 @@ folder_changed_remove_uid (CamelFolder *sub, const gchar *uid, const gchar hash[
}
static void
+update_old_flags (CamelFolderSummary *summary, CamelVeeMessageInfo *vinfo)
+{
+ g_return_if_fail (summary != NULL);
+ g_return_if_fail (vinfo != NULL);
+
+ camel_folder_summary_update_counts_by_flags (summary, vinfo->old_flags, TRUE);
+ vinfo->old_flags = camel_message_info_flags ((CamelMessageInfo *)vinfo);
+ camel_folder_summary_update_counts_by_flags (summary, vinfo->old_flags, FALSE);
+}
+
+static void
folder_changed_change_uid (CamelFolder *sub, const gchar *uid, const gchar hash[8], CamelVeeFolder *vf, gboolean use_db)
{
gchar *vuid;
@@ -266,11 +285,13 @@ folder_changed_change_uid (CamelFolder *sub, const gchar *uid, const gchar hash[
if (info) {
if (vinfo) {
camel_folder_change_info_change_uid (vf->changes, vuid);
+ update_old_flags (folder->summary, vinfo);
camel_message_info_free ((CamelMessageInfo *)vinfo);
}
if (uinfo) {
camel_folder_change_info_change_uid (folder_unmatched->changes, vuid);
+ update_old_flags (CAMEL_FOLDER (folder_unmatched)->summary, uinfo);
camel_message_info_free ((CamelMessageInfo *)uinfo);
}
@@ -592,6 +613,7 @@ subfolder_renamed_update (CamelVeeFolder *vf, CamelFolder *sub, gchar hash[8])
gpointer oldval;
camel_folder_change_info_remove_uid (vf->changes, uid);
+ camel_folder_summary_update_counts_by_flags (CAMEL_FOLDER (vf)->summary, mi->old_flags, TRUE);
camel_folder_summary_remove (((CamelFolder *)vf)->summary, (CamelMessageInfo *)mi);
/* works since we always append on the end */
@@ -674,6 +696,7 @@ unmatched_check_uid (gchar *uidin, gpointer value, struct _update_data *u)
parent_store = camel_folder_get_parent_store (
CAMEL_FOLDER (u->folder_unmatched));
+ camel_folder_summary_update_counts_by_flags (CAMEL_FOLDER (u->folder_unmatched)->summary, mi->old_flags, TRUE);
camel_db_delete_uid_from_vfolder_transaction (
parent_store->cdb_w, full_name, uid, NULL);
camel_folder_summary_remove_uid_fast (
@@ -1355,6 +1378,7 @@ vee_folder_synchronize_sync (CamelFolder *folder,
CamelVeeMessageInfo *mi = (CamelVeeMessageInfo *)camel_folder_summary_index (folder->summary, i);
if (mi->old_flags & CAMEL_MESSAGE_DELETED) {
del = g_slist_prepend (del, (gpointer) camel_pstring_strdup (((CamelMessageInfo *)mi)->uid));
+ camel_folder_summary_update_counts_by_flags (folder->summary, mi->old_flags, TRUE);
camel_folder_summary_remove_index_fast (folder->summary, i);
count--;
i--;
@@ -1422,11 +1446,6 @@ vee_folder_set_expression (CamelVeeFolder *vee_folder,
camel_folder_summary_clear (summary);
camel_db_recreate_vfolder (parent_store->cdb_w, full_name, NULL);
- summary->junk_count = 0;
- summary->deleted_count = 0;
- summary->unread_count = 0;
- summary->visible_count = 0;
- summary->junk_not_deleted_count = 0;
}
g_free (vee_folder->expression);
@@ -1503,6 +1522,7 @@ vee_folder_remove_folder_helper (CamelVeeFolder *vf, CamelFolder *source)
if (mi) {
if (mi->summary == ssummary) {
camel_folder_change_info_remove_uid (folder_unmatched->changes, camel_message_info_uid (mi));
+ camel_folder_summary_update_counts_by_flags (CAMEL_FOLDER (folder_unmatched)->summary, mi->old_flags, TRUE);
if (last == -1) {
last = start = i;
} else if (last+1 == i) {
@@ -1533,6 +1553,7 @@ vee_folder_remove_folder_helper (CamelVeeFolder *vf, CamelFolder *source)
const gchar *uid = camel_message_info_uid (mi);
camel_folder_change_info_remove_uid (vf->changes, uid);
+ camel_folder_summary_update_counts_by_flags (folder->summary, mi->old_flags, TRUE);
if (last == -1) {
last = start = i;
@@ -1742,9 +1763,11 @@ vee_folder_rebuild_folder (CamelVeeFolder *vee_folder,
} else {
camel_folder_summary_remove_range (folder->summary, start, last);
i -= (last-start)+1;
+ count -= (last - start) + 1;
start = last = i;
}
camel_folder_change_info_remove_uid (vee_folder->changes, camel_message_info_uid (mi));
+ camel_folder_summary_update_counts_by_flags (folder->summary, mi->old_flags, TRUE);
if (!CAMEL_IS_VEE_FOLDER (source)
&& unmatched_uids != NULL
&& g_hash_table_lookup_extended (unmatched_uids, uid, (gpointer *)&oldkey, &oldval)) {
@@ -1792,10 +1815,16 @@ vee_folder_rebuild_folder (CamelVeeFolder *vee_folder,
if (uid) {
if (strncmp (uid, u.hash, 8) == 0) {
if (g_hash_table_lookup (allhash, uid+8) == NULL) {
+ CamelVeeMessageInfo *vinfo = (CamelVeeMessageInfo *) camel_folder_summary_index (CAMEL_FOLDER (folder_unmatched)->summary, i);
+ if (vinfo) {
+ camel_folder_summary_update_counts_by_flags (CAMEL_FOLDER (folder_unmatched)->summary, vinfo->old_flags, TRUE);
+ camel_message_info_free (vinfo);
+ }
/* no longer exists at all, just remove it entirely */
camel_folder_summary_remove_index_fast (((CamelFolder *)folder_unmatched)->summary, i);
camel_folder_change_info_remove_uid (folder_unmatched->changes, uid);
i--;
+ count--;
} else {
g_hash_table_remove (allhash, uid+8);
}
diff --git a/camel/camel-vee-summary.c b/camel/camel-vee-summary.c
index 07a90ab..a3fe8be 100644
--- a/camel/camel-vee-summary.c
+++ b/camel/camel-vee-summary.c
@@ -93,8 +93,6 @@ vee_info_uint32 (const CamelMessageInfo *mi, gint id)
HANDLE_NULL_INFO (0);
ret = camel_message_info_uint32 (rmi, id);
- if (id == CAMEL_MESSAGE_INFO_FLAGS)
- ((CamelVeeMessageInfo *) mi)->old_flags = camel_message_info_flags (rmi);
camel_message_info_free (rmi);
return ret;
@@ -284,14 +282,12 @@ vee_info_set_flags (CamelMessageInfo *mi,
if (hacked_unread_folder && !vsummary->fake_visible_count)
vsummary->fake_visible_count = mi->summary->visible_count;
-#if 0
/* Keep the summary in sync */
mi->summary->unread_count += unread - old_unread;
mi->summary->deleted_count += deleted - old_deleted;
mi->summary->junk_count += junked - old_junked;
mi->summary->junk_not_deleted_count += junked_not_deleted - old_junked_not_deleted;
mi->summary->visible_count += visible - old_visible;
-#endif
if (vsummary->fake_visible_count || hacked_unread_folder)
vsummary->fake_visible_count += visible - old_visible;
@@ -427,9 +423,6 @@ camel_vee_summary_new (CamelFolder *parent)
parent_store = camel_folder_get_parent_store (parent);
camel_db_create_vfolder (parent_store->cdb_w, full_name, NULL);
- /* FIXME[disk-summary] handle excep and ret */
- camel_folder_summary_header_load_from_db ((CamelFolderSummary *)s, parent_store, full_name, NULL);
-
return &s->summary;
}
@@ -461,8 +454,8 @@ CamelVeeMessageInfo *
camel_vee_summary_add (CamelVeeSummary *s, CamelFolderSummary *summary, const gchar *uid, const gchar hash[8])
{
CamelVeeMessageInfo *mi;
+ CamelMessageInfo *rmi;
gchar *vuid;
- GHashTable * fcache;
vuid = g_malloc (strlen (uid)+9);
memcpy (vuid, hash, 8);
strcpy (vuid+8, uid);
@@ -483,21 +476,20 @@ camel_vee_summary_add (CamelVeeSummary *s, CamelFolderSummary *summary, const gc
}
mi = (CamelVeeMessageInfo *)camel_message_info_new (&s->summary);
- mi->summary = summary;
- fcache = camel_folder_summary_get_flag_cache (summary);
- mi->old_flags = GPOINTER_TO_UINT (g_hash_table_lookup (fcache, uid));
- /* We would do lazy loading of flags, when the folders are loaded to memory through folder_reloaded signal */
- g_object_ref (summary);
+ mi->summary = g_object_ref (summary);
mi->info.uid = (gchar *) camel_pstring_strdup (vuid);
g_free (vuid);
camel_message_info_ref (mi);
- /* Get the flags and store it. We can use it a lot * /
+
+ /* Get actual flags and store it */
rmi = camel_folder_summary_uid (summary, uid);
if (rmi) {
mi->old_flags = camel_message_info_flags (rmi);
camel_message_info_free (rmi);
- }*/
+ }
+
camel_folder_summary_insert (&s->summary, (CamelMessageInfo *)mi, FALSE);
+ camel_folder_summary_update_counts_by_flags (&s->summary, camel_message_info_flags (mi), FALSE);
return mi;
}
diff --git a/camel/providers/local/camel-local-summary.c b/camel/providers/local/camel-local-summary.c
index 7ad10f8..a5c7bca 100644
--- a/camel/providers/local/camel-local-summary.c
+++ b/camel/providers/local/camel-local-summary.c
@@ -522,7 +522,6 @@ local_summary_add (CamelLocalSummary *cls,
update_summary (s, (CamelMessageInfoBase *) mi, (CamelMessageInfoBase *) info);
mi->info.flags |= (camel_message_info_flags (info) & 0xffff);
- camel_folder_summary_update_flag_cache (s, mi->info.uid, mi->info.flags);
mi->info.size = camel_message_info_size (info);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]