2005-01-31 Helge Hess <helge.hess@opengroupware.org>
+ * v0.9.65
+
+ * SOGoMailManager.m, SOGoMailFolder.m: added expunge method
+
+ * SOGoMailObject.m: improve bulk key collector
+
* SOGoMailObject.m: moved more bulk fetching to SoObject (v0.9.64)
* SOGoMailObject.m: moved in plain/text bulk fetch method from mail
- (NSException *)postData:(NSData *)_data flags:(id)_flags;
+- (NSException *)expunge;
+
@end
#endif /* __Mailer_SOGoMailFolder_H__ */
password:[self imap4Password]];
}
+- (NSException *)expunge {
+ return [[self mailManager] expungeAtURL:[self imap4URL]
+ password:[self imap4Password]];
+}
+
/* name lookup */
- (BOOL)isMessageKey:(NSString *)_key inContext:(id)_ctx {
- (NSArray *)fetchUIDs:(NSArray *)_uids inURL:(NSURL *)_url
parts:(NSArray *)_parts password:(NSString *)_pwd;
+- (NSException *)expungeAtURL:(NSURL *)_url password:(NSString *)_pwd;
+
/* individual message */
- (id)fetchURL:(NSURL *)_url parts:(NSArray *)_parts password:(NSString *)_pwd;
return (id)result;
}
+- (NSException *)expungeAtURL:(NSURL *)_url password:(NSString *)_pwd {
+ NGImap4Client *client;
+ NSString *p;
+ id result;
+
+ if ((client = [self imap4ClientForURL:_url password:_pwd]) == nil)
+ return nil; // TODO: return error?
+
+ /* select folder */
+
+ p = [self imap4FolderNameForURL:_url removeFileName:NO];
+ result = [client select:p];
+ if (![[result valueForKey:@"result"] boolValue]) {
+ [self errorWithFormat:@"could not select URL: %@: %@", _url, result];
+ return nil;
+ }
+
+ /* expunge */
+
+ result = [client expunge];
+
+ if (![[result valueForKey:@"result"] boolValue]) {
+ [self errorWithFormat:@"could not expunge url: %@", _url];
+ return nil;
+ }
+ //[self logWithFormat:@"RESULT: %@", result];
+ return nil;
+}
+
- (id)fetchURL:(NSURL *)_url parts:(NSArray *)_parts password:(NSString *)_pwd{
// currently returns a dict
NGImap4Client *client;
[self debugWithFormat:@"check PATH: %@", p];
idx = [p intValue] - 1;
+ parts = [info valueForKey:@"parts"];
mt = [[info valueForKey:@"type"] lowercaseString];
if ([mt isEqualToString:@"message"]) {
/* we have special behaviour for message types */
parts = [NSArray arrayWithObject:body];
}
}
- else
- parts = [info valueForKey:@"parts"];
if (idx >= [parts count]) {
[self errorWithFormat:
- (void)addRequiredKeysOfStructure:(id)_info path:(NSString *)_p
toArray:(NSMutableArray *)_keys
+ recurse:(BOOL)_recurse
{
NSArray *parts;
unsigned i, count;
[_keys addObject:k];
}
+ if (!_recurse)
+ return;
+
/* recurse */
parts = [_info objectForKey:@"parts"];
childInfo = [parts objectAtIndex:i];
- [self addRequiredKeysOfStructure:childInfo path:sp toArray:_keys];
+ [self addRequiredKeysOfStructure:childInfo path:sp toArray:_keys
+ recurse:YES];
}
/* check body */
sp = _p;
else
sp = [_p length] > 0 ? [_p stringByAppendingString:@".1"] : @"1";
- [self addRequiredKeysOfStructure:body path:sp toArray:_keys];
+ [self addRequiredKeysOfStructure:body path:sp toArray:_keys
+ recurse:YES];
}
}
ma = [NSMutableArray arrayWithCapacity:4];
[self addRequiredKeysOfStructure:[[self clientObject] bodyStructure]
- path:@"" toArray:ma];
+ path:@"" toArray:ma recurse:YES];
return ma;
}
# Version file
-SUBMINOR_VERSION:=64
+SUBMINOR_VERSION:=65
# v0.9.55 requires NGExtensions v4.5.136
# v0.9.44 requires libNGMime v4.3.194
2005-01-31 Helge Hess <helge.hess@opengroupware.org>
+ * UIxMailView.m: implemented 'expunge' action (delete button in the
+ toolbar) (v0.9.87)
+
* UIxMailView.m, UIxMailRenderingContext.m: moved more bulk fetching
to SoObject (v0.9.86)
return [self redirectToLocation:@"view"];
}
+- (id)expungeAction {
+ // TODO: we might want to flush the caches?
+ NSException *error;
+ id client;
+
+ if ((client = [self clientObject]) == nil) {
+ return [NSException exceptionWithHTTPStatus:404 /* Not Found */
+ reason:@"did not find mail folder"];
+ }
+
+ if ((error = [[self clientObject] expunge]) != nil)
+ return error;
+
+ if ([client respondsToSelector:@selector(flushMailCaches)])
+ [client flushMailCaches];
+ return [self redirectToLocation:@"view"];
+}
+
@end /* UIxMailListView */
# version file
-SUBMINOR_VERSION:=86
+SUBMINOR_VERSION:=87
+# v0.9.87 requires SoObjects/Mailer v0.9.65
# v0.9.86 requires SoObjects/Mailer v0.9.64
# v0.9.85 requires SoObjects/Mailer v0.9.63
# v0.9.84 requires libNGMime v4.5.209
{ link = "#"; cssClass = "tbicon_forward"; label = "Forward"; },
),
*/
-/* TODO: enable when implemented
( // third group
+ { link = "expunge";
+ cssClass = "tbicon_delete"; label = "Expunge"; },
+/* TODO: enable when implemented
// TODO: enable when delete works (#1212)
{ link = "#";
cssClass = "tbicon_delete"; label = "Delete"; },
// TODO: enable when we know how to mark junk (#971)
{ link = "#";
cssClass = "tbicon_junk"; label = "Junk"; },
- ),
*/
+ ),
( /* fourth group */
/* TODO: enable when we can print (#1207)
{ link = "#"; cssClass = "tbicon_print"; label = "Print"; },
pageName = "UIxMailListView";
actionName = "getMail";
};
+ expunge = {
+ protectedBy = "View";
+ pageName = "UIxMailListView";
+ actionName = "expunge";
+ };
compose = {
protectedBy = "View";