Deleting a mail folder doesn't create the Trash mailbox.
maint-2.0.2
Luc Charland 2012-09-25 10:29:24 -04:00
parent 129880f8c5
commit dfe369dd20
3 changed files with 54 additions and 28 deletions

View File

@ -86,6 +86,8 @@
- (BOOL) create;
- (BOOL) ensureTrashFolder;
- (NSException *) expunge;
- (NSException *) renameTo: (NSString *) newName;

View File

@ -414,17 +414,15 @@ static NSString *defaultUserID = @"anyone";
{
// If our Trash folder doesn't exist when we try to copy messages
// to it, we create it.
result = [[client status: folderName flags: [NSArray arrayWithObject: @"UIDVALIDITY"]]
objectForKey: @"result"];
b = [self ensureTrashFolder];
if (![result boolValue])
[imap4 createMailbox: folderName
atURL: [[self mailAccountFolder] imap4URL]];
if (b)
{
result = [[client copyUids: uids toFolder: folderName]
objectForKey: @"result"];
result = [[client copyUids: uids toFolder: folderName]
objectForKey: @"result"];
b = [result boolValue];
b = [result boolValue];
}
}
}
else
@ -956,6 +954,24 @@ static NSString *defaultUserID = @"anyone";
return rc;
}
- (BOOL) ensureTrashFolder
{
SOGoMailFolder *trashFolder;
BOOL rc;
trashFolder = [[self mailAccountFolder] trashFolderInContext: context];
rc = NO;
if (![trashFolder isKindOfClass: [NSException class]])
{
rc = [trashFolder exists];
if (!rc)
rc = [trashFolder create];
}
if (!rc)
[self errorWithFormat: @"Cannot create Trash Mailbox"];
return rc;
}
- (NSException *) delete
{
NSException *error;

View File

@ -153,26 +153,34 @@
NSURL *srcURL, *destURL;
co = [self clientObject];
connection = [co imap4Connection];
srcURL = [co imap4URL];
destURL = [self _trashedURLOfFolder: srcURL withCO: co];
connection = [co imap4Connection];
inbox = [[co mailAccountFolder] inboxFolderInContext: context];
[[connection client] select: [inbox absoluteImap4Name]];
error = [connection moveMailboxAtURL: srcURL toURL: destURL];
if (error)
{
response = [self responseWithStatus: 500];
[response appendContentString: @"Unable to move folder."];
}
if ([co ensureTrashFolder])
{
connection = [co imap4Connection];
srcURL = [co imap4URL];
destURL = [self _trashedURLOfFolder: srcURL withCO: co];
connection = [co imap4Connection];
inbox = [[co mailAccountFolder] inboxFolderInContext: context];
[[connection client] select: [inbox absoluteImap4Name]];
error = [connection moveMailboxAtURL: srcURL toURL: destURL];
if (error)
{
response = [self responseWithStatus: 500];
[response appendContentString: @"Unable to move folder."];
}
else
{
// We unsubscribe to the old one, and subscribe back to the new one
[[connection client] subscribe: [destURL path]];
[[connection client] unsubscribe: [srcURL path]];
response = [self responseWith204];
}
}
else
{
// We unsubscribe to the old one, and subscribe back to the new one
[[connection client] subscribe: [destURL path]];
[[connection client] unsubscribe: [srcURL path]];
response = [self responseWith204];
}
{
response = [self responseWithStatus: 500];
[response appendContentString: @"Unable to move folder."];
}
return response;
}