Monotone-Parent: 373bae71c0f2ce5e5fd15e7a932e183d32028039
Monotone-Revision: 1e6376f6599d032a3b57fc881d7ead6d4f903195 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-08-06T18:14:53 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
f39706cc44
commit
4e23c849c9
|
@ -65,7 +65,7 @@ static BOOL debugSoParts = NO;
|
|||
{
|
||||
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
if ((fetchHeader = ([ud boolForKey:@"SOGoDoNotFetchMailHeader"] ? NO : YES)))
|
||||
if ((fetchHeader = ([ud boolForKey: @"SOGoDoNotFetchMailHeader"] ? NO : YES)))
|
||||
NSLog(@"Note: fetching full mail header.");
|
||||
else
|
||||
NSLog(@"Note: not fetching full mail header: 'SOGoDoNotFetchMailHeader'");
|
||||
|
@ -88,8 +88,8 @@ static BOOL debugSoParts = NO;
|
|||
nil];
|
||||
}
|
||||
|
||||
if (![[ud objectForKey:@"SOGoMailDisableETag"] boolValue]) {
|
||||
mailETag = [[NSString alloc] initWithFormat:@"\"imap4url_%d_%d_%03d\"",
|
||||
if (![[ud objectForKey: @"SOGoMailDisableETag"] boolValue]) {
|
||||
mailETag = [[NSString alloc] initWithFormat: @"\"imap4url_%d_%d_%03d\"",
|
||||
UIX_MAILER_MAJOR_VERSION,
|
||||
UIX_MAILER_MINOR_VERSION,
|
||||
UIX_MAILER_SUBMINOR_VERSION];
|
||||
|
@ -140,18 +140,18 @@ static BOOL debugSoParts = NO;
|
|||
if (_partInfo == nil)
|
||||
return nil;
|
||||
|
||||
mt = [_partInfo valueForKey:@"type"];
|
||||
st = [[_partInfo valueForKey:@"subtype"] lowercaseString];
|
||||
if ([mt isEqualToString:@"text"]) {
|
||||
if ([st isEqualToString:@"plain"]) return @".txt";
|
||||
if ([st isEqualToString:@"html"]) return @".html";
|
||||
if ([st isEqualToString:@"calendar"]) return @".ics";
|
||||
if ([st isEqualToString:@"x-vcard"]) return @".vcf";
|
||||
mt = [_partInfo valueForKey: @"type"];
|
||||
st = [[_partInfo valueForKey: @"subtype"] lowercaseString];
|
||||
if ([mt isEqualToString: @"text"]) {
|
||||
if ([st isEqualToString: @"plain"]) return @".txt";
|
||||
if ([st isEqualToString: @"html"]) return @".html";
|
||||
if ([st isEqualToString: @"calendar"]) return @".ics";
|
||||
if ([st isEqualToString: @"x-vcard"]) return @".vcf";
|
||||
}
|
||||
else if ([mt isEqualToString:@"image"])
|
||||
else if ([mt isEqualToString: @"image"])
|
||||
return [@"." stringByAppendingString:st];
|
||||
else if ([mt isEqualToString:@"application"]) {
|
||||
if ([st isEqualToString:@"pgp-signature"])
|
||||
else if ([mt isEqualToString: @"application"]) {
|
||||
if ([st isEqualToString: @"pgp-signature"])
|
||||
return @".asc";
|
||||
}
|
||||
|
||||
|
@ -164,7 +164,7 @@ static BOOL debugSoParts = NO;
|
|||
NSArray *parts;
|
||||
unsigned i, count;
|
||||
|
||||
parts = [[self bodyStructure] valueForKey:@"parts"];
|
||||
parts = [[self bodyStructure] valueForKey: @"parts"];
|
||||
if (![parts isNotNull])
|
||||
return nil;
|
||||
if ((count = [parts count]) == 0)
|
||||
|
@ -176,7 +176,7 @@ static BOOL debugSoParts = NO;
|
|||
BOOL hasParts;
|
||||
|
||||
part = [parts objectAtIndex:i];
|
||||
hasParts = [part valueForKey:@"parts"] != nil ? YES:NO;
|
||||
hasParts = [part valueForKey: @"parts"] != nil ? YES:NO;
|
||||
if ((hasParts && !_withParts) || (_withParts && !hasParts))
|
||||
continue;
|
||||
|
||||
|
@ -184,7 +184,7 @@ static BOOL debugSoParts = NO;
|
|||
ma = [NSMutableArray arrayWithCapacity:count - i];
|
||||
|
||||
ext = [self keyExtensionForPart:part];
|
||||
key = [[NSString alloc] initWithFormat:@"%d%@", i + 1, ext?ext:@""];
|
||||
key = [[NSString alloc] initWithFormat: @"%d%@", i + 1, ext?ext: @""];
|
||||
[ma addObject:key];
|
||||
[key release];
|
||||
}
|
||||
|
@ -220,10 +220,10 @@ static BOOL debugSoParts = NO;
|
|||
/* otherwise fetch something really simple */
|
||||
|
||||
if (existsKey == nil) /* we use size, other suggestions? */
|
||||
existsKey = [[NSArray alloc] initWithObjects:@"RFC822.SIZE", nil];
|
||||
existsKey = [[NSArray alloc] initWithObjects: @"RFC822.SIZE", nil];
|
||||
|
||||
msgs = [self fetchParts:existsKey]; // returns dict
|
||||
msgs = [msgs valueForKey:@"fetch"];
|
||||
msgs = [msgs valueForKey: @"fetch"];
|
||||
return [msgs count] > 0 ? YES : NO;
|
||||
}
|
||||
|
||||
|
@ -238,8 +238,8 @@ static BOOL debugSoParts = NO;
|
|||
#else
|
||||
msgs = [self fetchParts:coreInfoKeys]; // returns dict
|
||||
#endif
|
||||
if (heavyDebug) [self logWithFormat:@"M: %@", msgs];
|
||||
msgs = [msgs valueForKey:@"fetch"];
|
||||
if (heavyDebug) [self logWithFormat: @"M: %@", msgs];
|
||||
msgs = [msgs valueForKey: @"fetch"];
|
||||
if ([msgs count] == 0)
|
||||
return nil;
|
||||
|
||||
|
@ -250,14 +250,14 @@ static BOOL debugSoParts = NO;
|
|||
- (id)bodyStructure {
|
||||
id body;
|
||||
|
||||
body = [[self fetchCoreInfos] valueForKey:@"bodystructure"];
|
||||
body = [[self fetchCoreInfos] valueForKey: @"body"];
|
||||
if (debugBodyStructure)
|
||||
[self logWithFormat:@"BODY: %@", body];
|
||||
[self logWithFormat: @"BODY: %@", body];
|
||||
return body;
|
||||
}
|
||||
|
||||
- (NGImap4Envelope *)envelope {
|
||||
return [[self fetchCoreInfos] valueForKey:@"envelope"];
|
||||
return [[self fetchCoreInfos] valueForKey: @"envelope"];
|
||||
}
|
||||
|
||||
- (NSString *) subject
|
||||
|
@ -288,7 +288,7 @@ static BOOL debugSoParts = NO;
|
|||
}
|
||||
|
||||
- (NSData *)mailHeaderData {
|
||||
return [[self fetchCoreInfos] valueForKey:@"header"];
|
||||
return [[self fetchCoreInfos] valueForKey: @"header"];
|
||||
}
|
||||
- (BOOL)hasMailHeaderInCoreInfos {
|
||||
return [[self mailHeaderData] length] > 0 ? YES : NO;
|
||||
|
@ -333,7 +333,7 @@ static BOOL debugSoParts = NO;
|
|||
return nil;
|
||||
|
||||
if ((info = [self bodyStructure]) == nil) {
|
||||
[self errorWithFormat:@"got no body part structure!"];
|
||||
[self errorWithFormat: @"got no body part structure!"];
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
@ -343,7 +343,7 @@ static BOOL debugSoParts = NO;
|
|||
if ([_path length] == 0)
|
||||
return info;
|
||||
|
||||
_path = [_path componentsSeparatedByString:@"."];
|
||||
_path = [_path componentsSeparatedByString: @"."];
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -360,19 +360,19 @@ static BOOL debugSoParts = NO;
|
|||
NSArray *parts;
|
||||
NSString *mt;
|
||||
|
||||
[self debugWithFormat:@"check PATH: %@", p];
|
||||
[self debugWithFormat: @"check PATH: %@", p];
|
||||
idx = [p intValue] - 1;
|
||||
|
||||
parts = [info valueForKey:@"parts"];
|
||||
mt = [[info valueForKey:@"type"] lowercaseString];
|
||||
if ([mt isEqualToString:@"message"]) {
|
||||
parts = [info valueForKey: @"parts"];
|
||||
mt = [[info valueForKey: @"type"] lowercaseString];
|
||||
if ([mt isEqualToString: @"message"]) {
|
||||
/* we have special behaviour for message types */
|
||||
id body;
|
||||
|
||||
if ((body = [info valueForKey:@"body"]) != nil) {
|
||||
mt = [body valueForKey:@"type"];
|
||||
if ([mt isEqualToString:@"multipart"])
|
||||
parts = [body valueForKey:@"parts"];
|
||||
if ((body = [info valueForKey: @"body"]) != nil) {
|
||||
mt = [body valueForKey: @"type"];
|
||||
if ([mt isEqualToString: @"multipart"])
|
||||
parts = [body valueForKey: @"parts"];
|
||||
else
|
||||
parts = [NSArray arrayWithObject:body];
|
||||
}
|
||||
|
@ -395,7 +395,7 @@ static BOOL debugSoParts = NO;
|
|||
NSData *content;
|
||||
id result, fullResult;
|
||||
|
||||
fullResult = [self fetchParts:[NSArray arrayWithObject:@"RFC822"]];
|
||||
fullResult = [self fetchParts:[NSArray arrayWithObject: @"RFC822"]];
|
||||
if (fullResult == nil)
|
||||
return nil;
|
||||
|
||||
|
@ -404,13 +404,13 @@ static BOOL debugSoParts = NO;
|
|||
|
||||
/* extract fetch result */
|
||||
|
||||
result = [fullResult valueForKey:@"fetch"];
|
||||
result = [fullResult valueForKey: @"fetch"];
|
||||
if (![result isKindOfClass:[NSArray class]]) {
|
||||
[self logWithFormat:
|
||||
@"ERROR: unexpected IMAP4 result (missing 'fetch'): %@",
|
||||
fullResult];
|
||||
return [NSException exceptionWithHTTPStatus:500 /* server error */
|
||||
reason:@"unexpected IMAP4 result"];
|
||||
reason: @"unexpected IMAP4 result"];
|
||||
}
|
||||
if ([result count] == 0)
|
||||
return nil;
|
||||
|
@ -419,12 +419,12 @@ static BOOL debugSoParts = NO;
|
|||
|
||||
/* extract message */
|
||||
|
||||
if ((content = [result valueForKey:@"message"]) == nil) {
|
||||
if ((content = [result valueForKey: @"message"]) == nil) {
|
||||
[self logWithFormat:
|
||||
@"ERROR: unexpected IMAP4 result (missing 'message'): %@",
|
||||
result];
|
||||
return [NSException exceptionWithHTTPStatus:500 /* server error */
|
||||
reason:@"unexpected IMAP4 result"];
|
||||
reason: @"unexpected IMAP4 result"];
|
||||
}
|
||||
|
||||
return [[content copy] autorelease];
|
||||
|
@ -466,13 +466,13 @@ static BOOL debugSoParts = NO;
|
|||
_type = [_type lowercaseString];
|
||||
_subtype = [_subtype lowercaseString];
|
||||
|
||||
return (([_type isEqualToString:@"text"]
|
||||
&& ([_subtype isEqualToString:@"plain"]
|
||||
|| [_subtype isEqualToString:@"html"]
|
||||
|| [_subtype isEqualToString:@"calendar"]))
|
||||
|| ([_type isEqualToString:@"application"]
|
||||
&& ([_subtype isEqualToString:@"pgp-signature"]
|
||||
|| [_subtype hasPrefix:@"x-vnd.kolab."])));
|
||||
return (([_type isEqualToString: @"text"]
|
||||
&& ([_subtype isEqualToString: @"plain"]
|
||||
|| [_subtype isEqualToString: @"html"]
|
||||
|| [_subtype isEqualToString: @"calendar"]))
|
||||
|| ([_type isEqualToString: @"application"]
|
||||
&& ([_subtype isEqualToString: @"pgp-signature"]
|
||||
|| [_subtype hasPrefix: @"x-vnd.kolab."])));
|
||||
}
|
||||
|
||||
- (void)addRequiredKeysOfStructure:(id)_info path:(NSString *)_p
|
||||
|
@ -492,13 +492,13 @@ static BOOL debugSoParts = NO;
|
|||
id body;
|
||||
|
||||
/* Note: if the part itself doesn't qualify, we still check subparts */
|
||||
fetchPart = [self shouldFetchPartOfType:[_info valueForKey:@"type"]
|
||||
subtype:[_info valueForKey:@"subtype"]];
|
||||
fetchPart = [self shouldFetchPartOfType:[_info valueForKey: @"type"]
|
||||
subtype:[_info valueForKey: @"subtype"]];
|
||||
if (fetchPart) {
|
||||
NSString *k;
|
||||
|
||||
if ([_p length] > 0) {
|
||||
k = [[@"body[" stringByAppendingString:_p] stringByAppendingString:@"]"];
|
||||
k = [[@"body[" stringByAppendingString:_p] stringByAppendingString: @"]"];
|
||||
}
|
||||
else {
|
||||
/*
|
||||
|
@ -516,14 +516,14 @@ static BOOL debugSoParts = NO;
|
|||
|
||||
/* recurse */
|
||||
|
||||
parts = [(NSDictionary *)_info objectForKey:@"parts"];
|
||||
parts = [(NSDictionary *)_info objectForKey: @"parts"];
|
||||
for (i = 0, count = [parts count]; i < count; i++) {
|
||||
NSString *sp;
|
||||
id childInfo;
|
||||
|
||||
sp = ([_p length] > 0)
|
||||
? [_p stringByAppendingFormat:@".%d", i + 1]
|
||||
: [NSString stringWithFormat:@"%d", i + 1];
|
||||
? [_p stringByAppendingFormat: @".%d", i + 1]
|
||||
: [NSString stringWithFormat: @"%d", i + 1];
|
||||
|
||||
childInfo = [parts objectAtIndex:i];
|
||||
|
||||
|
@ -533,14 +533,14 @@ static BOOL debugSoParts = NO;
|
|||
|
||||
/* check body */
|
||||
|
||||
if ((body = [(NSDictionary *)_info objectForKey:@"body"]) != nil) {
|
||||
if ((body = [(NSDictionary *)_info objectForKey: @"body"]) != nil) {
|
||||
NSString *sp;
|
||||
|
||||
sp = [[body valueForKey:@"type"] lowercaseString];
|
||||
if ([sp isEqualToString:@"multipart"])
|
||||
sp = [[body valueForKey: @"type"] lowercaseString];
|
||||
if ([sp isEqualToString: @"multipart"])
|
||||
sp = _p;
|
||||
else
|
||||
sp = [_p length] > 0 ? [_p stringByAppendingString:@".1"] : @"1";
|
||||
sp = [_p length] > 0 ? [_p stringByAppendingString: @".1"] : @"1";
|
||||
[self addRequiredKeysOfStructure:body path:sp toArray:_keys
|
||||
recurse:YES];
|
||||
}
|
||||
|
@ -555,7 +555,7 @@ static BOOL debugSoParts = NO;
|
|||
|
||||
ma = [NSMutableArray arrayWithCapacity:4];
|
||||
[self addRequiredKeysOfStructure:[[self clientObject] bodyStructure]
|
||||
path:@"" toArray:ma recurse:YES];
|
||||
path: @"" toArray:ma recurse:YES];
|
||||
return ma;
|
||||
}
|
||||
|
||||
|
@ -565,13 +565,13 @@ static BOOL debugSoParts = NO;
|
|||
unsigned i, count;
|
||||
id result;
|
||||
|
||||
[self debugWithFormat:@"fetch keys: %@", _fetchKeys];
|
||||
[self debugWithFormat: @"fetch keys: %@", _fetchKeys];
|
||||
|
||||
result = [self fetchParts:_fetchKeys];
|
||||
result = [result valueForKey:@"RawResponse"]; // hackish
|
||||
result = [result valueForKey: @"RawResponse"]; // hackish
|
||||
|
||||
// Note: -valueForKey: doesn't work!
|
||||
result = [(NSDictionary *)result objectForKey:@"fetch"];
|
||||
result = [(NSDictionary *)result objectForKey: @"fetch"];
|
||||
|
||||
count = [_fetchKeys count];
|
||||
flatContents = [NSMutableDictionary dictionaryWithCapacity:count];
|
||||
|
@ -581,20 +581,20 @@ static BOOL debugSoParts = NO;
|
|||
|
||||
key = [_fetchKeys objectAtIndex:i];
|
||||
data = [(NSDictionary *)[(NSDictionary *)result objectForKey:key]
|
||||
objectForKey:@"data"];
|
||||
objectForKey: @"data"];
|
||||
|
||||
if (![data isNotNull]) {
|
||||
[self errorWithFormat:@"got no data for key: %@", key];
|
||||
[self errorWithFormat: @"got no data for key: %@", key];
|
||||
continue;
|
||||
}
|
||||
|
||||
if ([key isEqualToString:@"body[text]"])
|
||||
if ([key isEqualToString: @"body[text]"])
|
||||
key = @""; // see key collector for explanation (TODO: where?)
|
||||
else if ([key hasPrefix:@"body["]) {
|
||||
else if ([key hasPrefix: @"body["]) {
|
||||
NSRange r;
|
||||
|
||||
key = [key substringFromIndex:5];
|
||||
r = [key rangeOfString:@"]"];
|
||||
r = [key rangeOfString: @"]"];
|
||||
if (r.length > 0)
|
||||
key = [key substringToIndex:r.location];
|
||||
}
|
||||
|
@ -619,7 +619,7 @@ static BOOL debugSoParts = NO;
|
|||
|
||||
s = nil;
|
||||
|
||||
encoding = [[_info objectForKey:@"encoding"] lowercaseString];
|
||||
encoding = [[_info objectForKey: @"encoding"] lowercaseString];
|
||||
|
||||
if ([encoding isEqualToString: @"7bit"]
|
||||
|| [encoding isEqualToString: @"8bit"])
|
||||
|
@ -629,7 +629,7 @@ static BOOL debugSoParts = NO;
|
|||
else if ([encoding isEqualToString: @"quoted-printable"])
|
||||
mailData = [_data dataByDecodingQuotedPrintable];
|
||||
|
||||
charset = [[_info valueForKey:@"parameterList"] valueForKey: @"charset"];
|
||||
charset = [[_info valueForKey: @"parameterList"] valueForKey: @"charset"];
|
||||
if (![charset length])
|
||||
{
|
||||
s = [[NSString alloc] initWithData:mailData encoding:NSUTF8StringEncoding];
|
||||
|
@ -727,14 +727,14 @@ static BOOL debugSoParts = NO;
|
|||
if ([self isBodyPartKey:_key inContext:_ctx]) {
|
||||
if ((obj = [self lookupImap4BodyPartKey:_key inContext:_ctx]) != nil) {
|
||||
if (debugSoParts)
|
||||
[self logWithFormat:@"mail looked up part %@: %@", _key, obj];
|
||||
[self logWithFormat: @"mail looked up part %@: %@", _key, obj];
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
||||
/* return 404 to stop acquisition */
|
||||
return [NSException exceptionWithHTTPStatus:404 /* Not Found */
|
||||
reason:@"Did not find mail method or part-reference!"];
|
||||
reason: @"Did not find mail method or part-reference!"];
|
||||
}
|
||||
|
||||
/* WebDAV */
|
||||
|
@ -745,7 +745,7 @@ static BOOL debugSoParts = NO;
|
|||
}
|
||||
|
||||
- (id)davContentLength {
|
||||
return [[self fetchCoreInfos] valueForKey:@"size"];
|
||||
return [[self fetchCoreInfos] valueForKey: @"size"];
|
||||
}
|
||||
|
||||
- (NSDate *)davCreationDate {
|
||||
|
@ -759,10 +759,10 @@ static BOOL debugSoParts = NO;
|
|||
- (NSException *)davMoveToTargetObject:(id)_target newName:(NSString *)_name
|
||||
inContext:(id)_ctx
|
||||
{
|
||||
[self logWithFormat:@"TODO: should move mail as '%@' to: %@",
|
||||
[self logWithFormat: @"TODO: should move mail as '%@' to: %@",
|
||||
_name, _target];
|
||||
return [NSException exceptionWithHTTPStatus:501 /* Not Implemented */
|
||||
reason:@"not implemented"];
|
||||
reason: @"not implemented"];
|
||||
}
|
||||
|
||||
- (NSException *)davCopyToTargetObject:(id)_target newName:(NSString *)_name
|
||||
|
@ -799,7 +799,7 @@ static BOOL debugSoParts = NO;
|
|||
/* check whether the mail still exists */
|
||||
if (![self doesMailExist]) {
|
||||
return [NSException exceptionWithHTTPStatus:404 /* Not Found */
|
||||
reason:@"mail was deleted"];
|
||||
reason: @"mail was deleted"];
|
||||
}
|
||||
return error; /* return 304 or 416 */
|
||||
}
|
||||
|
@ -809,11 +809,11 @@ static BOOL debugSoParts = NO;
|
|||
return content;
|
||||
if (content == nil) {
|
||||
return [NSException exceptionWithHTTPStatus:404 /* Not Found */
|
||||
reason:@"did not find IMAP4 message"];
|
||||
reason: @"did not find IMAP4 message"];
|
||||
}
|
||||
|
||||
r = [(WOContext *)_ctx response];
|
||||
[r setHeader:@"message/rfc822" forKey:@"content-type"];
|
||||
[r setHeader: @"message/rfc822" forKey: @"content-type"];
|
||||
[r setContent:content];
|
||||
return r;
|
||||
}
|
||||
|
@ -840,14 +840,14 @@ static BOOL debugSoParts = NO;
|
|||
return (NSException *)trashFolder;
|
||||
if (![trashFolder isNotNull]) {
|
||||
return [NSException exceptionWithHTTPStatus:500 /* Server Error */
|
||||
reason:@"Did not find Trash folder!"];
|
||||
reason: @"Did not find Trash folder!"];
|
||||
}
|
||||
[trashFolder flushMailCaches];
|
||||
|
||||
/* a) copy */
|
||||
|
||||
error = [self davCopyToTargetObject:trashFolder
|
||||
newName:@"fakeNewUnusedByIMAP4" /* autoassigned */
|
||||
newName: @"fakeNewUnusedByIMAP4" /* autoassigned */
|
||||
inContext:_ctx];
|
||||
if (error != nil) return error;
|
||||
|
||||
|
@ -912,7 +912,7 @@ static BOOL debugSoParts = NO;
|
|||
/* a) copy */
|
||||
|
||||
error = [self davCopyToTargetObject: destFolder
|
||||
newName:@"fakeNewUnusedByIMAP4" /* autoassigned */
|
||||
newName: @"fakeNewUnusedByIMAP4" /* autoassigned */
|
||||
inContext:_ctx];
|
||||
if (error != nil) return error;
|
||||
|
||||
|
@ -965,7 +965,7 @@ static BOOL debugSoParts = NO;
|
|||
NSDictionary *h;
|
||||
|
||||
if ((h = [self mailHeaders]) != nil)
|
||||
return [[h objectForKey:@"x-kolab-type"] isNotEmpty];
|
||||
return [[h objectForKey: @"x-kolab-type"] isNotEmpty];
|
||||
|
||||
// TODO: we could check the body structure?
|
||||
|
||||
|
@ -978,7 +978,7 @@ static BOOL debugSoParts = NO;
|
|||
if ((h = [self mailHeaders]) == nil)
|
||||
return NO;
|
||||
|
||||
return [[h objectForKey:@"list-id"] isNotEmpty];
|
||||
return [[h objectForKey: @"list-id"] isNotEmpty];
|
||||
}
|
||||
|
||||
- (BOOL)isVirusScanned {
|
||||
|
@ -987,8 +987,8 @@ static BOOL debugSoParts = NO;
|
|||
if ((h = [self mailHeaders]) == nil)
|
||||
return NO;
|
||||
|
||||
if (![[h objectForKey:@"x-virus-status"] isNotEmpty]) return NO;
|
||||
if (![[h objectForKey:@"x-virus-scanned"] isNotEmpty]) return NO;
|
||||
if (![[h objectForKey: @"x-virus-status"] isNotEmpty]) return NO;
|
||||
if (![[h objectForKey: @"x-virus-scanned"] isNotEmpty]) return NO;
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
@ -1018,9 +1018,9 @@ static BOOL debugSoParts = NO;
|
|||
return nil;
|
||||
|
||||
/* check for commas in string values */
|
||||
r = [_value rangeOfString:@","];
|
||||
r = [_value rangeOfString: @","];
|
||||
if (r.length > 0) {
|
||||
return [self scanListHeaderValue:[_value componentsSeparatedByString:@","]
|
||||
return [self scanListHeaderValue:[_value componentsSeparatedByString: @","]
|
||||
forFieldWithPrefix:_prefix];
|
||||
}
|
||||
|
||||
|
@ -1030,7 +1030,7 @@ static BOOL debugSoParts = NO;
|
|||
|
||||
/* unquote */
|
||||
if ([_value characterAtIndex:0] == '<') {
|
||||
r = [_value rangeOfString:@">"];
|
||||
r = [_value rangeOfString: @">"];
|
||||
_value = (r.length == 0)
|
||||
? [_value substringFromIndex:1]
|
||||
: [_value substringWithRange:NSMakeRange(1, r.location - 2)];
|
||||
|
@ -1041,18 +1041,18 @@ static BOOL debugSoParts = NO;
|
|||
|
||||
- (NSString *)mailingListArchiveURL {
|
||||
return [self scanListHeaderValue:
|
||||
[[self mailHeaders] objectForKey:@"list-archive"]
|
||||
forFieldWithPrefix:@"<http://"];
|
||||
[[self mailHeaders] objectForKey: @"list-archive"]
|
||||
forFieldWithPrefix: @"<http://"];
|
||||
}
|
||||
- (NSString *)mailingListSubscribeURL {
|
||||
return [self scanListHeaderValue:
|
||||
[[self mailHeaders] objectForKey:@"list-subscribe"]
|
||||
forFieldWithPrefix:@"<http://"];
|
||||
[[self mailHeaders] objectForKey: @"list-subscribe"]
|
||||
forFieldWithPrefix: @"<http://"];
|
||||
}
|
||||
- (NSString *)mailingListUnsubscribeURL {
|
||||
return [self scanListHeaderValue:
|
||||
[[self mailHeaders] objectForKey:@"list-unsubscribe"]
|
||||
forFieldWithPrefix:@"<http://"];
|
||||
[[self mailHeaders] objectForKey: @"list-unsubscribe"]
|
||||
forFieldWithPrefix: @"<http://"];
|
||||
}
|
||||
|
||||
/* etag support */
|
||||
|
@ -1075,16 +1075,16 @@ static BOOL debugSoParts = NO;
|
|||
- (NSString *)outlookMessageClass {
|
||||
NSString *type;
|
||||
|
||||
if ((type = [[self mailHeaders] objectForKey:@"x-kolab-type"]) != nil) {
|
||||
if ([type isEqualToString:@"application/x-vnd.kolab.contact"])
|
||||
if ((type = [[self mailHeaders] objectForKey: @"x-kolab-type"]) != nil) {
|
||||
if ([type isEqualToString: @"application/x-vnd.kolab.contact"])
|
||||
return @"IPM.Contact";
|
||||
if ([type isEqualToString:@"application/x-vnd.kolab.task"])
|
||||
if ([type isEqualToString: @"application/x-vnd.kolab.task"])
|
||||
return @"IPM.Task";
|
||||
if ([type isEqualToString:@"application/x-vnd.kolab.event"])
|
||||
if ([type isEqualToString: @"application/x-vnd.kolab.event"])
|
||||
return @"IPM.Appointment";
|
||||
if ([type isEqualToString:@"application/x-vnd.kolab.note"])
|
||||
if ([type isEqualToString: @"application/x-vnd.kolab.note"])
|
||||
return @"IPM.Note";
|
||||
if ([type isEqualToString:@"application/x-vnd.kolab.journal"])
|
||||
if ([type isEqualToString: @"application/x-vnd.kolab.journal"])
|
||||
return @"IPM.Journal";
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue