From 68990cbe0e021d3158f53a859d054d08eadf4250 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 24 Oct 2011 20:45:05 +0000 Subject: [PATCH] Monotone-Parent: ed625914479265cad78fb3a15cd5f9e1e8c0a849 Monotone-Revision: d87756b39fc2fd188457307a1436fbf2bff7cce9 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-10-24T20:45:05 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 3 + OpenChange/GNUmakefile | 1 + OpenChange/MAPIStoreContactsAttachment.h | 41 ++++++ OpenChange/MAPIStoreContactsAttachment.m | 156 +++++++++++++++++++++++ 4 files changed, 201 insertions(+) create mode 100644 OpenChange/MAPIStoreContactsAttachment.h create mode 100644 OpenChange/MAPIStoreContactsAttachment.m diff --git a/ChangeLog b/ChangeLog index 61f0f7063..f184adca3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2011-10-24 Wolfgang Sourdeau + * OpenChange/MAPIStoreContactsAttachment.[hm]: new class module + for handling contact "attachments", that is, contact pictures. + * OpenChange/plreader.m (PLReaderDumpPListFile): ignore "error" if the returned property list object is not nil, since "error" might still be set with GNUstep. diff --git a/OpenChange/GNUmakefile b/OpenChange/GNUmakefile index f128a6c47..39d012e6f 100644 --- a/OpenChange/GNUmakefile +++ b/OpenChange/GNUmakefile @@ -70,6 +70,7 @@ $(SOGOBACKEND)_OBJC_FILES += \ MAPIStoreCalendarMessageTable.m \ MAPIStoreRecurrenceUtils.m \ \ + MAPIStoreContactsAttachment.m \ MAPIStoreContactsContext.m \ MAPIStoreContactsFolder.m \ MAPIStoreContactsMessage.m \ diff --git a/OpenChange/MAPIStoreContactsAttachment.h b/OpenChange/MAPIStoreContactsAttachment.h new file mode 100644 index 000000000..b8f0d16e3 --- /dev/null +++ b/OpenChange/MAPIStoreContactsAttachment.h @@ -0,0 +1,41 @@ +/* MAPIStoreContactsAttachment.h - this file is part of SOGo + * + * Copyright (C) 2011 Inverse inc + * + * 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 3, 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. + */ + +#ifndef MAPISTORECONTACTSATTACHMENT_H +#define MAPISTORECONTACTSATTACHMENT_H + +#import "MAPIStoreAttachment.h" + +@class NSData; +@class NGVCardPhoto; + +@interface MAPIStoreContactsAttachment : MAPIStoreAttachment +{ + NGVCardPhoto *photo; + NSData *photoData; +} + +- (void) setPhoto: (NGVCardPhoto *) newPhoto; + +@end + +#endif /* MAPISTORECONTACTSATTACHMENT_H */ diff --git a/OpenChange/MAPIStoreContactsAttachment.m b/OpenChange/MAPIStoreContactsAttachment.m new file mode 100644 index 000000000..983c25618 --- /dev/null +++ b/OpenChange/MAPIStoreContactsAttachment.m @@ -0,0 +1,156 @@ +/* MAPIStoreContactsAttachment.m - this file is part of SOGo + * + * Copyright (C) 2011 Inverse inc + * + * 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 3, 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 +#import + +#import "MAPIStoreTypes.h" +#import "NSData+MAPIStore.h" +#import "NSDate+MAPIStore.h" +#import "NSObject+MAPIStore.h" +#import "NSString+MAPIStore.h" + +#import "MAPIStoreContactsAttachment.h" + +#include + +extern NSTimeZone *utcTZ; + +/* TODO: handle URL pictures via PidTagAttachMethod = ref ? */ + +@implementation MAPIStoreContactsAttachment + +- (id) init +{ + if ((self = [super init])) + { + photo = nil; + photoData = nil; + } + + return self; +} + +- (void) dealloc +{ + [photo release]; + [photoData release]; + [super dealloc]; +} + +- (void) setPhoto: (NGVCardPhoto *) newPhoto +{ + ASSIGN (photo, newPhoto); +} + +- (NSString *) fileExtension +{ + NSString *type, *extension; + + type = [photo type]; + if ([type isEqualToString: @"JPEG"] + || [type isEqualToString: @"JPG"]) + extension = @".jpg"; + else if ([type isEqualToString: @"PNG"]) + extension = @".png"; + else if ([type isEqualToString: @"BMP"]) + extension = @".bmp"; + else if ([type isEqualToString: @"GIF"]) + extension = @".gif"; + else + extension = nil; + + return extension; +} + +- (NSDate *) creationTime +{ + return [container creationTime]; +} + +- (NSDate *) lastModificationTime +{ + return [container lastModificationTime]; +} + +- (int) getPrAttachMethod: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + *data = MAPILongValue (memCtx, 0x00000001); + + return MAPISTORE_SUCCESS; +} + +- (int) getPrAttachmentContactphoto: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return [self getYes: data inMemCtx: memCtx]; +} + +- (int) getPrAttachDataBin: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + if (!photoData) + ASSIGN (photoData, [[photo value: 0] dataByDecodingBase64]); + + *data = [photoData asBinaryInMemCtx: memCtx]; + + return MAPISTORE_SUCCESS; +} + +- (int) getPrAttachExtension: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + *data = [[self fileExtension] asUnicodeInMemCtx: memCtx]; + + return MAPISTORE_SUCCESS; +} + +- (int) getPrAttachLongFilename: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + NSString *filename; + + filename = [NSString stringWithFormat: @"ContactPhoto%@", + [self fileExtension]]; + + *data = [filename asUnicodeInMemCtx: memCtx]; + + return MAPISTORE_SUCCESS; +} + +- (int) getPrAttachFilename: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return [self getPrAttachLongFilename: data + inMemCtx: memCtx]; +} + +- (int) getPrDisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return [self getPrAttachLongFilename: data inMemCtx: memCtx]; +} + +@end