[evolution-groupwise] Bug #664572 - Change e_cal_backend_notify_component* to use ECalComponent



commit 99543430a5074a5607499117ffd82899324e57ad
Author: Milan Crha <mcrha redhat com>
Date:   Thu Nov 24 12:37:26 2011 +0100

    Bug #664572 - Change e_cal_backend_notify_component* to use ECalComponent

 src/calendar/e-cal-backend-groupwise.c |  131 ++++++++++++++++----------------
 1 files changed, 67 insertions(+), 64 deletions(-)
---
diff --git a/src/calendar/e-cal-backend-groupwise.c b/src/calendar/e-cal-backend-groupwise.c
index ab40b61..656985e 100644
--- a/src/calendar/e-cal-backend-groupwise.c
+++ b/src/calendar/e-cal-backend-groupwise.c
@@ -361,12 +361,9 @@ populate_cache (ECalBackendGroupwise *cbgw)
 					notify_view_progress (E_CAL_BACKEND (cbgw), percent, _("Loading items"));
 
 				if (E_IS_CAL_COMPONENT (comp)) {
-					gchar *comp_str;
-
 					e_cal_component_commit_sequence (comp);
-					comp_str = e_cal_component_get_as_string (comp);
-					e_cal_backend_notify_object_created (E_CAL_BACKEND (cbgw), (const gchar *) comp_str);
-					g_free (comp_str);
+					e_cal_backend_notify_component_created (E_CAL_BACKEND (cbgw), comp);
+
 					put_component_to_store (cbgw, comp);
 					g_object_unref (comp);
 				}
@@ -504,7 +501,7 @@ get_deltas (gpointer handle)
 	for (; item_list != NULL; item_list = g_list_next (item_list)) {
 		EGwItem *item = NULL;
 		ECalComponent *modified_comp = NULL, *cache_comp = NULL;
-		gchar *cache_comp_str = NULL, *modif_comp_str, *rid = NULL;
+		gchar *rid = NULL;
 		icaltimetype *tt = NULL, *c_tt = NULL;
 		const gchar *uid;
 
@@ -528,20 +525,14 @@ get_deltas (gpointer handle)
 			e_cal_component_commit_sequence (cache_comp);
 		}
 
-		if (!c_tt || icaltime_compare (*tt, *c_tt) == 1)
-		{
-			modif_comp_str = e_cal_component_get_as_string (modified_comp);
+		if (!c_tt || icaltime_compare (*tt, *c_tt) == 1) {
 
 			if (cache_comp) {
-				cache_comp_str = e_cal_component_get_as_string (cache_comp);
-				e_cal_backend_notify_object_modified (E_CAL_BACKEND (cbgw), cache_comp_str, modif_comp_str);
+				e_cal_backend_notify_component_modified (E_CAL_BACKEND (cbgw), cache_comp, modified_comp);
 			} else {
-				e_cal_backend_notify_object_created (E_CAL_BACKEND (cbgw), modif_comp_str);
+				e_cal_backend_notify_component_created (E_CAL_BACKEND (cbgw), modified_comp);
 			}
 
-			g_free (modif_comp_str);
-			g_free (cache_comp_str);
-			cache_comp_str = NULL;
 			put_component_to_store (cbgw, modified_comp);
 		}
 
@@ -681,16 +672,13 @@ get_deltas (gpointer handle)
 
 		icalcomp = e_cal_component_get_icalcomponent (comp);
 		if (kind == icalcomponent_isa (icalcomp)) {
-			gchar *comp_str = NULL;
 			ECalComponentId *id = e_cal_component_get_id (comp);
 
-			comp_str = e_cal_component_get_as_string (comp);
-			e_cal_backend_notify_object_removed (E_CAL_BACKEND (cbgw),
-					id, comp_str, NULL);
+			e_cal_backend_notify_component_removed (E_CAL_BACKEND (cbgw),
+					id, comp, NULL);
 			e_cal_backend_store_remove_component (store, id->uid, id->rid);
 
 			e_cal_component_free_id (id);
-			g_free (comp_str);
 		}
 		g_object_unref (comp);
 	}
