diff --git a/ChangeLog b/ChangeLog index 627cb1bff..3aedecfb7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2008-03-07 Wolfgang Sourdeau + * OGoContentStore/OCSContactFieldExtractor.m + ([OCSContactFieldExtractor -extractQuickFieldsFromVList:vList]): + new method to handle extraction of quick information from the + VLIST components. I.e.: the display name of the card. + * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -isValidContentName:name]): moved method from SOGoAppointmentFolder's isValidAppointmentName. diff --git a/OGoContentStore/OCSContactFieldExtractor.m b/OGoContentStore/OCSContactFieldExtractor.m index b52b567e8..24fb4246c 100644 --- a/OGoContentStore/OCSContactFieldExtractor.m +++ b/OGoContentStore/OCSContactFieldExtractor.m @@ -25,6 +25,7 @@ #import #import +#import @interface OCSContactFieldExtractor : GCSFieldExtractor @end @@ -75,6 +76,22 @@ [fields setObject: [adr value: 3] forKey: @"c_l"]; value = [[vCard uniqueChildWithTag: @"X-AIM"] value: 0]; [fields setObject: value forKey: @"c_screenname"]; + [fields setObject: @"vcard" forKey: @"c_component"]; + + return fields; +} + +- (NSMutableDictionary *) extractQuickFieldsFromVList: (NGVList *) vList +{ + NSMutableDictionary *fields; + NSString *value; + + fields = [NSMutableDictionary dictionaryWithCapacity: 1]; + + value = [vList fn]; + if (value) + [fields setObject: value forKey: @"c_cn"]; + [fields setObject: @"vlist" forKey: @"c_component"]; return fields; } @@ -83,19 +100,34 @@ { NSMutableDictionary *fields; NGVCard *vCard; + NGVList *vList; + NSString *upperContent; fields = nil; - if ([content length] > 0 - && [[content uppercaseString] hasPrefix: @"BEGIN:VCARD"]) + if ([content length] > 0) { - vCard = [NGVCard parseSingleFromSource: content]; - if (vCard) - fields = [self extractQuickFieldsFromVCard: vCard]; + upperContent = [content uppercaseString]; + if ([upperContent hasPrefix: @"BEGIN:VCARD"]) + { + vCard = [NGVCard parseSingleFromSource: content]; + if (vCard) + fields = [self extractQuickFieldsFromVCard: vCard]; + else + [self errorWithFormat: @"Could not parse VCARD content."]; + } + else if ([upperContent hasPrefix: @"BEGIN:VLIST"]) + { + vList = [NGVList parseSingleFromSource: content]; + if (vList) + fields = [self extractQuickFieldsFromVList: vList]; + else + [self errorWithFormat: @"Could not parse VLIST content."]; + } else - [self errorWithFormat: @"Could not parse content as a vCard."]; + [self errorWithFormat: @"Content is unknown."]; } else - [self errorWithFormat: @"Content is not a vCard"]; + [self errorWithFormat: @"Content is empty."]; return fields; } diff --git a/OGoContentStore/contact-oracle.ocs b/OGoContentStore/contact-oracle.ocs index 1174d649a..f3539c289 100644 --- a/OGoContentStore/contact-oracle.ocs +++ b/OGoContentStore/contact-oracle.ocs @@ -54,5 +54,10 @@ sqlType = "VARCHAR2(256)"; allowsNull = YES; }, + { + columnName = c_component; + sqlType = "VARCHAR2(10)"; + allowsNull = NO; + }, ); } diff --git a/OGoContentStore/contact.ocs b/OGoContentStore/contact.ocs index d51c6e704..dd4653179 100644 --- a/OGoContentStore/contact.ocs +++ b/OGoContentStore/contact.ocs @@ -54,5 +54,10 @@ sqlType = "VARCHAR(256)"; allowsNull = YES; }, + { + columnName = c_component; + sqlType = "VARCHAR(10)"; + allowsNull = NO; + }, ); }