]> err.no Git - scalable-opengroupware.org/commitdiff
fixed fetching of mails with only text content
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Mon, 4 Oct 2004 02:57:44 +0000 (02:57 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Mon, 4 Oct 2004 02:57:44 +0000 (02:57 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@355 d1b88da0-ebda-0310-925b-ed51d893ca5b

SOGo/UI/Mailer/ChangeLog
SOGo/UI/Mailer/UIxMailPartTextViewer.m
SOGo/UI/Mailer/UIxMailPartTextViewer.wox
SOGo/UI/Mailer/UIxMailRenderingContext.m
SOGo/UI/Mailer/UIxMailView.m
SOGo/UI/Mailer/Version

index ed269b20b02f6b001088b0cc5f4b892087de5aef..c7f2f4a39e35005913be0dc089e4f6f23b272e37 100644 (file)
@@ -1,5 +1,7 @@
 2004-10-04  Helge Hess  <helge.hess@opengroupware.org>
 
+       * fixed fetching of mails with only text content (v0.9.17)
+
        * added flat body fetches, used in text viewer (v0.9.16)
 
        * added MIME content viewer infrastructure (v0.9.15)
index 78da7133759da6f0fd4d7b3bb519647e6acca67f..d0c28c2a363ae66bd4bac7d00ff878982b5703c2 100644 (file)
   NSString *s;
   NSData   *content;
   
-  if ((content = [self flatContent]) == nil)
+  if ((content = [self flatContent]) == nil) {
+    [self logWithFormat:@"ERROR: got no text content: %@", [self partPath]];
     return nil;
+  }
 
   charset =
     [[[self bodyInfo] objectForKey:@"parameterList"] objectForKey:@"charset"];
@@ -53,6 +55,8 @@
   // TODO: properly decode charset, might need to handle encoding?
   
   s = [[NSString alloc] initWithData:content encoding:NSUTF8StringEncoding];
+  if (s == nil)
+    [self logWithFormat:@"ERROR: could not convert content to text!"];
   return [s autorelease];
 }
 
index 4ce6474adf725518706958d90f37bc3fa0c21199..7e8d5f4cce791019d991012c296a33cc600945ad 100644 (file)
@@ -6,6 +6,4 @@
   xmlns:rsrc="OGo:url"
   xmlns:label="OGo:label"
   class="mailer_plaincontent"
->
-  <var:string value="flatContentAsString" />
-</pre>
+><var:string value="flatContentAsString" /></pre>
index 914dd2e31863dab1de98b87cd9112eb5edca8979..f30f224069c891f90b3ba04ef848ba3dfb57cd03 100644 (file)
     return [self->flatContents isNotNull] ? self->flatContents : nil;
   
   self->flatContents = [[self->viewer fetchFlatContents] retain];
+  [self debugWithFormat:@"CON: %@", self->flatContents];
   return self->flatContents;
 }
 
 - (NSData *)flatContentForPartPath:(NSArray *)_partPath {
-  return [[self flatContents] objectForKey:
-                               [_partPath componentsJoinedByString:@"."]];
+  NSString *pid;
+  
+  pid = _partPath ? [_partPath componentsJoinedByString:@"."] : @"";
+  return [[self flatContents] objectForKey:pid];
 }
 
 /* viewer components */
 
   mt = [[_info valueForKey:@"type"]    lowercaseString];
   st = [[_info valueForKey:@"subtype"] lowercaseString];
-
+  
   if ([mt isEqualToString:@"multipart"]) {
     if ([st isEqualToString:@"mixed"])
       return [self mixedViewer];
+    if ([st isEqualToString:@"signed"]) // TODO: temporary workaround
+      return [self mixedViewer];
   }
   else if ([mt isEqualToString:@"text"]) {
     if ([st isEqualToString:@"plain"])
   }
   else if ([mt isEqualToString:@"image"])
     return [self imageViewer];
+  else if ([mt isEqualToString:@"application"]) {
+    /*
+      octed-stream (generate download link?)
+      pgp-viewer
+    */
+  }
   
   [self logWithFormat:@"ERROR: found no viewer for MIME type: %@/%@", mt, st];
   return nil;
 }
 
+/* debugging */
+
+- (BOOL)isDebuggingEnabled {
+  return NO;
+}
+
 @end /* UIxMailRenderingContext */
index 8abb8a2689a37ce3e51fbc1b3ec8617688a7d8c0..a1a6e8a2436b81716353b2891fd736ae860e021d 100644 (file)
   if (fetchPart) {
     NSString *k;
     
-    k = [[@"body[" stringByAppendingString:_p] stringByAppendingString:@"]"];
+    if ([_p length] > 0) {
+      k = [[@"body[" stringByAppendingString:_p] stringByAppendingString:@"]"];
+    }
+    else {
+      /*
+       for some reason we need to add ".TEXT" for plain text stuff on root
+       entities?
+       TODO: check with HTML
+      */
+      k = @"body[text]";
+    }
     [_keys addObject:k];
   }
   
   id result;
   
   keys   = [self contentFetchKeys];
+  [self debugWithFormat:@"fetch keys: %@", keys];
+  
   result = [[self clientObject] fetchParts:keys];
   result = [result valueForKey:@"RawResponse"]; // hackish
   result = [result objectForKey:@"fetch"]; // Note: -valueForKey: doesn't work!
     key  = [keys objectAtIndex:i];
     data = [[result objectForKey:key] objectForKey:@"data"];
     
-    if (![data isNotNull]) continue;
-    
-    if ([key hasPrefix:@"body["]) {
+    if (![data isNotNull]) {
+      [self debugWithFormat:@"got no data fork key: %@", key];
+      continue;
+    }
+
+    if ([key isEqualToString:@"body[text]"])
+      key = @""; // see key collector
+    else if ([key hasPrefix:@"body["]) {
       NSRange r;
       
       key = [key substringFromIndex:5];
index 27f42dca521c102631a68b11d5a0fab575d2dd28..33dfbe1b04726220aa5142e7e070a02c182f5657 100644 (file)
@@ -1,3 +1,3 @@
 # $Id$
 
-SUBMINOR_VERSION:=16
+SUBMINOR_VERSION:=17