From 8582b76160f03c2f4188f3f14873d346a28e18f5 Mon Sep 17 00:00:00 2001 From: wolfgang Date: Tue, 10 Apr 2007 20:44:24 +0000 Subject: [PATCH] git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1044 d1b88da0-ebda-0310-925b-ed51d893ca5b --- ChangeLog | 11 +++ OGoContentStore/OCSContactFieldExtractor.m | 90 +++++----------------- SoObjects/Contacts/SOGoContactGCSEntry.m | 2 +- 3 files changed, 32 insertions(+), 71 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3169fec9..60b5ef6e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2007-04-10 Wolfgang Sourdeau + + * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry + -vCard]): test the prefix of the card in a case-independent way. + + * OGoContentStore/OCSContactFieldExtractor.m + ([OCSContactFieldExtractor + -extractQuickFieldsFromContent:content]): we no longer accept + records in a format other than versit vCard so we can get rid of a + lot of code. + 2007-04-04 Wolfgang Sourdeau * UI/Contacts/UIxContactsListView.m ([UIxContactsListView diff --git a/OGoContentStore/OCSContactFieldExtractor.m b/OGoContentStore/OCSContactFieldExtractor.m index 5ca2024f..675ea7e8 100644 --- a/OGoContentStore/OCSContactFieldExtractor.m +++ b/OGoContentStore/OCSContactFieldExtractor.m @@ -19,29 +19,15 @@ 02111-1307, USA. */ -#include +#import +#import +#import "common.h" @interface OCSContactFieldExtractor : GCSFieldExtractor @end -#include -#include "common.h" - @implementation OCSContactFieldExtractor -static NSString *fieldNames[] = { - /* quickfield, vCard KVC path */ - @"givenName", @"n.given", - @"cn", @"fn.stringValue", - @"sn", @"n.family", - @"l", @"preferredAdr.locality", - @"mail", @"preferredEMail.stringValue", - @"o", @"org.orgnam", - @"ou", @"org.orgunit", - @"telephoneNumber", @"preferredTel.stringValue", - nil, nil -}; - - (NSMutableDictionary *) extractQuickFieldsFromVCard: (NGVCard *) vCard { NSMutableDictionary *fields; @@ -50,10 +36,7 @@ static NSString *fieldNames[] = { NSString *value; unsigned int max; - if (vCard == nil) - return nil; - - fields = [NSMutableDictionary dictionaryWithCapacity:16]; + fields = [NSMutableDictionary dictionaryWithCapacity: 16]; value = [vCard fn]; if (value) @@ -93,57 +76,24 @@ static NSString *fieldNames[] = { return fields; } -- (NSMutableDictionary *)extractQuickFieldsFromVCardString:(NSString *)_str { +- (NSMutableDictionary *) extractQuickFieldsFromContent: (NSString *) content +{ + NSMutableDictionary *fields; NGVCard *vCard; - - if ((vCard = [NGVCard parseSingleFromSource: _str]) == nil) { - [self errorWithFormat:@"Could not parse content as a vCard."]; - return nil; - } - - return [self extractQuickFieldsFromVCard: vCard]; -} -- (NSMutableDictionary *)extractQuickFieldsFromContent:(NSString *)_content { - NSMutableDictionary *fields; - NSDictionary *plist; - unsigned i; - - if ([_content length] == 0) - return nil; - - if ([_content hasPrefix:@"BEGIN:VCARD"]) - return [self extractQuickFieldsFromVCardString:_content]; - - // TODO: we want to support vcard storage in the future?! - - if ((plist = [_content propertyList]) == nil) { - [self logWithFormat:@"ERROR: could not parse property list content!"]; - return nil; - } - - if (![plist isKindOfClass:[NSDictionary class]]) { - [self logWithFormat:@"ERROR: parsed property list is not a dictionary!"]; - return nil; - } - - fields = [NSMutableDictionary dictionaryWithCapacity:16]; - - /* copy field values to quick record */ - for (i = 0; fieldNames[i] != nil; i += 2) { - NSString *fieldName, *sqlName; - id value; - - fieldName = fieldNames[i]; - sqlName = [fieldName lowercaseString]; /* actually pgsql doesn't care */ - - value = [plist objectForKey:fieldName]; - if ([value isNotNull]) - [fields setObject:value forKey:sqlName]; - else - [fields setObject:[NSNull null] forKey:sqlName]; - } - + fields = nil; + if ([content length] > 0 + && [[content uppercaseString] hasPrefix: @"BEGIN:VCARD"]) + { + vCard = [NGVCard parseSingleFromSource: content]; + if (vCard) + fields = [self extractQuickFieldsFromVCard: vCard]; + else + [self errorWithFormat: @"Could not parse content as a vCard."]; + } + else + [self errorWithFormat: @"Content is not a vCard"]; + return fields; } diff --git a/SoObjects/Contacts/SOGoContactGCSEntry.m b/SoObjects/Contacts/SOGoContactGCSEntry.m index 1dde518e..39aca0a4 100644 --- a/SoObjects/Contacts/SOGoContactGCSEntry.m +++ b/SoObjects/Contacts/SOGoContactGCSEntry.m @@ -54,7 +54,7 @@ if (!card) { contentStr = [self contentAsString]; - if ([contentStr hasPrefix:@"BEGIN:VCARD"]) + if ([[contentStr uppercaseString] hasPrefix:@"BEGIN:VCARD"]) card = [NGVCard parseSingleFromSource: contentStr]; else card = [NGVCard cardWithUid: [self nameInContainer]]; -- 2.39.5