From cafc68d11f481b0978e03130a50549252660b365 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 10 Apr 2007 20:39:00 +0000 Subject: [PATCH] Monotone-Parent: f804bb16907aea71d5d796ed9fbcb17689826e71 Monotone-Revision: 75edf160eabb9019f1da0e81ecc9323bf007c389 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-04-10T20:39:00 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 8 ++ OGoContentStore/OCSContactFieldExtractor.m | 92 +++++----------------- 2 files changed, 29 insertions(+), 71 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3169fec90..a2638278c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-04-10 Wolfgang Sourdeau + + * 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 5ca2024fd..675ea7e8d 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 { - 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 *) 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]; - } - + NGVCard *vCard; + + 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; }