@@ -704,7 +692,6 @@ get_deltas (gpointer handle)
 		for (l = item_list; l != NULL; l = l->next) {
 			ECalComponent *comp = NULL;
 			EGwItem *item = NULL;
-			gchar *tmp = NULL;
 
 			item = (EGwItem *) l->data;
 			comp = e_gw_item_to_cal_component (item, cbgw);
@@ -712,9 +699,7 @@ get_deltas (gpointer handle)
 				e_cal_component_commit_sequence (comp);
 				put_component_to_store (cbgw, comp);
 				if (kind == icalcomponent_isa (e_cal_component_get_icalcomponent (comp))) {
-					tmp = e_cal_component_get_as_string (comp);
-					e_cal_backend_notify_object_created (E_CAL_BACKEND (cbgw), tmp);
-					g_free (tmp);
+					e_cal_backend_notify_component_created (E_CAL_BACKEND (cbgw), comp);
 				}
 				g_object_unref (comp);
 			}
@@ -1672,26 +1657,52 @@ static void
 e_cal_backend_groupwise_start_view (ECalBackend *backend,
                                     EDataCalView *query)
 {
-	GSList *objects = NULL;
+	ECalBackendGroupwise *cbgw;
+	ECalBackendGroupwisePrivate *priv;
+	ECalBackendSExp *cbsexp;
+	GSList *components, *l;
+	gboolean search_needed = TRUE;
+	time_t occur_start = -1, occur_end = -1;
+	gboolean prunning_by_time;
+	const gchar *sexp;
 	GError *err = NULL;
 
-	e_cal_backend_groupwise_get_object_list (E_CAL_BACKEND_SYNC (backend), NULL, NULL,
-							  e_data_cal_view_get_text (query), &objects, &err);
-	if (err) {
+	cbgw = E_CAL_BACKEND_GROUPWISE (backend);
+	priv = cbgw->priv;
+
+	cbsexp = e_data_cal_view_get_object_sexp (query);
+	if (!cbsexp) {
+		err = EDC_ERROR (InvalidQuery);
 		e_data_cal_view_notify_complete (query, err);
 		g_error_free (err);
 		return;
 	}
 
-	/* notify listeners of all objects */
-	if (objects) {
-		e_data_cal_view_notify_objects_added (query, objects);
+	sexp = e_data_cal_view_get_text (query);
+	if (!sexp || !*sexp || g_str_equal (sexp, "#t"))
+		search_needed = FALSE;
+
+	prunning_by_time = e_cal_backend_sexp_evaluate_occur_times (cbsexp,
+									    &occur_start,
+									    &occur_end);
+	components = prunning_by_time ?
+		e_cal_backend_store_get_components_occuring_in_range (priv->store, occur_start, occur_end)
+		: e_cal_backend_store_get_components (priv->store);
+
+	for (l = components; l != NULL; l = l->next) {
+		ECalComponent *comp = E_CAL_COMPONENT (l->data);
 
-		/* free memory */
-		g_slist_foreach (objects, (GFunc) g_free, NULL);
-		g_slist_free (objects);
+		if (e_cal_backend_get_kind (E_CAL_BACKEND (backend)) ==
+		    icalcomponent_isa (e_cal_component_get_icalcomponent (comp))) {
+			if ((!search_needed) ||
+			    (e_cal_backend_sexp_match_comp (cbsexp, comp, E_CAL_BACKEND (backend)))) {
+				e_data_cal_view_notify_components_added_1 (query, comp);
+			}
+		}
 	}
 
+	g_slist_free_full (components, g_object_unref);
+
 	e_data_cal_view_notify_complete (query, NULL);
 }
 
@@ -1749,7 +1760,7 @@ e_cal_backend_groupwise_internal_get_timezone (ECalBackend *backend,
 static EGwConnectionStatus
 update_from_server (ECalBackendGroupwise *cbgw,
                     GSList *uid_list,
-                    icalcomponent **new_icalcomp,
+                    ECalComponent **new_ecalcomp,
                     ECalComponent *comp)
 {
 	EGwConnectionStatus stat;
@@ -1787,11 +1798,11 @@ update_from_server (ECalBackendGroupwise *cbgw,
 		put_component_to_store (cbgw, e_cal_comp);
 
 		if (i == 0) {
-			*new_icalcomp = icalcomponent_new_clone (e_cal_component_get_icalcomponent (e_cal_comp));
+			*new_ecalcomp = e_cal_component_clone (e_cal_comp);
 		}
 
 		if (i != 0) {
-			e_cal_backend_notify_component_created (E_CAL_BACKEND (cbgw), e_cal_component_get_icalcomponent (e_cal_comp));
+			e_cal_backend_notify_component_created (E_CAL_BACKEND (cbgw), e_cal_comp);
 		}
 
 		g_object_unref (e_cal_comp);
@@ -1807,7 +1818,7 @@ e_cal_backend_groupwise_create_object (ECalBackendSync *backend,
                                        GCancellable *cancellable,
                                        const gchar *in_calobj,
                                        gchar **uid,
-                                       icalcomponent **new_icalcomp,
+                                       ECalComponent **new_ecalcomp,
                                        GError **error)
 {
 	ECalBackendGroupwise *cbgw;
@@ -1822,7 +1833,7 @@ e_cal_backend_groupwise_create_object (ECalBackendSync *backend,
 
 	e_return_data_cal_error_if_fail (E_IS_CAL_BACKEND_GROUPWISE (cbgw), InvalidArg);
 	e_return_data_cal_error_if_fail (in_calobj != NULL, InvalidArg);
-	e_return_data_cal_error_if_fail (new_icalcomp != NULL, InvalidArg);
+	e_return_data_cal_error_if_fail (new_ecalcomp != NULL, InvalidArg);
 
 	if (!e_backend_get_online (E_BACKEND (backend))) {
 		in_offline (cbgw);
@@ -1876,7 +1887,7 @@ e_cal_backend_groupwise_create_object (ECalBackendSync *backend,
 		}
 
 		/* Get the item back from server to update the last-modified time */
-		status = update_from_server (cbgw, uid_list, new_icalcomp, comp);
+		status = update_from_server (cbgw, uid_list, new_ecalcomp, comp);
 		if (status != E_GW_CONNECTION_STATUS_OK) {
 			g_propagate_error (error, EDC_ERROR_FAILED_STATUS (OtherError, status));
 			return;
@@ -1932,8 +1943,8 @@ e_cal_backend_groupwise_modify_object (ECalBackendSync *backend,
                                        GCancellable *cancellable,
                                        const gchar *calobj,
                                        CalObjModType mod,
-                                       icalcomponent **old_icalcomp,
-                                       icalcomponent **new_icalcomp,
+                                       ECalComponent **old_ecalcomp,
+                                       ECalComponent **new_ecalcomp,
                                        GError **error)
 {
 	ECalBackendGroupwise *cbgw;
@@ -1945,7 +1956,7 @@ e_cal_backend_groupwise_modify_object (ECalBackendSync *backend,
 	const gchar *uid = NULL;
 	gchar *rid = NULL;
 
-	*old_icalcomp = NULL;
+	*old_ecalcomp = NULL;
 	cbgw = E_CAL_BACKEND_GROUPWISE (backend);
 	priv = cbgw->priv;
 
@@ -2005,7 +2016,7 @@ e_cal_backend_groupwise_modify_object (ECalBackendSync *backend,
 				}
 
 				put_component_to_store (cbgw, comp);
-				*new_icalcomp = icalcomponent_new_clone (e_cal_component_get_icalcomponent (comp));
+				*new_ecalcomp = e_cal_component_clone (comp);
 				break;
 			}
 
@@ -2064,7 +2075,7 @@ e_cal_backend_groupwise_modify_object (ECalBackendSync *backend,
 		put_component_to_store (cbgw, comp);
 	}
 
-	*old_icalcomp = icalcomponent_new_clone (e_cal_component_get_icalcomponent (cache_comp));
+	*old_ecalcomp = e_cal_component_clone (cache_comp);
 	g_object_unref (cache_comp);
 	g_object_unref (comp);
 	g_free (rid);
@@ -2099,8 +2110,8 @@ e_cal_backend_groupwise_remove_object (ECalBackendSync *backend,
                                        const gchar *uid,
                                        const gchar *rid,
                                        CalObjModType mod,
-                                       icalcomponent **old_icalcomp,
-                                       icalcomponent **new_icalcomp,
+                                       ECalComponent **old_ecalcomp,
+                                       ECalComponent **new_ecalcomp,
                                        GError **perror)
 {
 	ECalBackendGroupwise *cbgw;
@@ -2112,7 +2123,7 @@ e_cal_backend_groupwise_remove_object (ECalBackendSync *backend,
 	cbgw = E_CAL_BACKEND_GROUPWISE (backend);
 	priv = cbgw->priv;
 
-	*old_icalcomp = *new_icalcomp = NULL;
+	*old_ecalcomp = *new_ecalcomp = NULL;
 
 	/* if online, remove the item from the server */
 	if (e_backend_get_online (E_BACKEND (backend))) {
@@ -2153,8 +2164,8 @@ e_cal_backend_groupwise_remove_object (ECalBackendSync *backend,
 					g_propagate_error (perror, EDC_ERROR (ObjectNotFound));
 					return;
 				}
-				*new_icalcomp = NULL;
-				*old_icalcomp = icalparser_parse_string (calobj);
+				*new_ecalcomp = NULL;
+				*old_ecalcomp = e_cal_component_new_from_icalcomponent (icalparser_parse_string (calobj));
 				g_free (calobj);
 				return;
 			} else {
@@ -2197,9 +2208,7 @@ e_cal_backend_groupwise_remove_object (ECalBackendSync *backend,
 					e_cal_backend_store_remove_component (priv->store, id->uid,
 							id->rid);
 					if (!id->rid || !g_str_equal (id->rid, rid)) {
-						gchar *comp_str = e_cal_component_get_as_string (comp);
-						e_cal_backend_notify_object_removed (E_CAL_BACKEND (cbgw), id, comp_str, NULL);
-						g_free (comp_str);
+						e_cal_backend_notify_component_removed (E_CAL_BACKEND (cbgw), id, comp, NULL);
 					}
 					e_cal_component_free_id (id);
 
@@ -2209,8 +2218,8 @@ e_cal_backend_groupwise_remove_object (ECalBackendSync *backend,
 				/* Setting NULL would trigger another signal.
 				 * We do not set the *object to NULL  */
 				g_slist_free (comp_list);
-				*old_icalcomp = icalparser_parse_string (calobj);
-				*new_icalcomp = NULL;
+				*old_ecalcomp = e_cal_component_new_from_icalcomponent (icalparser_parse_string (calobj));
+				*new_ecalcomp = NULL;
 				g_free (calobj);
 				return;
 			} else {
@@ -2423,28 +2432,22 @@ receive_object (ECalBackendGroupwise *cbgw,
 				ECalComponentId *id = e_cal_component_get_id (component);
 
 				if (e_cal_backend_store_remove_component (priv->store, id->uid, id->rid)) {
-					gchar *comp_str = e_cal_component_get_as_string (component);
-					e_cal_backend_notify_object_removed (E_CAL_BACKEND (cbgw), id, comp_str, NULL);
-					g_free (comp_str);
+					e_cal_backend_notify_component_removed (E_CAL_BACKEND (cbgw), id, component, NULL);
 				}
 
 				e_cal_component_free_id (id);
 			} else {
-				gchar *comp_str = NULL;
 				ECalComponentTransparency transp;
 
 				change_status (component, pstatus, e_gw_connection_get_user_email (priv->cnc));
 				e_cal_component_get_transparency (comp, &transp);
 				e_cal_component_set_transparency (component, transp);
 				put_component_to_store (cbgw, comp);
-				comp_str = e_cal_component_get_as_string (component);
 
 				if (found)
-					e_cal_backend_notify_object_modified (E_CAL_BACKEND (cbgw), comp_str, comp_str);
+					e_cal_backend_notify_component_modified (E_CAL_BACKEND (cbgw), component, component);
 				else
-					e_cal_backend_notify_object_created (E_CAL_BACKEND (cbgw), comp_str);
-
-				g_free (comp_str);
+					e_cal_backend_notify_component_created (E_CAL_BACKEND (cbgw), component);
 			}
 		}
 



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