]> err.no Git - scalable-opengroupware.org/commitdiff
added support for toggling mail flags
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Tue, 9 Nov 2004 19:53:44 +0000 (19:53 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Tue, 9 Nov 2004 19:53:44 +0000 (19:53 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@451 d1b88da0-ebda-0310-925b-ed51d893ca5b

SOGo/SoObjects/Mailer/ChangeLog
SOGo/SoObjects/Mailer/SOGoMailManager.h
SOGo/SoObjects/Mailer/SOGoMailManager.m
SOGo/SoObjects/Mailer/SOGoMailObject.h
SOGo/SoObjects/Mailer/SOGoMailObject.m
SOGo/SoObjects/Mailer/Version
SOGo/UI/Mailer/ChangeLog
SOGo/UI/Mailer/UIxMailListView.m
SOGo/UI/Mailer/Version
SOGoLogic/SOGoAppointment.m

index 077149597f59fbc78d0f6e672879a7f91991534d..1554c9e24fd619768c225c11feb0df784dcd6603 100644 (file)
@@ -1,5 +1,7 @@
 2004-11-09  Helge Hess  <helge.hess@skyrix.com>
 
+       * added support for toggling mail flags (v0.9.52)
+
        * moved all tree navigation code to UIxMailTree (v0.9.51)
 
        * SOGoMailBaseObject.m, SOGoMailAccounts.m: moved tree code to separate
index 4c5acedff5e6e424f693f66b11cfc22473592c28..ce9803f93a5a7e579b6a77d660f23d0fd43720c0 100644 (file)
@@ -68,6 +68,9 @@
 - (NSData *)fetchContentOfBodyPart:(NSString *)_partId
   atURL:(NSURL *)_url password:(NSString *)_pwd;
 
+- (NSException *)addFlags:(id)_f    toURL:(NSURL *)_u password:(NSString *)_p;
+- (NSException *)removeFlags:(id)_f toURL:(NSURL *)_u password:(NSString *)_p;
+
 /* managing folders */
 
 - (NSException *)createMailbox:(NSString *)_mailbox atURL:(NSURL *)_url
index 0234180a4274f851ef5acf69fad864e644e23b69..58b62fb31a7da5c544c4fe26ece662017fa0f59c 100644 (file)
@@ -470,7 +470,6 @@ static NSString       *imap4Separator  = nil;
   
   if (![_url isNotNull]) return nil;
   
-  
   if ((client = [self imap4ClientForURL:_url password:_pwd]) == nil)
     return nil;
   
@@ -534,6 +533,39 @@ static NSString       *imap4Separator  = nil;
   return result;
 }
 
+- (NSException *)addOrRemove:(BOOL)_flag flags:(id)_f
+  toURL:(NSURL *)_url password:(NSString *)_p
+{
+  NGImap4Client *client;
+  id result;
+  
+  if (![_url isNotNull]) return nil;
+  if (![_f   isNotNull]) return nil;
+  
+  if ((client = [self imap4ClientForURL:_url password:_p]) == nil)
+    return nil;
+  
+  if (![_f isKindOfClass:[NSArray class]])
+    _f = [NSArray arrayWithObjects:&_f count:1];
+  
+  result = [client storeUid:[[[_url path] lastPathComponent] intValue]
+                  add:[NSNumber numberWithBool:_flag]
+                  flags:_f];
+  if (![[result valueForKey:@"result"] boolValue]) {
+    [self logWithFormat:@"DEBUG: fail result %@", result];
+    return [NSException exceptionWithHTTPStatus:500 /* server error */
+                       reason:@"failed to add flag to IMAP4 message"];
+  }
+  /* result contains 'fetch' key with the current flags */
+  return nil;
+}
+- (NSException *)addFlags:(id)_f toURL:(NSURL *)_u password:(NSString *)_p {
+  return [self addOrRemove:YES flags:_f toURL:_u password:_p];
+}
+- (NSException *)removeFlags:(id)_f toURL:(NSURL *)_u password:(NSString *)_p {
+  return [self addOrRemove:NO flags:_f toURL:_u password:_p];
+}
+
 /* managing folders */
 
 - (BOOL)isPermissionDeniedResult:(id)_result {
index d064644f4d42adff3b263d9aaa61345885621e6d..58f8d759e362ca10055efb53f47e0e8421c52120 100644 (file)
@@ -38,7 +38,7 @@
   would address the MIME part 1.2.3 of the mail 12345 in the folder INBOX.
 */
 
-@class NSString, NSArray, NSCalendarDate;
+@class NSData, NSString, NSArray, NSCalendarDate, NSException;
 @class NGImap4Envelope, NGImap4EnvelopeAddress;
 
 @interface SOGoMailObject : SOGoMailBaseObject
 - (id)bodyStructure;
 - (id)lookupInfoForBodyPart:(NSArray *)_path;
 
+/* content */
+
+- (NSData *)content;
+- (NSString *)contentAsString;
+
+/* flags */
+
+- (NSException *)addFlags:(id)_f;
+- (NSException *)removeFlags:(id)_f;
+
 @end
 
 #endif /* __Mailer_SOGoMailObject_H__ */
index 34f63cafb439643c28cd83d0de4c34f773247473..a2a8759bb58861dd7978f959989405fd090b6dac 100644 (file)
@@ -200,6 +200,8 @@ static BOOL heavyDebug = NO;
   return [info isNotNull] ? info : nil;
 }
 
+/* content */
+
 - (NSData *)content {
   NSData *content;
   id     result, fullResult;
@@ -259,6 +261,17 @@ static BOOL heavyDebug = NO;
   return [s autorelease];
 }
 
+/* flags */
+
+- (NSException *)addFlags:(id)_flags {
+  return [[self mailManager] addFlags:_flags toURL:[self imap4URL] 
+                            password:[self imap4Password]];
+}
+- (NSException *)removeFlags:(id)_flags {
+  return [[self mailManager] removeFlags:_flags toURL:[self imap4URL] 
+                            password:[self imap4Password]];
+}
+
 /* name lookup */
 
 - (BOOL)isBodyPartKey:(NSString *)_key inContext:(id)_ctx {
index 5d92fc8134b27737c428d8e094953aa50a37913d..1841728ac64c7ccc240eab0b75d07afe93e5ddc1 100644 (file)
@@ -1,6 +1,6 @@
 # Version file
 
-SUBMINOR_VERSION:=51
+SUBMINOR_VERSION:=52
 
 # v0.9.44 requires NGMime    v4.3.194
 # v0.9.41 requires NGMime    v4.3.190
index 481bdb1e40ebb2d25672723b963b5f066fe0bac8..3e65ac0cd086c699ef4b88d030cb964be4d9c09a 100644 (file)
@@ -1,5 +1,8 @@
 2004-11-09  Helge Hess  <helge.hess@skyrix.com>
 
+       * UIxMailListView.m: added support for toggling read/unread flags
+         (v0.9.61)
+
        * UIxMailTree.m: added tree navigation code from SoObjects (v0.9.60)
 
        * UIxMailTree.m: removed unused code (v0.9.59)
index afc2e65983c33259010e61c85923a282026c2856..8c62a1891324ca81e36479847c0bfd8bc619c5d2 100644 (file)
@@ -48,6 +48,7 @@
 #include "common.h"
 #include <NGImap4/NGImap4Client.h>
 #include <SOGo/SoObjects/Mailer/SOGoMailFolder.h>
+#include <SOGo/SoObjects/Mailer/SOGoMailObject.h>
 
 @implementation UIxMailListView
 
@@ -347,6 +348,18 @@ static int attachmentFlagSize = 8096;
   return script;
 }
 
+/* active message */
+
+- (SOGoMailObject *)lookupActiveMessage {
+  NSString *uid;
+  
+  if ((uid = [[[self context] request] formValueForKey:@"uid"]) == nil)
+    return nil;
+
+  return [[self clientObject] lookupName:uid inContext:[self context]
+                             acquire:NO];
+}
+
 /* actions */
 
 - (id)defaultAction {
@@ -357,11 +370,21 @@ static int attachmentFlagSize = 8096;
 }
 
 - (id)markMessageUnreadAction {
-  [self logWithFormat:@"TODO: mark message unread!"];
+  NSException *error;
+  
+  if ((error = [[self lookupActiveMessage] removeFlags:@"seen"]) != nil)
+    // TODO: improve error handling
+    return error;
+  
   return [self redirectToLocation:@"view"];
 }
 - (id)markMessageReadAction {
-  [self logWithFormat:@"TODO: mark message read!"];
+  NSException *error;
+  
+  if ((error = [[self lookupActiveMessage] addFlags:@"seen"]) != nil)
+    // TODO: improve error handling
+    return error;
+  
   return [self redirectToLocation:@"view"];
 }
 
index 9603d86c70a3254f1ea5b9d081907d1685d33330..be4c90df5a4b56f4b5a19196ec43d5ec4dfb8106 100644 (file)
@@ -1,6 +1,6 @@
 # $Id$
 
-SUBMINOR_VERSION:=60
+SUBMINOR_VERSION:=61
 
 # v0.9.50 requires NGMime   v4.3.190
 # v0.9.43 requires NGObjWeb v4.3.73
index a92f42f8d9844f2771b9e3b0182c8c5d3a22101b..0f3865d868e66490259d83d324658bc7b1513982 100644 (file)
@@ -290,7 +290,7 @@ static SaxObjectDecoder          *sax   = nil;
 }
 
 - (NSArray *)participants {
-  if (self->participants)
+  if (self->participants != nil)
     return self->participants;
   
   self->participants = [[self _filteredAttendeesThinkingOfPersons:YES] retain];