/* NSDictionary+Contact.m - this file is part of SOGo * * Copyright (C) 2006 Inverse groupe conseil * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import "NSDictionary+Contact.h" @implementation NSDictionary (SOGoContact) - (void) _appendSingleVCardValue: (NSString *) value withFormat: (NSString *) format toVCard: (NSMutableString *) vCard { NSString *info; info = [self objectForKey: value]; if (info && [info length] > 0) [vCard appendFormat: format, info]; } - (void) _appendMultilineVCardValue: (NSString *) value withFormat: (NSString *) format toVCard: (NSMutableString *) vCard { NSString *info; info = [[self objectForKey: value] stringByReplacingString: @"\r\n" withString: @";"]; if (info && [info length] > 0) [vCard appendFormat: format, info]; } - (void) _appendArrayedVCardValues: (NSArray *) keys withFormat: (NSString *) format toVCard: (NSMutableString *) vCard { NSArray *values; unsigned int count, max; values = [self objectsForKeys: keys notFoundMarker: @""]; max = [values count]; while (count < max && [[values objectAtIndex: count] isEqualToString: @""]) count++; if (count < max) [vCard appendFormat: format, [values componentsJoinedByString: @";"]]; } - (NSString *) vcardContentFromSOGoContactRecord { NSMutableString *newVCard; newVCard = [NSMutableString new]; [newVCard autorelease]; [newVCard appendString: @"BEGIN:VCARD\r\n" "VERSION:3.0\r\n" "PRODID:-//OpenGroupware.org//LSAddress v5.3.85\r\n" "PROFILE:vCard\r\n"]; [self _appendSingleVCardValue: @"cn" withFormat: @"FN:%@\r\n" toVCard: newVCard]; [self _appendArrayedVCardValues: [NSArray arrayWithObjects: @"sn", @"givenName", nil] withFormat: @"N:%@;;;\r\n" toVCard: newVCard]; [self _appendSingleVCardValue: @"telephoneNumber" withFormat: @"TEL;TYPE=work,voice,pref:%@\r\n" toVCard: newVCard]; [self _appendSingleVCardValue: @"facsimileTelephoneNumber" withFormat: @"TEL;TYPE=work,fax:%@\r\n" toVCard: newVCard]; [self _appendSingleVCardValue: @"homeTelephoneNumber" withFormat: @"TEL;TYPE=home,voice:%@\r\n" toVCard: newVCard]; [self _appendSingleVCardValue: @"mobile" withFormat: @"TEL;TYPE=cell,voice:%@\r\n" toVCard: newVCard]; [self _appendArrayedVCardValues: [NSArray arrayWithObjects: @"l", @"departmentNumber", nil] withFormat: @"ORG:%@\r\n" toVCard: newVCard]; [self _appendMultilineVCardValue: @"postalAddress" withFormat: @"ADR:TYPE=work,postal:%@\r\n" toVCard: newVCard]; [self _appendMultilineVCardValue: @"homePostalAddress" withFormat: @"ADR:TYPE=home,postal:%@\r\n" toVCard: newVCard]; [self _appendSingleVCardValue: @"mail" withFormat: @"EMAIL;TYPE=internet,pref:%@\r\n" toVCard: newVCard]; [self _appendSingleVCardValue: @"labelledURI" withFormat: @"URL:%@\r\n" toVCard: newVCard]; [newVCard appendString: @"END:VCARD\r\n"]; return newVCard; } @end