Re: [evolution-patches] Re: (groupwise)fix for bug 72302 - deleted emails not syncing up
- From: Parthasarathi Susarla <sparthasarathi novell com>
- To: Harish Krishnaswamy <kharish novell com>
- Cc: ep <evolution-patches lists ximian com>
- Subject: Re: [evolution-patches] Re: (groupwise)fix for bug 72302 - deleted emails not syncing up
- Date: Thu, 07 Apr 2005 18:59:41 +0530
Hi,
Find the modified patch attached.It has the following changes
1. Frees all the memory used
2. Use GSList instead of GList
Thanks,
partha
On Thu, 2005-04-07 at 15:59 +0530, Harish Krishnaswamy wrote:
> hi,
>
> The patch looks fine. You may want to look at the following points
> before committing, though.
> > status = e_gw_connection_get_quick_messages (cnc, container_id,
> > "id",
> > + &t_str, "All", NULL, NULL, -1,
> > &slist) ;
>
> * slist and its contents are being leaked here.
>
> * You are converting slist from a GSList to GList while passing it to
> your internal function - gw_update_all_items. I think you can avoid this
> by using GSList as it is. I do not see what we may gain from this
> conversion.
>
> * The comment appears to be wrong.
> > /*item_list : List of ids from the server*/
> item_list stores the ids in the summary. temp_list stores the ids from
> the summary.
>
> -Harish
> _______________________________________________
> evolution-patches mailing list
> evolution-patches lists ximian com
> http://lists.ximian.com/mailman/listinfo/evolution-patches
Index: camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.46
diff -u -p -r1.46 camel-groupwise-folder.c
--- camel-groupwise-folder.c 5 Apr 2005 06:08:24 -0000 1.46
+++ camel-groupwise-folder.c 6 Apr 2005 09:21:42 -0000
@@ -75,6 +75,7 @@ static void groupwise_transfer_messages_
static int gw_getv (CamelObject *object, CamelException *ex, CamelArgGetV *args) ;
void convert_to_calendar (EGwItem *item, char **str, int *len) ;
static void convert_to_task (EGwItem *item, char **str, int *len);
+static void gw_update_all_items ( CamelFolder *folder, GList *item_list, CamelException *ex);
#define d(x) x
@@ -730,6 +731,23 @@ groupwise_refresh_info(CamelFolder *fold
}
gw_update_summary (folder, list, ex) ;
+
+ t_str = g_strdup (time_string);
+ status = e_gw_connection_get_quick_messages (cnc, container_id, "id",
+ &t_str, "All", NULL, NULL, -1, &slist) ;
+ g_free (t_str), t_str = NULL;
+ if (status != E_GW_CONNECTION_STATUS_OK) {
+ camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Authentication failed"));
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
+ g_free (container_id) ;
+ return ;
+ }
+
+ for ( sl = slist ; sl != NULL; sl = sl->next) {
+ list = g_list_append (list, sl->data) ;
+ }
+
+ gw_update_all_items (folder, list, ex);
end:
CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
@@ -861,6 +879,44 @@ gw_update_summary ( CamelFolder *folder,
} */
camel_folder_change_info_free (changes) ;
g_ptr_array_free (msg, TRUE) ;
+}
+
+static void
+gw_update_all_items ( CamelFolder *folder, GList *item_list, CamelException *ex)
+{
+ CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER (folder);
+ GPtrArray *summary = camel_folder_get_summary (folder);
+ int index = 0;
+ GList *item_ids = NULL, *temp_list = NULL, *l = NULL;
+ CamelFolderChangeInfo *changes = NULL ;
+
+ changes = camel_folder_change_info_new () ;
+ /*item_ids : List of ids from the summary*/
+ while (index < summary->len) {
+ CamelMessageInfo *info = g_ptr_array_index (summary, index);
+ item_ids = g_list_append (item_ids, info->uid);
+ index ++;
+ }
+ l = item_ids;
+ camel_folder_free_summary (folder, summary);
+
+ /*item_list : List of ids from the server*/
+ for ( ; item_list != NULL ; item_list = g_list_next (item_list) )
+ temp_list = g_list_append (temp_list, (const char *)item_list->data);
+
+ for (; item_ids != NULL ; item_ids = g_list_next (item_ids)) {
+ GList *temp = NULL;
+ temp = g_list_find_custom (temp_list, (const char *)item_ids->data, (GCompareFunc) strcmp);
+ if (!temp) {
+ camel_folder_summary_remove_uid (folder->summary, (const char *)item_ids->data) ;
+ camel_data_cache_remove(gw_folder->cache, "cache", (const char *)item_ids->data, ex);
+ camel_folder_change_info_remove_uid(changes, (const char *)item_ids->data);
+ }
+ }
+ camel_object_trigger_event (folder, "folder_changed", changes) ;
+
+ g_list_free (l);
+ g_list_free (temp_list);
}
static void
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/ChangeLog,v
retrieving revision 1.45
diff -u -p -r1.45 ChangeLog
--- ChangeLog 5 Apr 2005 06:08:24 -0000 1.45
+++ ChangeLog 7 Apr 2005 05:51:58 -0000
@@ -1,3 +1,12 @@
+2005-04-07 Parthasarathi Susarla <sparthasarathi novell com>
+
+ * camel-groupwise-folder.c:
+ (groupwise_refresh_info): get the ids of all items
+ in a folder from the server.
+ (gw_update_all_items): update summary with items
+ that have been deleted from the server.
+ Fixes bug **72302 **74381 **72303
+
2005-04-05 Parthasarathi Susarla <sparthasarathi novell com>
* camel-groupwise-folder.c: (groupwise_refresh_info):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]