Fix for the some of the recurrence issues and bug #273057 [exchange calendar]
pchenthill <[email protected]>
| Newsgroups | gmane.comp.gnome.evolution.patches |
|---|---|
| Message-ID | <[email protected]> |
Hi,
Have attached the patch. The patch fixes the following issues,
1) If more than one instance is modified, all others except the latest
detached instance are removed.
2) 1) Holds good while removing a paticular instance.
3) Accepting a instance of a recurring meeting with no master object
does not create the object on the server.
4) Fixes a crash in discard_alarms.
5) the bug #273057.
thanks, Chenthill.
_______________________________________________
Evolution-patches mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/evolution-patches
273057.diff
(text/x-patch, 21.9 KB)
? .patch_recur_connector.diff.swo ? 273057.diff ? 327305.diff ? 330663.diff ? a ? aa ? aaa ? bak ? cal_loading.diff ? cal_loading1.diff ? core.10695 ? core.14292 ? core.14760 ? core.17665 ? core.28663 ? core.6673 ? dd ? depcomp ? evolution-exchange-zip ? patch_bak ? patch_cal.diff ? patch_recur_connector.diff ? patch_recur_updated.diff ? temp ? tmp ? tt ? calendar/.e-cal-backend-exchange-tasks.c.swo ? calendar/a ? calendar/aa ? calendar/patch_backup ? calendar/temp ? calendar/zz ? camel/aa Index: ChangeLog =================================================================== RCS file: /cvs/gnome/evolution-exchange/ChangeLog,v retrieving revision 1.471 diff -u -p -r1.471 ChangeLog --- ChangeLog 27 Feb 2006 14:57:09 -0000 1.471 +++ ChangeLog 1 Mar 2006 17:59:10 -0000 @@ -1,3 +1,29 @@ +2006-03-01 Chenthill Palanisamy <[email protected]> + + Fixes #273057 and problems in modification and deletion + of instances, Accepting exception instances from mail. + * calendar/e-cal-backend-exchange-calendar.c: + (create_object): Use update_x_properties to remove the X_MOD_PROPS. Server + would not allow us to create the object if they are present. + (update_x_properties): Add the properties to the list and later remove + them all, so that all of them are removed. + (modify_object_with_href): Added a parameter to pass the right rid while removing + an instance. Set the start and end times of the master object and remove the recurrence + id while modifying all instances. Add all the instance to the VCalendar component, else + the excluded ones would be removed from the server. + (modify_object): + (remove_object) + (book_resource): Pass the additional parameter as NULL. + (receive_objects): Set the CalObjMod property correctly when updates + for meetings are accepted. + (discard_alarm): Free the component inside only when its needed. + * calendar/e-cal-backend-exchange-tasks.c: (modify_task_object): + * calendar/e-cal-backend-exchange.h: + * calendar/e-cal-backend-exchange.c: + (e_cal_backend_exchange_add_object): Do not set exception dates. + (e_cal_backend_exchange_modify_object): Added a boolean variable to indicate + the removal of an instance. + 2006-02-27 Sushma Rai <[email protected]> * configure.in : Bumped the version to 2.5.92 Index: calendar/e-cal-backend-exchange-calendar.c =================================================================== RCS file: /cvs/gnome/evolution-exchange/calendar/e-cal-backend-exchange-calendar.c,v retrieving revision 1.52 diff -u -p -r1.52 e-cal-backend-exchange-calendar.c --- calendar/e-cal-backend-exchange-calendar.c 27 Feb 2006 10:53:42 -0000 1.52 +++ calendar/e-cal-backend-exchange-calendar.c 1 Mar 2006 17:59:10 -0000 @@ -55,13 +55,14 @@ static ECalBackendExchange *parent_class #define d(x) -static ECalBackendSyncStatus modify_object_with_href (ECalBackendSync *backend, EDataCal *cal, const char *calobj, CalObjModType mod, char **old_object, const char *href); +static ECalBackendSyncStatus modify_object_with_href (ECalBackendSync *backend, EDataCal *cal, const char *calobj, CalObjModType mod, char **old_object, char **new_object, const char *href, const char *rid_to_remove); static icalproperty *find_attendee_prop (icalcomponent *ical_comp, const char *address); static gboolean check_owner_partstatus_for_declined (ECalBackendSync *backend, icalcomponent *icalcomp); gboolean check_for_send_options (icalcomponent *icalcomp, E2kProperties *props); +static void update_x_properties (ECalBackendExchange *cbex, ECalComponent *comp); static void add_timezones_from_comp (ECalBackendExchange *cbex, icalcomponent *icalcomp) @@ -692,8 +693,8 @@ create_object (ECalBackendSync *backend, icalcomponent_kind kind; icalproperty *icalprop; const char *temp_comp_uid; - char *busystatus, *insttype, *allday, *importance, *lastmod; - struct icaltimetype current, startt; + char *lastmod; + struct icaltimetype current; char *location, *ru_header; ECalComponent *comp; char *body, *body_crlf, *msg; @@ -752,51 +753,6 @@ create_object (ECalBackendSync *backend, /* Send options */ send_options = check_for_send_options (icalcomp, props); - /*set X-MICROSOFT-CDO properties*/ - busystatus = "BUSY"; - icalprop = icalcomponent_get_first_property (icalcomp, - ICAL_TRANSP_PROPERTY); - if (icalprop) { - icalproperty_transp transp_val = icalproperty_get_transp (icalprop); - if (transp_val == ICAL_TRANSP_TRANSPARENT) - busystatus = "FREE"; - } - - if (e_cal_util_component_has_recurrences (icalcomp)) - insttype = "1"; - else - insttype = "0"; - - startt = icalcomponent_get_dtstart (icalcomp); - if(icaltime_is_date (startt)) - allday = "TRUE"; - else - allday = "FALSE"; - - importance = "1"; - icalprop = icalcomponent_get_first_property (icalcomp, - ICAL_PRIORITY_PROPERTY); - if (icalprop) { - int prio = icalproperty_get_priority (icalprop); - importance = prio < 5 ? "2" : prio > 5 ? "0" : "1"; - } - - icalprop = icalproperty_new_x (busystatus); - icalproperty_set_x_name (icalprop, "X-MICROSOFT-CDO-BUSYSTATUS"); - icalcomponent_add_property (icalcomp, icalprop); - - icalprop = icalproperty_new_x (insttype); - icalproperty_set_x_name (icalprop, "X-MICROSOFT-CDO-INSTTYPE"); - icalcomponent_add_property (icalcomp, icalprop); - - icalprop = icalproperty_new_x (allday); - icalproperty_set_x_name (icalprop, "X-MICROSOFT-CDO-ALLDAYEVENT"); - icalcomponent_add_property (icalcomp, icalprop); - - icalprop = icalproperty_new_x (importance); - icalproperty_set_x_name (icalprop, "X-MICROSOFT-CDO-IMPORTANCE"); - icalcomponent_add_property (icalcomp, icalprop); - /*set created and last_modified*/ current = icaltime_from_timet (time (NULL), 0); icalcomponent_add_property (icalcomp, icalproperty_new_created (current)); @@ -818,6 +774,8 @@ create_object (ECalBackendSync *backend, attach_body = build_msg (E_CAL_BACKEND_EXCHANGE (cbexc), comp, summary, &boundary); attach_body_crlf = e_cal_backend_exchange_lf_to_crlf (attach_body); } + + update_x_properties (E_CAL_BACKEND_EXCHANGE (cbexc), comp); cbdata = g_new0 (struct _cb_data, 1); cbdata->be = backend; @@ -944,6 +902,7 @@ update_x_properties (ECalBackendExchange int *priority; const char *busystatus, *insttype, *allday, *importance; int prop_set = 0; + GSList *props = NULL, *l = NULL; e_cal_component_get_transparency (comp, &transp); if (transp == E_CAL_COMPONENT_TRANSP_TRANSPARENT) @@ -998,12 +957,22 @@ update_x_properties (ECalBackendExchange icalproperty_set_x (icalprop, importance); prop_set |= IMPORTANCE; } else if (!strcmp (x_name, "X-MICROSOFT-CDO-MODPROPS")) { - icalcomponent_remove_property (icalcomp, icalprop); + props = g_slist_append (props, icalprop); } icalprop = icalcomponent_get_next_property (icalcomp, ICAL_X_PROPERTY); } + /* Remove all CDO-MODPROPS properties, else server would return error for the operation + performed */ + for (l = props; l != NULL; l = l->next) { + icalprop = l->data; + icalcomponent_remove_property (icalcomp, icalprop); + icalproperty_free (icalprop); + } + + g_slist_free (props); + /* Now set the ones that weren't set. */ if (!(prop_set & BUSYSTATUS)) { icalprop = icalproperty_new_x (busystatus); @@ -1030,8 +999,6 @@ update_x_properties (ECalBackendExchange } } - - static ECalBackendSyncStatus modify_object (ECalBackendSync *backend, EDataCal *cal, const char *calobj, CalObjModType mod, @@ -1039,13 +1006,13 @@ modify_object (ECalBackendSync *backend, { d(printf ("ecbexc_modify_object(%p, %p, %d, %s)", backend, cal, mod, *old_object ? *old_object : NULL)); - return modify_object_with_href (backend, cal, calobj, mod, old_object, NULL); + return modify_object_with_href (backend, cal, calobj, mod, old_object, new_object, NULL, NULL); } static ECalBackendSyncStatus modify_object_with_href (ECalBackendSync *backend, EDataCal *cal, const char *calobj, CalObjModType mod, - char **old_object, const char *href) + char **old_object, char **new_object, const char *href, const char *rid_to_remove) { ECalBackendExchangeCalendar *cbexc; ECalBackendExchangeComponent *ecomp; @@ -1068,6 +1035,9 @@ modify_object_with_href (ECalBackendSync gboolean send_options; E2kContext *ctx; E2kProperties *props = e2k_properties_new (); + GList *l = NULL; + struct icaltimetype inst_rid; + gboolean remove = FALSE; cbexc = E_CAL_BACKEND_EXCHANGE_CALENDAR (backend); @@ -1079,6 +1049,9 @@ modify_object_with_href (ECalBackendSync return GNOME_Evolution_Calendar_InvalidObject; } + if (rid_to_remove) + remove = TRUE; + icalcomp = icalparser_parse_string (calobj); if (!icalcomp) return GNOME_Evolution_Calendar_InvalidObject; @@ -1090,8 +1063,12 @@ modify_object_with_href (ECalBackendSync return GNOME_Evolution_Calendar_InvalidObject; } comp_uid = icalcomponent_get_uid (icalcomp); - if (mod == CALOBJ_MOD_THIS) + + if (!remove) key_rid = icalcomponent_get_recurrenceid (icalcomp); + else + key_rid = icaltime_from_string (rid_to_remove); + ecomp = get_exchange_comp (E_CAL_BACKEND_EXCHANGE (cbexc), comp_uid); @@ -1104,7 +1081,47 @@ modify_object_with_href (ECalBackendSync summary = icalcomponent_get_summary (icalcomp); if (!summary) summary = ""; + + /* If rid is present and mod is ALL we need to set the times of the master object */ + if ((mod == CALOBJ_MOD_ALL) && e_cal_util_component_has_recurrences (icalcomp) && !icaltime_is_null_time (key_rid)) { + icaltimetype start; + + start = icalcomponent_get_dtstart (icalcomp); + + if (!key_rid.zone) + key_rid.zone = start.zone; + + /* This means its a instance generated from master object. So replace + the dates stored dates from the master object */ + + if (icaltime_compare_date_only (start, key_rid) == 0) { + icaltimetype m_end, m_start, end; + icalproperty *prop; + + m_start = icalcomponent_get_dtstart (ecomp->icomp); + m_end = icalcomponent_get_dtend (ecomp->icomp); + end = icalcomponent_get_dtend (icalcomp); + if (icaltime_compare (start, key_rid) != 0) { + icaltimetype end = icalcomponent_get_dtend (icalcomp); + + m_start.hour = start.hour; + m_start.minute = start.minute; + m_start.second = start.second; + + m_end.hour = end.hour; + m_end.minute = end.minute; + m_end.second = end.second; + } + icalcomponent_set_dtstart (icalcomp, m_start); + icalcomponent_set_dtend (icalcomp, m_end); + + prop = icalcomponent_get_first_property (icalcomp, ICAL_RECURRENCEID_PROPERTY); + icalcomponent_remove_property (icalcomp, prop); + icalproperty_free (prop); + } + } + updated_ecomp = e_cal_component_new (); e_cal_component_set_icalcomponent (updated_ecomp, icalcomp); @@ -1239,10 +1256,45 @@ modify_object_with_href (ECalBackendSync g_free (real_comp_str); icalcomponent_foreach_tzid (real_icalcomp, add_timezone_cb, cbdata); - if (mod == CALOBJ_MOD_THIS) { - icalcomponent_add_component (cbdata->vcal_comp, icalcomponent_new_clone (ecomp->icomp)); + + /* Master object should be added first */ + if (!remove && mod == CALOBJ_MOD_ALL) + icalcomponent_add_component (cbdata->vcal_comp, real_icalcomp); + + + /* We need to add all the instances to the VCalendar component while sending to + the server, so that we don't lose any detached instances */ + if (ecomp->icomp && mod == CALOBJ_MOD_THIS) { + icalcomponent_add_component (cbdata->vcal_comp, icalcomponent_new_clone (ecomp->icomp)); + } + + for (l = ecomp->instances; l != NULL; l = l->next) { + icalcomponent *icomp = l->data; + + inst_rid = icalcomponent_get_recurrenceid (icomp); + if (icaltime_compare (inst_rid, key_rid) == 0) { + cached_ecomp = e_cal_component_new (); + + e_cal_component_set_icalcomponent (cached_ecomp, + icalcomponent_new_clone (l->data)); + if (remove) { + icalcomponent_free (l->data); + l = g_list_remove_link (ecomp->instances, l); + if (!l) + break; + } + + continue; + } else { + icalcomponent_add_component (cbdata->vcal_comp, icalcomponent_new_clone (icomp)); + } } - icalcomponent_add_component (cbdata->vcal_comp, real_icalcomp); + + if (!cached_ecomp && remove) + *new_object = g_strdup (icalcomponent_as_ical_string (icalcomp)); + + if (!remove && mod == CALOBJ_MOD_THIS) + icalcomponent_add_component (cbdata->vcal_comp, real_icalcomp); body = icalcomponent_as_ical_string (cbdata->vcal_comp); body_crlf = e_cal_backend_exchange_lf_to_crlf (body); @@ -1293,31 +1345,11 @@ modify_object_with_href (ECalBackendSync g_free (from); g_free (body_crlf); - if (mod == CALOBJ_MOD_THIS) { - GList *l; - struct icaltimetype inst_rid, key_rid; - - for (l = ecomp->instances; l ; l = l->next) { - inst_rid = icalcomponent_get_recurrenceid (l->data); - if (icaltime_compare (inst_rid, key_rid) == 0) { - cached_ecomp = e_cal_component_new (); - e_cal_component_set_icalcomponent (cached_ecomp, - icalcomponent_new_clone (l->data)); - break; - } - } - - } else { - cached_ecomp = e_cal_component_new (); - e_cal_component_set_icalcomponent (cached_ecomp, icalcomponent_new_clone (ecomp->icomp)); - } if (cached_ecomp) { e_cal_component_commit_sequence (cached_ecomp); *old_object = e_cal_component_get_as_string (cached_ecomp); - } else { - *old_object = e_cal_component_get_as_string (updated_ecomp); } - + ctx = exchange_account_get_context (E_CAL_BACKEND_EXCHANGE (cbexc)->account); /* PUT the iCal object in the Exchange server */ @@ -1334,8 +1366,11 @@ modify_object_with_href (ECalBackendSync if (E2K_HTTP_STATUS_IS_SUCCESSFUL (http_status)) e_cal_backend_exchange_modify_object (E_CAL_BACKEND_EXCHANGE (cbexc), - real_icalcomp, mod); + e_cal_component_get_icalcomponent (real_ecomp), mod, remove); + if (!remove) + *new_object = e_cal_component_get_as_string (real_ecomp); + g_free (msg); g_object_unref (real_ecomp); g_object_unref (updated_ecomp); @@ -1360,7 +1395,7 @@ remove_object (ECalBackendSync *backend, E2kHTTPStatus status; E2kContext *ctx; ECalComponent *comp; - char *calobj, *obj; + char *calobj, *obj = NULL; struct icaltimetype time_rid; ECalBackendSyncStatus ebs_status; @@ -1388,18 +1423,26 @@ remove_object (ECalBackendSync *backend, e_cal_component_commit_sequence (comp); *old_object = e_cal_component_get_as_string (comp); } - - if (mod == CALOBJ_MOD_THIS && rid && *rid) { + + /*TODO How handle multiple detached intances with no master object ?*/ + if (mod == CALOBJ_MOD_THIS && rid && *rid && ecomp->icomp) { + char *new_object = NULL; + /*remove a single instance of a recurring event and modify */ time_rid = icaltime_from_string (rid); e_cal_util_remove_instances (ecomp->icomp, time_rid, mod); calobj = (char *) icalcomponent_as_ical_string (ecomp->icomp); - ebs_status = modify_object (backend, cal, calobj, mod, &obj, NULL); + ebs_status = modify_object_with_href (backend, cal, calobj, mod, &obj, &new_object, NULL, rid); g_object_unref (comp); if (ebs_status != GNOME_Evolution_Calendar_Success) goto error; + if (obj) { + g_free (*old_object); + *old_object = obj; + } - g_free (obj); + g_free (new_object); + return ebs_status; } g_object_unref (comp); @@ -1483,22 +1526,28 @@ receive_objects (ECalBackendSync *backen old_object, NULL); } else { struct icaltimetype time_rid; + char *new_object = NULL; + CalObjModType mod = CALOBJ_MOD_ALL; if (rid) { time_rid = icaltime_from_string (rid); e_cal_util_remove_instances (ecomp->icomp, time_rid, CALOBJ_MOD_THIS); } + if (e_cal_util_component_is_instance (subcomp)) + mod = CALOBJ_MOD_THIS; + icalobj = (char *) icalcomponent_as_ical_string (subcomp); status = modify_object_with_href (backend, cal, icalobj, - CALOBJ_MOD_THIS, - &old_object, NULL); + mod, + &old_object, &new_object, NULL, NULL); d(printf ("Modify this particular instance : %s\n", rid)); d(printf ("Modify object : %s\n", icalobj)); if (status != GNOME_Evolution_Calendar_Success) goto error; e_cal_backend_notify_object_modified (E_CAL_BACKEND (backend), - old_object, icalobj); + old_object, new_object); + g_free (new_object); d(printf ("Notify that the new object after modication is : %s\n", icalobj)); } @@ -1584,7 +1633,7 @@ book_resource (ECalBackendExchange *cbex const char *access_prop = NULL, *meeting_prop = NULL, *cal_uid = NULL; gboolean bookable; char *top_uri = NULL, *cal_uri = NULL, *returned_uid = NULL; - char *startz, *endz, *href = NULL, *old_object = NULL, *calobj = NULL; + char *startz, *endz, *href = NULL, *old_object = NULL, *calobj = NULL, *new_object = NULL; E2kRestriction *rn; int nresult; ECalBackendExchangeBookingResult retval = E_CAL_BACKEND_EXCHANGE_BOOKING_ERROR; @@ -1765,11 +1814,11 @@ book_resource (ECalBackendExchange *cbex /* status = e_cal_component_update (comp, method, FALSE ); */ if (ecomp) { /* Use the PUT method to create the meeting item in the resource's calendar. */ - status = modify_object_with_href (E_CAL_BACKEND_SYNC (cbex), cal, calobj, CALOBJ_MOD_THIS, &old_object, href); + status = modify_object_with_href (E_CAL_BACKEND_SYNC (cbex), cal, calobj, CALOBJ_MOD_THIS, &old_object, &new_object, href, NULL); if (status == GNOME_Evolution_Calendar_Success) { /* Need this to update the participation status of the resource in the organizer's calendar. */ - status = modify_object_with_href (E_CAL_BACKEND_SYNC (cbex), cal, calobj, CALOBJ_MOD_THIS, &old_object, NULL); + status = modify_object_with_href (E_CAL_BACKEND_SYNC (cbex), cal, calobj, CALOBJ_MOD_THIS, &old_object, &new_object, NULL, NULL); } else { retval = E_CAL_BACKEND_EXCHANGE_BOOKING_ERROR; goto cleanup; @@ -1779,6 +1828,7 @@ book_resource (ECalBackendExchange *cbex retval = E_CAL_BACKEND_EXCHANGE_BOOKING_OK; } g_free (old_object); + g_free (new_object); } else { status = create_object (E_CAL_BACKEND_SYNC (cbex), cal, &calobj, &returned_uid); if (status == GNOME_Evolution_Calendar_Success) { @@ -1988,7 +2038,7 @@ discard_alarm (ECalBackendSync *backend, ECalBackendExchangeComponent *ecbexcomp; ECalComponent *ecomp; char *ecomp_str; - icalcomponent *icalcomp; + icalcomponent *icalcomp = NULL; g_return_val_if_fail (E_IS_CAL_BACKEND_EXCHANGE_CALENDAR (backend), GNOME_Evolution_Calendar_InvalidObject); @@ -2019,13 +2069,13 @@ discard_alarm (ECalBackendSync *backend, ecomp_str = e_cal_component_get_as_string (ecomp); icalcomp = icalparser_parse_string (ecomp_str); if (!e_cal_backend_exchange_modify_object ( cbex, - icalcomp, CALOBJ_MOD_ALL)) { + icalcomp, CALOBJ_MOD_ALL, FALSE)) { result = GNOME_Evolution_Calendar_OtherError; } + icalcomponent_free (icalcomp); g_free (ecomp_str); } g_object_unref (ecomp); - icalcomponent_free (icalcomp); return result; } Index: calendar/e-cal-backend-exchange-tasks.c =================================================================== RCS file: /cvs/gnome/evolution-exchange/calendar/e-cal-backend-exchange-tasks.c,v retrieving revision 1.22 diff -u -p -r1.22 e-cal-backend-exchange-tasks.c --- calendar/e-cal-backend-exchange-tasks.c 27 Feb 2006 10:53:42 -0000 1.22 +++ calendar/e-cal-backend-exchange-tasks.c 1 Mar 2006 17:59:11 -0000 @@ -1240,7 +1240,7 @@ modify_task_object (ECalBackendSync *bac status = put_body(new_comp, e2kctx, NULL, ecalbexcomp->href, from_name, from_addr, attach_body_crlf, boundary, NULL); if (E2K_HTTP_STATUS_IS_SUCCESSFUL (status)) - e_cal_backend_exchange_modify_object (ecalbex, icalcomp, mod); + e_cal_backend_exchange_modify_object (ecalbex, icalcomp, mod, FALSE); } icalcomponent_free (icalcomp); return GNOME_Evolution_Calendar_Success; Index: calendar/e-cal-backend-exchange.c =================================================================== RCS file: /cvs/gnome/evolution-exchange/calendar/e-cal-backend-exchange.c,v retrieving revision 1.62 diff -u -p -r1.62 e-cal-backend-exchange.c --- calendar/e-cal-backend-exchange.c 27 Feb 2006 10:53:42 -0000 1.62 +++ calendar/e-cal-backend-exchange.c 1 Mar 2006 17:59:11 -0000 @@ -601,8 +601,6 @@ e_cal_backend_exchange_add_object (ECalB ecomp->instances = g_list_prepend (ecomp->instances, icalcomponent_new_clone (comp)); - if (ecomp->icomp) - e_cal_util_remove_instances (ecomp->icomp, rid, CALOBJ_MOD_THIS); } } else ecomp->icomp = icalcomponent_new_clone (comp); @@ -647,7 +645,8 @@ discard_detached_instance (ECalBackendEx gboolean e_cal_backend_exchange_modify_object (ECalBackendExchange *cbex, icalcomponent *comp, - CalObjModType mod) + CalObjModType mod, + gboolean discard_detached) { ECalBackendExchangeComponent *ecomp; const char *uid; @@ -665,11 +664,12 @@ e_cal_backend_exchange_modify_object (EC if (!ecomp) return FALSE; - if (mod == CALOBJ_MOD_ALL || icaltime_is_null_time (rid)) { + if (mod == CALOBJ_MOD_ALL || icaltime_is_null_time (rid) || discard_detached) { icalcomponent_free (ecomp->icomp); ecomp->icomp = icalcomponent_new_clone (comp); + if (discard_detached && !icaltime_is_null_time (rid)) + discard_detached_instance (ecomp, rid); } else { - discard_detached_instance (ecomp, rid); ecomp->instances = g_list_prepend (ecomp->instances, icalcomponent_new_clone (comp)); } Index: calendar/e-cal-backend-exchange.h =================================================================== RCS file: /cvs/gnome/evolution-exchange/calendar/e-cal-backend-exchange.h,v retrieving revision 1.12 diff -u -p -r1.12 e-cal-backend-exchange.h --- calendar/e-cal-backend-exchange.h 17 Aug 2005 07:17:49 -0000 1.12 +++ calendar/e-cal-backend-exchange.h 1 Mar 2006 17:59:11 -0000 @@ -65,7 +65,8 @@ gboolean e_cal_backend_exchange_add_obj icalcomponent *comp); gboolean e_cal_backend_exchange_modify_object (ECalBackendExchange *cbex, icalcomponent *comp, - CalObjModType mod); + CalObjModType mod, + gboolean remove_detached); gboolean e_cal_backend_exchange_remove_object (ECalBackendExchange *cbex, const char *uid);
eds.diff
(text/x-patch, 2.9 KB)
Index: ChangeLog =================================================================== RCS file: /cvs/gnome/evolution-data-server/calendar/ChangeLog,v retrieving revision 1.565 diff -u -p -r1.565 ChangeLog --- ChangeLog 28 Feb 2006 12:16:32 -0000 1.565 +++ ChangeLog 1 Mar 2006 17:57:31 -0000 @@ -1,3 +1,12 @@ +2006-03-01 Chenthill Palanisamy <[email protected]> + + * libedata-cal/e-cal-backend-sync.c: + (_e_cal_backend_remove_object): Do not get the object + backend again. Use the provided new and old object. + * libedata-cal/e-cal-backend.c: + (e_cal_backend_notify_object_removed): Need not check + if the query matches for removing an item. + 2006-02-28 Chenthill Palanisamy <[email protected]> Fixes #332726 Index: libedata-cal/e-cal-backend-sync.c =================================================================== RCS file: /cvs/gnome/evolution-data-server/calendar/libedata-cal/e-cal-backend-sync.c,v retrieving revision 1.18 diff -u -p -r1.18 e-cal-backend-sync.c --- libedata-cal/e-cal-backend-sync.c 11 Oct 2005 07:56:20 -0000 1.18 +++ libedata-cal/e-cal-backend-sync.c 1 Mar 2006 17:57:33 -0000 @@ -719,22 +719,18 @@ _e_cal_backend_remove_object (ECalBacken if (status == GNOME_Evolution_Calendar_Success) { char *calobj = NULL; - if (e_cal_backend_sync_get_object (E_CAL_BACKEND_SYNC (backend), cal, uid, NULL, &calobj) - == GNOME_Evolution_Calendar_Success) { - e_data_cal_notify_object_modified (cal, status, old_object, calobj); - g_free (calobj); - } else { - ECalComponentId *id = g_new0 (ECalComponentId, 1); - id->uid = g_strdup (uid); - - if (mod == CALOBJ_MOD_THIS) - id->rid = g_strdup (rid); + ECalComponentId *id = g_new0 (ECalComponentId, 1); + id->uid = g_strdup (uid); + if (mod == CALOBJ_MOD_THIS) + id->rid = g_strdup (rid); + + if (!object) e_data_cal_notify_object_removed (cal, status, id, old_object, object); + else + e_data_cal_notify_object_modified (cal, status, old_object, object); - e_cal_component_free_id (id); - - } + e_cal_component_free_id (id); } else e_data_cal_notify_object_removed (cal, status, NULL, old_object, object); Index: libedata-cal/e-cal-backend.c =================================================================== RCS file: /cvs/gnome/evolution-data-server/calendar/libedata-cal/e-cal-backend.c,v retrieving revision 1.23 diff -u -p -r1.23 e-cal-backend.c --- libedata-cal/e-cal-backend.c 11 Oct 2005 07:56:21 -0000 1.23 +++ libedata-cal/e-cal-backend.c 1 Mar 2006 17:57:34 -0000 @@ -1319,8 +1319,7 @@ e_cal_backend_notify_object_removed (ECa if (object == NULL) { /* if object == NULL, it means the object has been completely removed from the backend */ - if (e_data_cal_view_object_matches (query, old_object)) - e_data_cal_view_notify_objects_removed_1 (query, id); + e_data_cal_view_notify_objects_removed_1 (query, id); } else match_query_and_notify (query, old_object, object);