From 2f56bb43be0cf6e1552b81471e0a4b978f327a6d Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 22 Feb 2017 11:35:07 -0500 Subject: [PATCH] (fix) keep UID during MOVE --- .../Appointments/SOGoCalendarComponent.m | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/SoObjects/Appointments/SOGoCalendarComponent.m b/SoObjects/Appointments/SOGoCalendarComponent.m index f2225dbb5..3fd7e3360 100644 --- a/SoObjects/Appointments/SOGoCalendarComponent.m +++ b/SoObjects/Appointments/SOGoCalendarComponent.m @@ -1237,12 +1237,31 @@ - (NSException *) moveToFolder: (SOGoGCSFolder *) newFolder { + SOGoCalendarComponent *newComponent; NSException *ex; + id o; - ex = [self copyToFolder: newFolder]; + // Lookup to see if the event exists in the target calendar. During a MOVE, we do + // keep the ID of the event intact. + o = [newFolder lookupName: [self nameInContainer] + inContext: context + acquire: NO]; - if (!ex) - ex = [self delete]; + if ([o isKindOfClass: [NSException class]]) + { + newComponent = [[self class] objectWithName: [self nameInContainer] + inContainer: newFolder]; + + ex = [newComponent saveCalendar: [self calendar: NO secure: NO]]; + + if (!ex) + ex = [self delete]; + } + else + { + ex = [NSException exceptionWithHTTPStatus: 409 + reason: @"Target exists - MOVE disallowed."]; + } return ex; }