mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-05-23 20:35:24 +00:00
Monotone-Parent: 7d2a0f0461686fedc8113fa82622e1f9f934130a
Monotone-Revision: ed9637eda011145d1e94f13b8ee870a7e99df9c9 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-08-17T02:29:18 Monotone-Branch: ca.inverse.sogo
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
|
||||
-imap4URLString]): removed overriden method (see below).
|
||||
|
||||
* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
|
||||
cache the mailbox acl.
|
||||
([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
|
||||
|
||||
@@ -100,7 +100,8 @@ static BOOL debugSoParts = NO;
|
||||
NSLog(@"Note(SOGoMailObject): etag caching disabled!");
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
- (void) dealloc
|
||||
{
|
||||
[headers release];
|
||||
[headerPart release];
|
||||
[coreInfos release];
|
||||
@@ -114,18 +115,6 @@ static BOOL debugSoParts = NO;
|
||||
return [nameInContainer stringByDeletingPathExtension];
|
||||
}
|
||||
|
||||
- (NSMutableString *) imap4URLString
|
||||
{
|
||||
NSMutableString *urlString;
|
||||
NSString *imap4Name;
|
||||
|
||||
urlString = [container imap4URLString];
|
||||
imap4Name = [[self relativeImap4Name] stringByEscapingURL];
|
||||
[urlString appendFormat: @"%@", imap4Name];
|
||||
|
||||
return urlString;
|
||||
}
|
||||
|
||||
/* hierarchy */
|
||||
|
||||
- (SOGoMailObject *)mailObject {
|
||||
@@ -229,7 +218,8 @@ static BOOL debugSoParts = NO;
|
||||
return [msgs count] > 0 ? YES : NO;
|
||||
}
|
||||
|
||||
- (id)fetchCoreInfos {
|
||||
- (id) fetchCoreInfos
|
||||
{
|
||||
id msgs;
|
||||
|
||||
if (coreInfos != nil)
|
||||
@@ -246,19 +236,23 @@ static BOOL debugSoParts = NO;
|
||||
return nil;
|
||||
|
||||
coreInfos = [[msgs objectAtIndex:0] retain];
|
||||
|
||||
return coreInfos;
|
||||
}
|
||||
|
||||
- (id)bodyStructure {
|
||||
- (id) bodyStructure
|
||||
{
|
||||
id body;
|
||||
|
||||
body = [[self fetchCoreInfos] valueForKey: @"body"];
|
||||
if (debugBodyStructure)
|
||||
[self logWithFormat: @"BODY: %@", body];
|
||||
|
||||
return body;
|
||||
}
|
||||
|
||||
- (NGImap4Envelope *)envelope {
|
||||
- (NGImap4Envelope *) envelope
|
||||
{
|
||||
return [[self fetchCoreInfos] valueForKey: @"envelope"];
|
||||
}
|
||||
|
||||
@@ -460,7 +454,9 @@ static BOOL debugSoParts = NO;
|
||||
|
||||
/* bulk fetching of plain/text content */
|
||||
|
||||
- (BOOL)shouldFetchPartOfType:(NSString *)_type subtype:(NSString *)_subtype {
|
||||
- (BOOL) shouldFetchPartOfType: (NSString *) _type
|
||||
subtype: (NSString *) _subtype
|
||||
{
|
||||
/*
|
||||
This method decides which parts are 'prefetched' for display. Those are
|
||||
usually text parts (the set is currently hardcoded in this method ...).
|
||||
@@ -477,9 +473,10 @@ static BOOL debugSoParts = NO;
|
||||
|| [_subtype hasPrefix: @"x-vnd.kolab."])));
|
||||
}
|
||||
|
||||
- (void)addRequiredKeysOfStructure:(id)_info path:(NSString *)_p
|
||||
toArray:(NSMutableArray *)_keys
|
||||
recurse:(BOOL)_recurse
|
||||
- (void) addRequiredKeysOfStructure: (id) _info
|
||||
path: (NSString *) _p
|
||||
toArray: (NSMutableArray *) _keys
|
||||
recurse: (BOOL) _recurse
|
||||
{
|
||||
/*
|
||||
This is used to collect the set of IMAP4 fetch-keys required to fetch
|
||||
@@ -488,67 +485,70 @@ static BOOL debugSoParts = NO;
|
||||
|
||||
The method calls itself recursively to walk the body structure.
|
||||
*/
|
||||
NSArray *parts;
|
||||
NSArray *parts;
|
||||
unsigned i, count;
|
||||
BOOL fetchPart;
|
||||
NSString *k;
|
||||
id body;
|
||||
|
||||
/* Note: if the part itself doesn't qualify, we still check subparts */
|
||||
fetchPart = [self shouldFetchPartOfType:[_info valueForKey: @"type"]
|
||||
subtype:[_info valueForKey: @"subtype"]];
|
||||
if (fetchPart) {
|
||||
NSString *k;
|
||||
NSString *sp;
|
||||
id childInfo;
|
||||
|
||||
if ([_p length] > 0) {
|
||||
k = [[@"body[" stringByAppendingString:_p] stringByAppendingString: @"]"];
|
||||
}
|
||||
else {
|
||||
/*
|
||||
for some reason we need to add ".TEXT" for plain text stuff on root
|
||||
entities?
|
||||
TODO: check with HTML
|
||||
*/
|
||||
k = @"body[text]";
|
||||
}
|
||||
[_keys addObject:k];
|
||||
}
|
||||
|
||||
if (!_recurse)
|
||||
return;
|
||||
|
||||
/* recurse */
|
||||
|
||||
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];
|
||||
|
||||
childInfo = [parts objectAtIndex:i];
|
||||
|
||||
[self addRequiredKeysOfStructure:childInfo path:sp toArray:_keys
|
||||
recurse:YES];
|
||||
}
|
||||
|
||||
/* check body */
|
||||
|
||||
if ((body = [(NSDictionary *)_info objectForKey: @"body"]) != nil) {
|
||||
NSString *sp;
|
||||
|
||||
sp = [[body valueForKey: @"type"] lowercaseString];
|
||||
if ([sp isEqualToString: @"multipart"])
|
||||
sp = _p;
|
||||
else
|
||||
sp = [_p length] > 0 ? [_p stringByAppendingString: @".1"] : @"1";
|
||||
[self addRequiredKeysOfStructure:body path:sp toArray:_keys
|
||||
recurse:YES];
|
||||
}
|
||||
/* Note: if the part itself doesn't qualify, we still check subparts */
|
||||
fetchPart = [self shouldFetchPartOfType: [_info valueForKey: @"type"]
|
||||
subtype: [_info valueForKey: @"subtype"]];
|
||||
if (fetchPart)
|
||||
{
|
||||
if ([_p length] > 0)
|
||||
k = [NSString stringWithFormat: @"body[%@]", _p];
|
||||
else
|
||||
{
|
||||
/*
|
||||
for some reason we need to add ".TEXT" for plain text stuff on root
|
||||
entities?
|
||||
TODO: check with HTML
|
||||
*/
|
||||
k = @"body[text]";
|
||||
}
|
||||
[_keys addObject: k];
|
||||
}
|
||||
|
||||
if (_recurse)
|
||||
{
|
||||
/* recurse */
|
||||
parts = [(NSDictionary *)_info objectForKey: @"parts"];
|
||||
count = [parts count];
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
sp = (([_p length] > 0)
|
||||
? [_p stringByAppendingFormat: @".%d", i + 1]
|
||||
: [NSString stringWithFormat: @"%d", i + 1]);
|
||||
|
||||
childInfo = [parts objectAtIndex: i];
|
||||
|
||||
[self addRequiredKeysOfStructure: childInfo
|
||||
path: sp toArray: _keys
|
||||
recurse: YES];
|
||||
}
|
||||
|
||||
/* check body */
|
||||
body = [(NSDictionary *)_info objectForKey: @"body"];
|
||||
if (body)
|
||||
{
|
||||
sp = [[body valueForKey: @"type"] lowercaseString];
|
||||
if ([sp isEqualToString: @"multipart"])
|
||||
sp = _p;
|
||||
else
|
||||
sp = [_p length] > 0 ? [_p stringByAppendingString: @".1"] : @"1";
|
||||
[self addRequiredKeysOfStructure: body
|
||||
path: sp toArray: _keys
|
||||
recurse: YES];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (NSArray *)plainTextContentFetchKeys {
|
||||
- (NSArray *) plainTextContentFetchKeys
|
||||
{
|
||||
/*
|
||||
The name is not 100% correct. The method returns all body structure fetch
|
||||
keys which are marked by the -shouldFetchPartOfType:subtype: method.
|
||||
@@ -556,8 +556,8 @@ static BOOL debugSoParts = NO;
|
||||
NSMutableArray *ma;
|
||||
|
||||
ma = [NSMutableArray arrayWithCapacity:4];
|
||||
[self addRequiredKeysOfStructure:[[self clientObject] bodyStructure]
|
||||
path: @"" toArray:ma recurse:YES];
|
||||
[self addRequiredKeysOfStructure: [[self clientObject] bodyStructure]
|
||||
path: @"" toArray: ma recurse: YES];
|
||||
return ma;
|
||||
}
|
||||
|
||||
@@ -855,7 +855,7 @@ static BOOL debugSoParts = NO;
|
||||
|
||||
/* b) mark deleted */
|
||||
|
||||
error = [[self imap4Connection] markURLDeleted:[self imap4URL]];
|
||||
error = [[self imap4Connection] markURLDeleted: [self imap4URL]];
|
||||
if (error != nil) return error;
|
||||
|
||||
/* c) expunge */
|
||||
|
||||
Reference in New Issue
Block a user