]> err.no Git - scalable-opengroupware.org/commitdiff
added bulk-adding of flags
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Thu, 7 Jul 2005 15:58:22 +0000 (15:58 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Thu, 7 Jul 2005 15:58:22 +0000 (15:58 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@691 d1b88da0-ebda-0310-925b-ed51d893ca5b

SOGo/SoObjects/Mailer/ChangeLog
SOGo/SoObjects/Mailer/SOGoMailFolder.h
SOGo/SoObjects/Mailer/SOGoMailFolder.m
SOGo/SoObjects/Mailer/SOGoMailManager.h
SOGo/SoObjects/Mailer/SOGoMailManager.m
SOGo/SoObjects/Mailer/SOGoMailObject.m
SOGo/SoObjects/Mailer/Version

index 6aaaa80d47fd30a420836fdfc5f1cd7ca43b0bd5..43def422408e62e318fb3587e63494696bf51e95 100644 (file)
@@ -1,9 +1,14 @@
 2005-07-07  Helge Hess  <helge.hess@opengroupware.org>
 
-       * v0.9.90
+       * SOGoMailManager.m, SOGoMailFolder.m: added methods to "bulk add" 
+         flags to all messages contained in a folder
+         (-addFlags:toAllMessagesInURL:password: for the manager,
+         -addFlagsToAllMessages: for the SOGoFolder) (v0.9.91)
+       
+2005-07-07  Helge Hess  <helge.hess@opengroupware.org>
 
        * added specific SOGoTrashFolder.m class (subclass of SOGoMailFolder)
-         to allow hooking up a different UI
+         to allow hooking up a different UI (v0.9.90)
 
 2005-07-07  Helge Hess  <helge.hess@opengroupware.org>
 
index d43607bf47d25b9f2eb59526bf192c59070892d8..1978a001cf3cfe6d537ca7da4a81c427e41f340f 100644 (file)
 
 - (BOOL)isDeleteAndExpungeAllowed;
 
+/* flags */
+
+- (NSException *)addFlagsToAllMessages:(id)_f;
+
 @end
 
 #endif /* __Mailer_SOGoMailFolder_H__ */
index 4a96b934c1381dc0429091d005c5ee137df01a09..c901e19f6003f00297f3a59197a87792af7b91be 100644 (file)
                             password:[self imap4Password]];
 }
 
+/* flags */
+
+- (NSException *)addFlagsToAllMessages:(id)_f {
+  return [[self mailManager] addFlags:_f toAllMessagesInURL:[self imap4URL]
+                            password:[self imap4Password]];
+}
+
 /* name lookup */
 
 - (BOOL)isMessageKey:(NSString *)_key inContext:(id)_ctx {
index fdd36f28474fd9f3c2b5cfb6605cf4264d15cd94..e7931c8990136fa26d3bc8be584c3df6051bf011 100644 (file)
@@ -96,6 +96,9 @@
 - (id)aclForMailboxAtURL:(NSURL *)_url password:(NSString *)_pwd;
 - (NSString *)myRightsForMailboxAtURL:(NSURL *)_url password:(NSString *)_pwd;
 
+- (NSException *)addFlags:(id)_f toAllMessagesInURL:(NSURL *)_u
+  password:(NSString *)_p;
+
 @end
 
 #endif /* __Mailer_SOGoMailManager_H__ */
index 79dcdca2fa1e0f59b3d3c602ec081d4521a61cde..4a36a024f08f6525baac6d0e7e33119e1a824bf1 100644 (file)
@@ -1021,6 +1021,56 @@ static NSString       *imap4Separator  = nil;
   return [result valueForKey:@"myrights"];
 }
 
+/* bulk flag adding (eg used for empty/trash) */
+
+- (NSException *)addFlags:(id)_f toAllMessagesInURL:(NSURL *)_url
+  password:(NSString *)_p
+{
+  NGImap4Client *client;
+  id       result;
+  
+  if (![_url isNotNull]) return nil;
+  if (![_f   isNotNull]) return nil;
+
+  if (![_f isKindOfClass:[NSArray class]])
+    _f = [NSArray arrayWithObjects:&_f count:1];
+  
+  /* get client */
+  
+  if ((client = [self imap4ClientForURL:_url password:_p]) == nil)
+    // TODO: return 401?
+    return nil;
+  
+  /* select folder */
+  
+  if (![self selectFolder:[self imap4FolderNameForURL:_url] inClient:client]) {
+    return [NSException exceptionWithHTTPStatus:404 /* not found */
+                       reason:@"could not select IMAP4 folder"];
+  }
+
+  /* fetch all sequence numbers */
+  
+  result = [client searchWithQualifier:nil /* means: ALL */];
+  if (![[result valueForKey:@"result"] boolValue]) {
+    return [NSException exceptionWithHTTPStatus:500 /* server error */
+                       reason:@"could not search in IMAP4 folder"];
+  }
+  
+  result = [result valueForKey:@"search"];
+  if ([result count] == 0) /* no messages in there, nothin' to be done */
+    return nil;
+  
+  /* store flags */
+  
+  result = [client storeFlags:_f forMSNs:result addOrRemove:YES];
+  if (![[result valueForKey:@"result"] boolValue]) {
+    return [NSException exceptionWithHTTPStatus:500 /* server error */
+                       reason:@"could not change flags in IMAP4 folder"];
+  }
+  
+  return nil;
+}
+
 /* debugging */
 
 - (BOOL)isDebuggingEnabled {
index 44ee5592e099ca2da2a08d930fdf40d0e598f23b..93e0aa680eecb4ff3b8373249257be770a42f3b1 100644 (file)
@@ -653,7 +653,7 @@ static BOOL debugBodyStructure = NO;
                newName:@"fakeNewUnusedByIMAP4" /* autoassigned */
                inContext:_ctx];
   if (error != nil) return error;
-
+  
   /* b) mark deleted */
   
   error = [[self mailManager] markURLDeleted:[self imap4URL] 
index cac8988756427ca4501602a22b5b97bc518baf7b..94cce5eab7c97cf67bcce9e3977eeefdac335a07 100644 (file)
@@ -1,7 +1,8 @@
 # Version file
 
-SUBMINOR_VERSION:=90
+SUBMINOR_VERSION:=91
 
+# v0.9.91 requires libNGMime       v4.5.222
 # v0.9.69 requires libNGMime       v4.5.210
 # v0.9.55 requires libNGExtensions v4.5.136
 # v0.9.44 requires libNGMime       v4.3.194