From a450325cb7ceecec21d2bcb0e839656941f591d5 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 27 Jul 2007 19:58:30 +0000 Subject: [PATCH] Monotone-Parent: c09f18aa20f8387df37e9fa0055f49ea9670e4e5 Monotone-Revision: c9dd4206ad3d7a913acb09680d854a19153d46a7 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-07-27T19:58:30 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 10 ++++++ SoObjects/Mailer/SOGoDraftObject.h | 3 +- SoObjects/Mailer/SOGoDraftObject.m | 57 +++++++++++++++++++++++------- 3 files changed, 56 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9f2d60694..17a4d606f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2007-07-27 Wolfgang Sourdeau + * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject + -saveAttachment:_attachwithMetadata:metadata]): new method + replacing -saveAttachment:withName: and which takes a dictionary + as parameter with the filename and the mime type of the + attachment. + The mimetype is then saved in a hidden text file. + ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists, + take the mime type from the hidden text file related to the + attachment. + * SoObjects/Contacts/SOGoContactGCSFolder.m () ([SOGoContactGCSFolder -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): diff --git a/SoObjects/Mailer/SOGoDraftObject.h b/SoObjects/Mailer/SOGoDraftObject.h index b3b635da5..1292c5085 100644 --- a/SoObjects/Mailer/SOGoDraftObject.h +++ b/SoObjects/Mailer/SOGoDraftObject.h @@ -55,7 +55,8 @@ - (NSArray *)fetchAttachmentNames; - (BOOL)isValidAttachmentName:(NSString *)_name; -- (NSException *)saveAttachment:(NSData *)_attach withName:(NSString *)_name; +- (NSException *) saveAttachment: (NSData *)_attach + withMetadata: (NSDictionary *) metadata; - (NSException *)deleteAttachmentWithName:(NSString *)_name; /* NGMime representations */ diff --git a/SoObjects/Mailer/SOGoDraftObject.m b/SoObjects/Mailer/SOGoDraftObject.m index 8bd8ab98e..999e1f32b 100644 --- a/SoObjects/Mailer/SOGoDraftObject.m +++ b/SoObjects/Mailer/SOGoDraftObject.m @@ -257,8 +257,10 @@ static BOOL showTextAttachmentsInline = NO; reason:@"Invalid attachment name!"]; } -- (NSException *)saveAttachment:(NSData *)_attach withName:(NSString *)_name { - NSString *p; +- (NSException *) saveAttachment: (NSData *) _attach + withMetadata: (NSDictionary *) metadata +{ + NSString *p, *name, *mimeType; if (![_attach isNotNull]) { return [NSException exceptionWithHTTPStatus:400 /* Bad Request */ @@ -269,14 +271,29 @@ static BOOL showTextAttachmentsInline = NO; return [NSException exceptionWithHTTPStatus:500 /* Server Error */ reason:@"Could not create folder for draft!"]; } - if (![self isValidAttachmentName:_name]) - return [self invalidAttachmentNameError:_name]; + name = [metadata objectForKey: @"filename"]; + if (![self isValidAttachmentName: name]) + return [self invalidAttachmentNameError: name]; - p = [self pathToAttachmentWithName:_name]; - if (![_attach writeToFile:p atomically:YES]) { - return [NSException exceptionWithHTTPStatus:500 /* Server Error */ - reason:@"Could not write attachment to draft!"]; - } + p = [self pathToAttachmentWithName: name]; + if (![_attach writeToFile: p atomically: YES]) + { + return [NSException exceptionWithHTTPStatus:500 /* Server Error */ + reason:@"Could not write attachment to draft!"]; + } + + mimeType = [metadata objectForKey: @"mime-type"]; + if ([mimeType length] > 0) + { + p = [self pathToAttachmentWithName: + [NSString stringWithFormat: @".%@.mime", name]]; + if (![[mimeType dataUsingEncoding: NSUTF8StringEncoding] + writeToFile: p atomically: YES]) + { + return [NSException exceptionWithHTTPStatus:500 /* Server Error */ + reason:@"Could not write attachment to draft!"]; + } + } return nil; /* everything OK */ } @@ -383,14 +400,28 @@ static BOOL showTextAttachmentsInline = NO; } - (NSString *)contentTypeForAttachmentWithName:(NSString *)_name { - NSString *s; + NSString *s, *p; + NSData *mimeData; - s = [self mimeTypeForExtension:[_name pathExtension]]; - if ([_name length] > 0) - s = [s stringByAppendingFormat:@"; name=\"%@\"", _name]; + p = [self pathToAttachmentWithName: + [NSString stringWithFormat: @".%@.mime", _name]]; + mimeData = [NSData dataWithContentsOfFile: p]; + if (mimeData) + { + s = [[NSString alloc] initWithData: mimeData + encoding: NSUTF8StringEncoding]; + [s autorelease]; + } + else + { + s = [self mimeTypeForExtension:[_name pathExtension]]; + if ([_name length] > 0) + s = [s stringByAppendingFormat:@"; name=\"%@\"", _name]; + } return s; } + - (NSString *)contentDispositionForAttachmentWithName:(NSString *)_name { NSString *type; NSString *cdtype;