summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrinivasa Ragavan <sragavan@novell.com>2009-01-29 15:22:01 +0000
committerSrinivasa Ragavan <sragavan@src.gnome.org>2009-01-29 15:22:01 +0000
commit0a26da55c895edb331e2264706520941b98a9e8d (patch)
tree1eeca95df660b4fc3aed002503402bdee718bbee
parentdac5564eb9d04f72d35cfecb182ead577798b8b1 (diff)
downloadevolution-data-server-0a26da55c895edb331e2264706520941b98a9e8d.tar.gz
** Fix for bug #568561
2009-01-29 Srinivasa Ragavan <sragavan@novell.com> ** Fix for bug #568561 * camel-folder-summary.c: (camel_folder_summary_reload_from_db), (camel_folder_summary_class_init): * camel-vee-folder.c: (camel_vee_folder_add_folder), (camel_vee_folder_remove_folder), (vee_sync), (camel_vee_folder_init), (vee_folder_stop_folder), (camel_vee_folder_finalise): svn path=/branches/gnome-2-24/; revision=9986
-rw-r--r--camel/ChangeLog11
-rw-r--r--camel/camel-folder-summary.c4
-rw-r--r--camel/camel-vee-folder.c113
3 files changed, 15 insertions, 113 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index 55d96b716..a8b8a488b 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,3 +1,14 @@
+2009-01-29 Srinivasa Ragavan <sragavan@novell.com>
+
+ ** Fix for bug #568561
+
+ * camel-folder-summary.c: (camel_folder_summary_reload_from_db),
+ (camel_folder_summary_class_init):
+ * camel-vee-folder.c: (camel_vee_folder_add_folder),
+ (camel_vee_folder_remove_folder), (vee_sync),
+ (camel_vee_folder_init), (vee_folder_stop_folder),
+ (camel_vee_folder_finalise):
+
2009-01-28 Sankar P <psankar@novell.com>
** Part of Fix for bug bnc #390198
diff --git a/camel/camel-folder-summary.c b/camel/camel-folder-summary.c
index 6c3e418a9..55682f691 100644
--- a/camel/camel-folder-summary.c
+++ b/camel/camel-folder-summary.c
@@ -918,8 +918,6 @@ camel_folder_summary_reload_from_db (CamelFolderSummary *s, CamelException *ex)
if (!g_getenv("CAMEL_FREE_INFOS") && !s->timeout_handle)
s->timeout_handle = g_timeout_add_seconds (SUMMARY_CACHE_DROP, (GSourceFunc) cfs_try_release_memory, s);
- d(printf("Triggering summary_reloaded on %s %p\n", s->folder->full_name, s));
- camel_object_trigger_event(s, "summary_reloaded", s);
return ret == 0 ? 0 : -1;
}
@@ -4872,6 +4870,4 @@ camel_folder_summary_class_init (CamelFolderSummaryClass *klass)
klass->info_set_flags = info_set_flags;
- camel_object_class_add_event(camel_object_class, "summary_reloaded", NULL);
-
}
diff --git a/camel/camel-vee-folder.c b/camel/camel-vee-folder.c
index 26a1fa06d..70030c486 100644
--- a/camel/camel-vee-folder.c
+++ b/camel/camel-vee-folder.c
@@ -83,8 +83,6 @@ static void folder_changed(CamelFolder *sub, CamelFolderChangeInfo *changes, Cam
static void subfolder_deleted(CamelFolder *f, void *event_data, CamelVeeFolder *vf);
static void folder_renamed(CamelFolder *f, const char *old, CamelVeeFolder *vf);
-static void summary_reloaded(CamelObject *o, void *event_data, void *data);
-
static CamelFolderClass *camel_vee_folder_parent;
CamelType
@@ -220,19 +218,12 @@ camel_vee_folder_add_folder(CamelVeeFolder *vf, CamelFolder *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);
((CamelVeeFolderClass *)((CamelObject *)vf)->klass)->add_folder(vf, sub);
- if (cache)
- summary_reloaded((CamelObject *) sub->summary, (void *)sub->summary, (void *)vf);
}
/**
@@ -265,10 +256,7 @@ camel_vee_folder_remove_folder(CamelVeeFolder *vf, CamelFolder *sub)
camel_object_unhook_event((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc) folder_changed, vf);
camel_object_unhook_event((CamelObject *)sub, "deleted", (CamelObjectEventHookFunc) subfolder_deleted, vf);
camel_object_unhook_event((CamelObject *)sub, "renamed", (CamelObjectEventHookFunc) folder_renamed, vf);
- if (GPOINTER_TO_INT(g_hash_table_lookup (vf->loaded, sub))) {
- g_hash_table_remove (vf->loaded, sub);
- camel_object_unhook_event((CamelObject *)sub->summary, "summary_reloaded", (CamelObjectEventHookFunc) summary_reloaded, vf);
- }
+
p->folders = g_list_remove(p->folders, sub);
@@ -604,6 +592,7 @@ vee_sync(CamelFolder *folder, gboolean expunge, CamelException *ex)
node = node->next;
}
+
#if 0
/* Seems like we are doing something wrong with this, as folder_changed happens after this, the counts are misleading.
* Anyways we do a force sync on exit, it should be all fine.
@@ -1891,96 +1880,6 @@ vee_thaw(CamelFolder *folder)
CAMEL_FOLDER_CLASS (camel_vee_folder_parent)->thaw(folder);
}
-
-struct _folder_flags_msg {
- CamelSessionThreadMsg msg;
- CamelFolder *sub;
- CamelVeeFolder *vf;
-};
-
-static void
-folder_load_flags(CamelSession *session, CamelSessionThreadMsg *msg)
-{
- struct _folder_flags_msg *m = (struct _folder_flags_msg *)msg;
- CamelFolder *sub = m->sub;
- CamelFolder *folder = (CamelFolder *)m->vf;
- GPtrArray *array;
- char *shash, hash[8];
- int i;
-
- 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);
- for (i=0; i<array->len; i++) {
- if (strncmp(array->pdata[i], shash, 8) == 0) {
- /* We have got a vuid for this sub folder.*/
- CamelVeeMessageInfo *vinfo;
- CamelMessageInfo *info;
- char *uid;
- vinfo = (CamelVeeMessageInfo *) camel_folder_summary_uid (folder->summary, (char *)array->pdata[i]);
- if (!vinfo) /* What else we can do ?*/
- continue;
- uid = ((char *)array->pdata[i])+8;
- info = camel_folder_summary_uid (sub->summary, uid);
- if (!info) {
- camel_message_info_free((CamelMessageInfo *)vinfo);
- continue;
- }
-
- vinfo->old_flags = camel_message_info_flags (info);
- camel_message_info_free((CamelMessageInfo *)info);
- camel_message_info_free((CamelMessageInfo *)vinfo);
- }
- }
- camel_folder_free_summary (folder, array);
- g_free(shash);
-}
-
-static void
-folder_load_flags_free(CamelSession *session, CamelSessionThreadMsg *msg)
-{
- struct _folder_flags_msg *m = (struct _folder_flags_msg *)msg;
-
- camel_object_unref((CamelObject *)m->vf);
- camel_object_unref((CamelObject *)m->sub);
-}
-
-static CamelSessionThreadOps folder_flags_ops = {
- folder_load_flags,
- folder_load_flags_free,
-};
-
-static void
-summary_reloaded(CamelObject *o, void *event_data, void *data)
-{
- CamelFolderSummary *summary = event_data;
- CamelVeeFolder *vf = (CamelVeeFolder *)data;
- struct _CamelVeeFolderPrivate *p = _PRIVATE(vf);
- struct _folder_flags_msg *m;
- CamelSession *session = ((CamelService *)((CamelFolder *)vf)->parent_store)->session;
-
- if (p->destroyed)
- return;
-
- /* Kick off a thread to reload flags from the summary */
- if (GPOINTER_TO_INT(g_hash_table_lookup (vf->loaded, summary->folder))) {
- g_hash_table_remove (vf->loaded, summary->folder);
- camel_object_unhook_event((CamelObject *)o, "summary_reloaded", (CamelObjectEventHookFunc) summary_reloaded, data);
- }
-
- /*
- m = camel_session_thread_msg_new(session, &folder_flags_ops, sizeof(*m));
- m->sub = summary->folder;
- camel_object_ref((CamelObject *)summary->folder);
- m->vf = vf;
- camel_object_ref((CamelObject *)vf);
- camel_session_thread_queue(session, &m->msg, 0);
- */
-}
-
/* vfolder base implementaitons */
static void
vee_add_folder(CamelVeeFolder *vf, CamelFolder *sub)
@@ -2197,7 +2096,8 @@ camel_vee_folder_init (CamelVeeFolder *obj)
obj->changes = camel_folder_change_info_new();
obj->search = camel_folder_search_new();
obj->hashes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
- obj->loaded = g_hash_table_new (g_direct_hash, g_direct_equal);
+ /* Loaded is no longer used.*/
+ obj->loaded = NULL;
obj->deleted = FALSE;
p->summary_lock = g_mutex_new();
p->subfolder_lock = g_mutex_new();
@@ -2240,10 +2140,6 @@ vee_folder_stop_folder(CamelVeeFolder *vf, CamelFolder *sub)
camel_object_unhook_event((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc) folder_changed, vf);
camel_object_unhook_event((CamelObject *)sub, "deleted", (CamelObjectEventHookFunc) subfolder_deleted, vf);
camel_object_unhook_event((CamelObject *)sub, "renamed", (CamelObjectEventHookFunc) folder_renamed, vf);
- if (GPOINTER_TO_INT(g_hash_table_lookup (vf->loaded, sub))) {
- g_hash_table_remove (vf->loaded, sub);
- camel_object_unhook_event((CamelObject *)sub->summary, "summary_reloaded", (CamelObjectEventHookFunc) summary_reloaded, vf);
- }
p->folders = g_list_remove(p->folders, sub);
@@ -2352,6 +2248,5 @@ camel_vee_folder_finalise (CamelObject *obj)
g_mutex_free(p->subfolder_lock);
g_mutex_free(p->changed_lock);
g_hash_table_destroy (vf->hashes);
- g_hash_table_destroy (vf->loaded);
g_free(p);
}