]> err.no Git - scalable-opengroupware.org/commitdiff
fixed content decoding
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Tue, 5 Oct 2004 12:34:15 +0000 (12:34 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Tue, 5 Oct 2004 12:34:15 +0000 (12:34 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@357 d1b88da0-ebda-0310-925b-ed51d893ca5b

SOGo/UI/Mailer/ChangeLog
SOGo/UI/Mailer/UIxMailPartTextViewer.m
SOGo/UI/Mailer/UIxMailPartViewer.h
SOGo/UI/Mailer/UIxMailPartViewer.m
SOGo/UI/Mailer/Version

index 7d4259c335b472c667d273c594ff44ba852ead06..12789f638735b5a9449b4b922c85ec8e8faecc90 100644 (file)
@@ -1,5 +1,13 @@
 2004-10-05  Helge Hess  <helge.hess@opengroupware.org>
 
+       * v0.9.19
+
+       * UIxMailPartViewer.m: added content decoding for QP, base64 and 7bit,
+         added proper charset decoding
+       
+       * UIxMailPartTextViewer.m: moved content => NSString conversion to
+         UIxMailPartViewer.m
+       
        * v0.9.18
        
        * UIxMailPartViewer.m: added support methods for caches, added -sleep
index d0c28c2a363ae66bd4bac7d00ff878982b5703c2..990a40601249742c0d00a04eeb99047ee9424dfe 100644 (file)
 
 /* accessors */
 
-- (NSString *)flatContentAsString {
-  /* Note: we even have the line count in the body-info! */
-  NSString *charset, *enc;
-  NSString *s;
-  NSData   *content;
-  
-  if ((content = [self flatContent]) == nil) {
-    [self logWithFormat:@"ERROR: got no text content: %@", [self partPath]];
-    return nil;
-  }
-
-  charset =
-    [[[self bodyInfo] objectForKey:@"parameterList"] objectForKey:@"charset"];
-  enc = [[self bodyInfo] objectForKey:@"encoding"];
-
-  // 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];
-}
-
 @end /* UIxMailPartTextViewer */
index a5551f08c0e35f155f10e1ce34fdad4edbf44860..551085e722adf145fbb67fb76494c46f1f0491f9 100644 (file)
@@ -48,6 +48,8 @@
 - (id)bodyInfo;
 
 - (NSData *)flatContent;
+- (NSData *)decodedFlatContent;
+- (NSString *)flatContentAsString;
 
 /* caches */
 
index e172aac42062d4062ee8ad0f5dc0c8d2c1ef08a0..f032bb7b11c0fc7658afa6023100805bab0f842f 100644 (file)
@@ -22,6 +22,7 @@
 #include "UIxMailPartViewer.h"
 #include "UIxMailRenderingContext.h"
 #include "WOContext+UIxMailer.h"
+#include <NGExtensions/NSString+Encoding.h>
 #include "common.h"
 
 @implementation UIxMailPartViewer
   return self->flatContent;
 }
 
+- (NSData *)decodedFlatContent {
+  NSString *enc;
+  
+  enc = [[[self bodyInfo] objectForKey:@"encoding"] lowercaseString];
+  
+  if ([enc isEqualToString:@"7bit"])
+    return [self flatContent];
+  
+  if ([enc isEqualToString:@"base64"])
+    return [[self flatContent] dataByDecodingBase64];
+
+  if ([enc isEqualToString:@"quoted-printable"])
+    return [[self flatContent] dataByDecodingQuotedPrintable];
+  
+  [self logWithFormat:@"ERROR: unsupported MIME encoding: %@", enc];
+  return [self flatContent];
+}
+
+- (NSString *)flatContentAsString {
+  /* Note: we even have the line count in the body-info! */
+  NSString *charset;
+  NSString *s;
+  NSData   *content;
+  
+  if ((content = [self decodedFlatContent]) == nil) {
+    [self logWithFormat:@"ERROR: got no text content: %@", [self partPath]];
+    return nil;
+  }
+  
+  charset =
+    [[[self bodyInfo] objectForKey:@"parameterList"] objectForKey:@"charset"];
+  charset = [charset lowercaseString];
+  
+  // TODO: properly decode charset, might need to handle encoding?
+  
+  if ([charset length] > 0) {
+    s = [NSString stringWithData:content usingEncodingNamed:charset];
+  }
+  else {
+    s = [[NSString alloc] initWithData:content encoding:NSUTF8StringEncoding];
+    s = [s autorelease];
+  }
+  if (s == nil) {
+    [self logWithFormat:
+           @"ERROR: could not convert content to text, charset: '%@'",
+           charset];
+  }
+  return s;
+}
+
 @end /* UIxMailPartViewer */
index cd35ad0fc7134df7fcc93aab18344f258f338c2b..93c8cd1ddfe4862984d2fe8dffb82de3a02d010b 100644 (file)
@@ -1,3 +1,3 @@
 # $Id$
 
-SUBMINOR_VERSION:=18
+SUBMINOR_VERSION:=19