+2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+
+ * 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 <wsourdeau@inverse.ca>
* UI/Contacts/UIxContactsListView.m ([UIxContactsListView
02111-1307, USA.
*/
-#include <GDLContentStore/GCSFieldExtractor.h>
+#import <GDLContentStore/GCSFieldExtractor.h>
+#import <NGCards/NGVCard.h>
+#import "common.h"
@interface OCSContactFieldExtractor : GCSFieldExtractor
@end
-#include <NGCards/NGVCard.h>
-#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;
NSString *value;
unsigned int max;
- if (vCard == nil)
- return nil;
-
- fields = [NSMutableDictionary dictionaryWithCapacity:16];
+ fields = [NSMutableDictionary dictionaryWithCapacity: 16];
value = [vCard fn];
if (value)
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;
}