]> err.no Git - scalable-opengroupware.org/commitdiff
added GET action for mail objects
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Fri, 29 Oct 2004 22:46:18 +0000 (22:46 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Fri, 29 Oct 2004 22:46:18 +0000 (22:46 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@443 d1b88da0-ebda-0310-925b-ed51d893ca5b

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

index a3f9a3195d99ad26ea0a7a1ee015650077581772..9e437e9c6d899c5e2a251f0f2cc5cda35ef23842 100644 (file)
@@ -1,3 +1,9 @@
+2004-10-30  Helge Hess  <helge.hess@skyrix.com>
+
+       * SOGoMailObject.m: added -content and -contentAsString method to
+         retrieve raw IMAP4 message content, added GETAction to query a
+         message (v0.9.46)
+
 2004-10-29  Helge Hess  <helge.hess@skyrix.com>
 
        * SOGoDraftObject.m: add 'name' parameter to content-type, properly
index 0bb25c353bb5c441127d78758bcef678e0f76bca..e4149f3c442a4be100b78599cb9ab682f2bd8654 100644 (file)
@@ -65,9 +65,9 @@
     keys = [[NSMutableArray alloc] initWithCapacity:count];
     for (i = 0; i < count; i++) {
       NSString *k;
-
-      k = [[[uids objectAtIndex:i] stringValue]
-                 stringByAppendingString:@".mail"];
+      
+      k = [[uids objectAtIndex:i] stringValue];
+      k = [k stringByAppendingString:@".mail"];
       [keys addObject:k];
     }
     self->filenames = [keys copy];
index 2ea6d67c05246166ebf7c3e51e96f8678103e58d..b7822ec78dbfd98aa5d75d71f25e07b1f3ef0a3d 100644 (file)
@@ -200,6 +200,65 @@ static BOOL heavyDebug = NO;
   return [info isNotNull] ? info : nil;
 }
 
+- (NSData *)content {
+  NSData *content;
+  id     result, fullResult;
+  
+  fullResult = [self fetchParts:[NSArray arrayWithObject:@"RFC822"]];
+  if (fullResult == nil)
+    return nil;
+  
+  if ([fullResult isKindOfClass:[NSException class]])
+    return fullResult;
+  
+  /* extract fetch result */
+  
+  result = [fullResult valueForKey:@"fetch"];
+  if (![result isKindOfClass:[NSArray class]]) {
+    [self logWithFormat:
+           @"ERROR: unexpected IMAP4 result (missing 'fetch'): %@", 
+           fullResult];
+    return [NSException exceptionWithHTTPStatus:500 /* server error */
+                       reason:@"unexpected IMAP4 result"];
+  }
+  if ([result count] == 0)
+    return nil;
+  
+  result = [result objectAtIndex:0];
+  
+  /* extract message */
+  
+  if ((content = [result valueForKey:@"message"]) == nil) {
+    [self logWithFormat:
+           @"ERROR: unexpected IMAP4 result (missing 'message'): %@", 
+           result];
+    return [NSException exceptionWithHTTPStatus:500 /* server error */
+                       reason:@"unexpected IMAP4 result"];
+  }
+  
+  return [[content copy] autorelease];
+}
+
+- (NSString *)contentAsString {
+  NSString *s;
+  NSData *content;
+  
+  if ((content = [self content]) == nil)
+    return nil;
+  if ([content isKindOfClass:[NSException class]])
+    return content;
+  
+  s = [[NSString alloc] initWithData:content 
+                       encoding:NSISOLatin1StringEncoding];
+  if (s == nil) {
+    [self logWithFormat:
+           @"ERROR: could not convert data of length %d to string", 
+           [content length]];
+    return nil;
+  }
+  return [s autorelease];
+}
+
 /* name lookup */
 
 - (BOOL)isBodyPartKey:(NSString *)_key inContext:(id)_ctx {
@@ -258,4 +317,24 @@ static BOOL heavyDebug = NO;
   return [self davCreationDate];
 }
 
+/* actions */
+
+- (id)GETAction:(WOContext *)_ctx {
+  WOResponse *r;
+  NSData     *content;
+  
+  content = [self content];
+  if ([content isKindOfClass:[NSException class]])
+    return content;
+  if (content == nil) {
+    return [NSException exceptionWithHTTPStatus:404 /* Not Found */
+                       reason:@"did not find IMAP4 message"];
+  }
+  
+  r = [_ctx response];
+  [r setHeader:@"message/rfc822" forKey:@"content-type"];
+  [r setContent:content];
+  return r;
+}
+
 @end /* SOGoMailObject */
index a02a1955986c091f32a97b3978958d70fd0ecaf2..89add11fbed14907b7ddc2902b28b5e27088e181 100644 (file)
@@ -1,6 +1,6 @@
 # Version file
 
-SUBMINOR_VERSION:=45
+SUBMINOR_VERSION:=46
 
 # v0.9.44 requires NGMime    v4.3.194
 # v0.9.41 requires NGMime    v4.3.190