Monotone-Parent: 4e23e038f2b0b7eddf8b30700b8c9a8910768f98

Monotone-Revision: 9235e5dc4d151a3cba8ad842ac39e1b2d18c8201

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2012-01-29T19:55:21
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau
2012-01-29 19:55:21 +00:00
parent a7da84c804
commit 4b81cb167d
33 changed files with 537 additions and 852 deletions
+10 -233
View File
@@ -77,57 +77,6 @@ static Class SOGoMailFolderK;
[MAPIStoreAppointmentWrapper class];
}
- (id) initWithURL: (NSURL *) newURL
inContext: (MAPIStoreContext *) newContext
{
SOGoUserFolder *userFolder;
SOGoMailAccounts *accountsFolder;
SOGoMailAccount *accountFolder;
SOGoFolder *currentContainer;
WOContext *woContext;
if ((self = [super initWithURL: newURL
inContext: newContext]))
{
woContext = [newContext woContext];
userFolder = [SOGoUserFolder objectWithName: [newURL user]
inContainer: MAPIApp];
[parentContainersBag addObject: userFolder];
[woContext setClientObject: userFolder];
accountsFolder = [userFolder lookupName: @"Mail"
inContext: woContext
acquire: NO];
[parentContainersBag addObject: accountsFolder];
[woContext setClientObject: accountsFolder];
accountFolder = [accountsFolder lookupName: @"0"
inContext: woContext
acquire: NO];
[[accountFolder imap4Connection]
enableExtension: @"QRESYNC"];
[parentContainersBag addObject: accountFolder];
[woContext setClientObject: accountFolder];
sogoObject = [self specialFolderFromAccount: accountFolder
inContext: woContext];
[sogoObject retain];
currentContainer = [sogoObject container];
while (currentContainer != (SOGoFolder *) accountFolder)
{
[parentContainersBag addObject: currentContainer];
currentContainer = [currentContainer container];
}
ASSIGN (versionsMessage,
[SOGoMAPIFSMessage objectWithName: @"versions.plist"
inContainer: propsFolder]);
}
return self;
}
- (id) initWithSOGoObject: (id) newSOGoObject
inContainer: (MAPIStoreObject *) newContainer
{
@@ -135,15 +84,20 @@ static Class SOGoMailFolderK;
if ((self = [super initWithSOGoObject: newSOGoObject inContainer: newContainer]))
{
usesAltNameSpace = NO;
// urlString = [[self url] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
ASSIGN (versionsMessage,
[SOGoMAPIFSMessage objectWithName: @"versions.plist"
inContainer: propsFolder]);
}
return self;
}
- (void) setupVersionsMessage
{
ASSIGN (versionsMessage,
[SOGoMAPIFSMessage objectWithName: @"versions.plist"
inContainer: propsFolder]);
}
- (void) dealloc
{
[versionsMessage release];
@@ -166,7 +120,6 @@ static Class SOGoMailFolderK;
- (NSString *) createFolder: (struct SRow *) aRow
withFID: (uint64_t) newFID
inContainer: (id) subfolderParent
{
NSString *folderName, *nameInContainer;
SOGoMailFolder *newFolder;
@@ -188,7 +141,7 @@ static Class SOGoMailFolderK;
nameInContainer = [NSString stringWithFormat: @"folder%@",
[folderName asCSSIdentifier]];
newFolder = [SOGoMailFolderK objectWithName: nameInContainer
inContainer: subfolderParent];
inContainer: sogoObject];
if (![newFolder create])
nameInContainer = nil;
}
@@ -196,13 +149,6 @@ static Class SOGoMailFolderK;
return nameInContainer;
}
- (NSString *) createFolder: (struct SRow *) aRow
withFID: (uint64_t) newFID
{
return [self createFolder: aRow withFID: newFID
inContainer: sogoObject];
}
- (int) getPrContentUnread: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
@@ -896,7 +842,7 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
wantCopy: wantCopy];
/* Conversion of mids to IMAP uids */
mapping = [[self context] mapping];
mapping = [self mapping];
uids = [NSMutableArray arrayWithCapacity: midCount];
oldMessageURLs = [NSMutableArray arrayWithCapacity: midCount];
for (count = 0; count < midCount; count++)
@@ -1060,172 +1006,3 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
}
@end
@implementation MAPIStoreInboxFolder : MAPIStoreMailFolder
- (id) initWithURL: (NSURL *) newURL
inContext: (MAPIStoreContext *) newContext
{
NSDictionary *list, *response;
NGImap4Client *client;
if ((self = [super initWithURL: newURL
inContext: newContext]))
{
client = [[(SOGoMailFolder *) sogoObject imap4Connection] client];
list = [client list: @"" pattern: @"INBOX"];
response = [[list objectForKey: @"RawResponse"] objectForKey: @"list"];
usesAltNameSpace = [[response objectForKey: @"flags"] containsObject: @"noinferiors"];
}
return self;
}
- (SOGoMailFolder *) specialFolderFromAccount: (SOGoMailAccount *) accountFolder
inContext: (WOContext *) woContext
{
return [accountFolder inboxFolderInContext: woContext];
}
- (NSString *) createFolder: (struct SRow *) aRow
withFID: (uint64_t) newFID
{
id subfolderParent;
if (usesAltNameSpace)
subfolderParent = [(SOGoMailFolder *) sogoObject mailAccountFolder];
else
subfolderParent = sogoObject;
return [self createFolder: aRow withFID: newFID
inContainer: subfolderParent];
}
- (NSMutableString *) _imapFolderNameRepresentation: (NSString *) subfolderName
{
NSMutableString *representation;
if (usesAltNameSpace)
{
/* with "altnamespace", the subfolders are NEVER subfolders of INBOX... */;
if (![subfolderName hasPrefix: @"folder"])
abort ();
representation
= [NSMutableString stringWithString:
[subfolderName substringFromIndex: 6]];
}
else
representation = [super _imapFolderNameRepresentation: subfolderName];
return representation;
}
- (NSArray *) folderKeysMatchingQualifier: (EOQualifier *) qualifier
andSortOrderings: (NSArray *) sortOrderings
{
NSMutableArray *subfolderKeys;
SOGoMailAccount *account;
if (usesAltNameSpace)
{
if (qualifier)
[self errorWithFormat: @"qualifier is not used for folders"];
if (sortOrderings)
[self errorWithFormat: @"sort orderings are not used for folders"];
account = [(SOGoMailFolder *) sogoObject mailAccountFolder];
subfolderKeys
= [[account toManyRelationshipKeysWithNamespaces: NO]
mutableCopy];
[subfolderKeys removeObject: @"folderINBOX"];
[self _cleanupSubfolderKeys: subfolderKeys];
}
else
subfolderKeys = [[super folderKeysMatchingQualifier: qualifier
andSortOrderings: sortOrderings]
mutableCopy];
/* TODO: remove special folders */
[subfolderKeys autorelease];
return subfolderKeys;
}
- (id) lookupFolder: (NSString *) childKey
{
MAPIStoreMailFolder *childFolder = nil;
SOGoMailAccount *account;
SOGoMailFolder *sogoFolder;
WOContext *woContext;
if (usesAltNameSpace)
{
if ([[self folderKeys] containsObject: childKey])
{
woContext = [[self context] woContext];
account = [(SOGoMailFolder *) sogoObject mailAccountFolder];
sogoFolder = [account lookupName: childKey inContext: woContext
acquire: NO];
[sogoFolder setContext: woContext];
childFolder = [MAPIStoreMailFolder mapiStoreObjectWithSOGoObject: sogoFolder
inContainer: self];
}
}
else
childFolder = [super lookupFolder: childKey];
return childFolder;
}
- (BOOL) supportsSubFolders
{
return !usesAltNameSpace;
}
@end
@implementation MAPIStoreSentItemsFolder : MAPIStoreMailFolder
- (SOGoMailFolder *) specialFolderFromAccount: (SOGoMailAccount *) accountFolder
inContext: (WOContext *) woContext
{
return [accountFolder sentFolderInContext: woContext];
}
@end
@implementation MAPIStoreDraftsFolder : MAPIStoreMailFolder
- (SOGoMailFolder *) specialFolderFromAccount: (SOGoMailAccount *) accountFolder
inContext: (WOContext *) woContext
{
return [accountFolder draftsFolderInContext: woContext];
}
@end
// @implementation MAPIStoreDeletedItemsFolder : MAPIStoreMailFolder
// - (SOGoMailFolder *) specialFolderFromAccount: (SOGoMailAccount *) accountFolder
// inContext: (WOContext *) woContext
// {
// return [accountFolder trashFolderInContext: woContext];
// }
// @end
//
//
//
@implementation MAPIStoreOutboxFolder : MAPIStoreMailFolder
- (SOGoMailFolder *) specialFolderFromAccount: (SOGoMailAccount *) accountFolder
inContext: (WOContext *) woContext
{
return [accountFolder draftsFolderInContext: woContext];
}
@end