diff options
author | Srinivasa Ragavan <sragavan@novell.com> | 2009-01-29 15:22:01 +0000 |
---|---|---|
committer | Srinivasa Ragavan <sragavan@src.gnome.org> | 2009-01-29 15:22:01 +0000 |
commit | 0a26da55c895edb331e2264706520941b98a9e8d (patch) | |
tree | 1eeca95df660b4fc3aed002503402bdee718bbee | |
parent | dac5564eb9d04f72d35cfecb182ead577798b8b1 (diff) | |
download | evolution-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/ChangeLog | 11 | ||||
-rw-r--r-- | camel/camel-folder-summary.c | 4 | ||||
-rw-r--r-- | camel/camel-vee-folder.c | 113 |
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); } |