]> err.no Git - scalable-opengroupware.org/commitdiff
improved WebDAV support in Drafts folder
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Sun, 30 Jan 2005 17:52:01 +0000 (17:52 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Sun, 30 Jan 2005 17:52:01 +0000 (17:52 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@507 d1b88da0-ebda-0310-925b-ed51d893ca5b

SOGo/SoObjects/Mailer/ChangeLog
SOGo/SoObjects/Mailer/SOGoDraftObject.m
SOGo/SoObjects/Mailer/SOGoDraftsFolder.m

index 804434099da2e51adc4c02a478df7b0254160ac1..3b7289169bb56d6b5962c57228d60248657168db 100644 (file)
@@ -1,4 +1,13 @@
 2005-01-30  Helge Hess  <helge.hess@opengroupware.org>
+       
+       * v0.9.60
+       
+       * SOGoDraftObject.m: added -content and -contentAsString methods (Note:
+         those are expensive operations!), added GETAction: to retrieve the
+         MIME representation of a draft
+
+       * SOGoDraftsFolder.m: added -toOneRelationshipKeys to support SOPE
+         WebDAV access
 
        * v0.9.59
 
index 5add88971689dde9e61631b0a8f5c0fdeef44b2c..7f4782655f8b38c846d26586924da4110a27e390 100644 (file)
@@ -727,6 +727,38 @@ static BOOL       debugOn = NO;
   return nil;
 }
 
+- (NSData *)content {
+  /* Note: does not cache, expensive operation */
+  NSData   *data;
+  NSString *p;
+  
+  if ((p = [self saveMimeMessageToTemporaryFile]) == nil)
+    return nil;
+  
+  data = [NSData dataWithContentsOfMappedFile:p];
+  
+  /* delete temporary file */
+  [self deleteTemporaryMessageFile:p];
+
+  return data;
+}
+- (NSString *)contentAsString {
+  NSString *str;
+  NSData   *data;
+  
+  if ((data = [self content]) == nil)
+    return nil;
+  
+  str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
+  if (str == nil) {
+    [self errorWithFormat:@"could not load draft as ASCII (data size=%d)",
+         [data length]];
+    return nil;
+  }
+
+  return [str autorelease];
+}
+
 /* actions */
 
 - (id)DELETEAction:(id)_ctx {
@@ -738,6 +770,31 @@ static BOOL       debugOn = NO;
   return [NSNumber numberWithBool:YES]; /* delete worked out ... */
 }
 
+- (id)GETAction:(WOContext *)_ctx {
+  /* 
+     Override, because SOGoObject's GETAction uses the less efficient
+     -contentAsString method.
+  */
+  WORequest *rq;
+
+  rq = [_ctx request];
+  if ([rq isSoWebDAVRequest]) {
+    WOResponse *r;
+    NSData     *content;
+    
+    if ((content = [self content]) == nil) {
+      return [NSException exceptionWithHTTPStatus:500
+                         reason:@"Could not generate MIME content!"];
+    }
+    r = [_ctx response];
+    [r setHeader:@"message/rfc822" forKey:@"content-type"];
+    [r setContent:content];
+    return r;
+  }
+  
+  return [super GETAction:_ctx];
+}
+
 /* fake being a SOGoMailObject */
 
 - (id)fetchParts:(NSArray *)_parts {
@@ -753,6 +810,7 @@ static BOOL       debugOn = NO;
   return seenFlags;
 }
 - (unsigned)size {
+  // TODO: size, hard to support, we would need to generate MIME?
   return 0;
 }
 
index 62f10ab5065bf93c5df0e2c63019128489924bca..f6b7f0ef006d938f7bd9de3b7e26b9f58f52ef24 100644 (file)
@@ -173,4 +173,8 @@ static NSString *spoolFolder = nil;
   return YES;
 }
 
+- (NSArray *)toOneRelationshipKeys {
+  return [self fetchMailNames];
+}
+
 @end /* SOGoDraftsFolder */