diff --git a/ChangeLog b/ChangeLog index 5605e0b8b..3b2f47d0d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2009-06-19 Wolfgang Sourdeau + * SoObjects/SOGo/SOGoGCSFolder.m (-davSyncCollection:): deleted + records are always ignored when fetching fields from the quick + table, we thus need to make two separate queries. + * SoObjects/Appointments/SOGoAppointmentFolder.m (-davResourceType): return the "schedule-inbox" and "schedule-inbox" caldav types when the user is the owner and the diff --git a/SoObjects/SOGo/SOGoGCSFolder.m b/SoObjects/SOGo/SOGoGCSFolder.m index ff6b0353b..746517a83 100644 --- a/SoObjects/SOGo/SOGoGCSFolder.m +++ b/SoObjects/SOGo/SOGoGCSFolder.m @@ -844,6 +844,28 @@ static NSArray *childRecordFields = nil; return sqlFieldsTable; } +/* make this a public method? */ +- (NSArray *) _fetchFields: (NSArray *) fields + withQualifier: (EOQualifier *) qualifier + ignoreDeleted: (BOOL) ignoreDeleted +{ + GCSFolder *folder; + EOFetchSpecification *fetchSpec; + + folder = [self ocsFolder]; + + if (qualifier) + fetchSpec = [EOFetchSpecification + fetchSpecificationWithEntityName: [folder folderName] + qualifier: qualifier + sortOrderings: nil]; + else + fetchSpec = nil; + + return [folder fetchFields: fields fetchSpecification: fetchSpec + ignoreDeleted: ignoreDeleted]; +} + - (NSArray *) _fetchSyncTokenFields: (NSDictionary *) properties matchingSyncToken: (int) syncToken { @@ -852,31 +874,35 @@ static NSArray *childRecordFields = nil; - synctoken and return "DAV:valid-sync-token" as error if needed - properties - database errors */ - NSMutableArray *fields; + NSMutableArray *fields, *mRecords; + NSArray *records; EOQualifier *qualifier; - GCSFolder *folder; - EOFetchSpecification *syncSpec; fields = [NSMutableArray arrayWithObjects: @"c_name", @"c_component", - @"c_creationdate", @"c_lastmodified", @"c_deleted", - nil]; + @"c_creationdate", @"c_lastmodified", nil]; [fields addObjectsFromArray: [properties allValues]]; if (syncToken) - qualifier - = [EOQualifier qualifierWithQualifierFormat: - [NSString stringWithFormat: @"c_lastmodified > %d", - syncToken]]; + { + qualifier = [EOQualifier qualifierWithQualifierFormat: + @"c_lastmodified > %d", syncToken]; + mRecords = [NSMutableArray arrayWithArray: [self _fetchFields: fields + withQualifier: qualifier + ignoreDeleted: YES]]; + qualifier = [EOQualifier qualifierWithQualifierFormat: + @"c_lastmodified > %d and c_deleted == 1", + syncToken]; + fields = [NSMutableArray arrayWithObjects: @"c_name", @"c_deleted", nil]; + [mRecords addObjectsFromArray: [self _fetchFields: fields + withQualifier: qualifier + ignoreDeleted: NO]]; + records = mRecords; + } else - qualifier = nil; + records = [self _fetchFields: fields withQualifier: nil + ignoreDeleted: YES]; - folder = [self ocsFolder]; - syncSpec = [EOFetchSpecification - fetchSpecificationWithEntityName: [folder folderName] - qualifier: qualifier - sortOrderings: nil]; - return [folder fetchFields: fields fetchSpecification: syncSpec - ignoreDeleted: (!syncToken)]; + return records; } /* These methods are the optimal ones to generate propstats for DAV reports, @@ -978,6 +1004,7 @@ static NSArray *childRecordFields = nil; else statusIndex = 1; +// NSLog (@"webdav sync: %@ (%@)", href, status[statusIndex]); [children addObject: davElementWithContent (@"status", XMLNS_WEBDAV, status[statusIndex])]; if (statusIndex)