]> err.no Git - sope/commitdiff
added some header-access convenience methods
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Wed, 20 Jul 2005 10:49:55 +0000 (10:49 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Wed, 20 Jul 2005 10:49:55 +0000 (10:49 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@924 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-mime/ChangeLog
sope-mime/NGImap4/NGImap4DataSource.m
sope-mime/NGMail/ChangeLog
sope-mime/NGMail/NGMimeMessage.h
sope-mime/NGMail/NGMimeMessage.m
sope-mime/NGMime/ChangeLog
sope-mime/NGMime/NGMimeBodyPart.h
sope-mime/NGMime/NGMimeBodyPart.m
sope-mime/Version

index cd71f779540a1732c313c6dc2003b1c3524f9297..177c8e6a51f18c891071cc4e9675f2d49b77717b 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-20  Helge Hess  <helge.hess@opengroupware.org>
+
+       * NGMime, NGMail: added some convinience methods to access the header
+         fields of a part (v4.5.229)
+
 2005-07-15  Helge Hess  <helge.hess@opengroupware.org>
 
        * NGImap4: fixed a parsing bug in ACL responses (v4.5.228)
index b3d4359621f1cb3fd422d21bc8dfd1e1a69f84a2..8c4a710e62e75fcc7af0a90cf39a8d7d48d2b69c 100644 (file)
@@ -18,7 +18,6 @@
   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.
 */
-//$Id: NGImap4DataSource.m 9 2004-08-20 18:40:42Z helge $
 
 #include "NGImap4DataSource.h"
 #include <NGStreams/NGSocketExceptions.h>
index 0a483bf1be1f7e9f982af13a08a3e46ecbe8ed53..1e280cdc50fc68cbef942523317d2e996607acf1 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-20  Helge Hess  <helge.hess@opengroupware.org>
+
+       * NGMimeMessage.m: added some convinience methods to access the header
+         fields of a message
+
 2005-07-12  Helge Hess  <helge.hess@opengroupware.org>
 
        * NGMimeMessage.m: copy hashmap on object creation to make it immutable
index d291ea10a316f537a5734f3b605d6c8f7b338a73..3954bc09ee1dc3bec950776706a4bac81eeba3ee 100644 (file)
   NGMimeMessage represents a RFC822 message with MIME extensions.
 */
 
+@class NSString, NSArray, NSDictionary, NSEnumerator;
+@class NGHashMap;
+@class NGMimeType;
+
 @interface NGMimeMessage : NSObject < NGMimePart >
 {
 @protected
@@ -42,7 +46,7 @@
 + (id)messageWithHeader:(NGHashMap *)_headers;
 - (id)initWithHeader:(NGHashMap *)_headers; // designated initializer
 
-// NGPart
+/* NGPart */
 
 - (NSEnumerator *)valuesOfHeaderFieldWithName:(NSString *)_name;
 - (NSEnumerator *)headerFieldNames;
@@ -50,7 +54,7 @@
 - (void)setBody:(id)_body;
 - (id)body;
 
-// NGMimePart
+/* NGMimePart */
 
 - (NGMimeType *)contentType;
 - (NSString *)contentId;
 - (NSString *)encoding;
 - (NSString *)contentDescription;
 
+/* convenience */
+
+- (NSString *)headerForKey:(NSString *)_key;
+- (NSArray *)headersForKey:(NSString *)_key;
+- (NSArray *)headerKeys;
+- (NSDictionary *)headers;
+- (NSString *)headersAsString;
+
 @end
 
 #endif /* __NGMail_NGMimeMessage_H__ */
index 7c2c180a9f345fb192df4cb9b9c53d6698128575..0664546e0f72b72d1c15b09406ffcbd728fe3f2e 100644 (file)
@@ -140,15 +140,84 @@ static NGMimeType *defaultDataType = nil;
   return [self->header objectForKey:@"content-description"];
 }
 
+/* convenience */
+
+- (NSString *)headerForKey:(NSString *)_key {
+  return [[self->header objectEnumeratorForKey:_key] nextObject];
+}
+
+- (NSArray *)headersForKey:(NSString *)_key {
+  NSEnumerator   *values;
+  NSMutableArray *array;
+  id value;
+  
+  if ((values = [self->header objectEnumeratorForKey:_key]) == nil)
+    return nil;
+  
+  array = [NSMutableArray arrayWithCapacity:4];
+  while ((value = [values nextObject]) != nil)
+    [array addObject:value];
+  return array;
+}
+
+- (NSArray *)headerKeys {
+  NSEnumerator *values;
+  NSMutableArray *array  = nil;
+  id name = nil;
+
+  if ((values = [self->header keyEnumerator]) == nil)
+    return nil;
+  
+  array = [[NSMutableArray alloc] init];
+  while ((name = [values nextObject]) != nil)
+    [array addObject:name];
+
+  name = [array copy];
+  [array release];
+  
+  return [name autorelease];
+}
+
+- (NSDictionary *)headers {
+  return [self->header asDictionary];
+}
+
+- (NSString *)headersAsString {
+  // TODO: not correct for MIME
+  NSMutableString *ms;
+  NSEnumerator *keys;
+  NSString     *key;
+  
+  ms = [NSMutableString stringWithCapacity:1024];
+  
+  /* headers */
+  keys = [[self headerKeys] objectEnumerator];
+  while ((key = [keys nextObject]) != nil) {
+    NSEnumerator *vals;
+    id val;
+    
+    vals = [[self headersForKey:key] objectEnumerator];
+    while ((val = [vals nextObject])) {
+      [ms appendString:key];
+      [ms appendString:@": "];
+      [ms appendString:[val stringValue]];
+      [ms appendString:@"\r\n"];
+    }
+  }
+  return ms;
+}
+
 /* description */
 
 - (NSString *)description {
-  NSMutableString *d = [NSMutableString stringWithCapacity:64];
-  id b = [self body];
+  NSMutableString *d;
+  id b;
 
+  d = [NSMutableString stringWithCapacity:64];
   [d appendFormat:@"<%@[0x%08X]: header=%@",
        NSStringFromClass([self class]), self, self->header];
 
+  b = [self body];
   if ([b isKindOfClass:[NSString class]] || [b isKindOfClass:[NSData class]]) {
     if ([b length] < 512)
       [d appendFormat:@" body=%@", b];
@@ -157,9 +226,8 @@ static NGMimeType *defaultDataType = nil;
   }
   else
     [d appendFormat:@" body=%@", b];
-
+  
   [d appendString:@">"];
-
   return d;
 }
 
index 2b7b435fe90e41858bba0ac2521b7a80fc6f2833..d4689064e7c958e16a9a6139712832227c6f0a4f 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-20  Helge Hess  <helge.hess@opengroupware.org>
+
+       * NGMimeBodyPart.m: added some convinience methods to access the header
+         fields of a part
+
 2005-07-13 Marcus Mueller  <znek@mulle-kybernetik.com>
 
        * NGMime.xcodeproj: synced with GNUmakefile
index 0f3b6a77843a901091bc37f76cb658af0e626f22..82057b131dacc0a1ced6ebcfb35053402a2fc9b3 100644 (file)
 /*
   NGMimeBodyPart is a part that is contained in a multipart body.
 */
+
+@class NSString, NSArray, NSDictionary, NSEnumerator;
+@class NGHashMap;
+
 @interface NGMimeBodyPart : NSObject < NGMimePart >
 {
 @protected
 - (NSString *)encoding;
 - (NSString *)contentDescription;
 
+/* convenience */
+
+- (NSString *)headerForKey:(NSString *)_key;
+- (NSArray *)headersForKey:(NSString *)_key;
+- (NSArray *)headerKeys;
+- (NSDictionary *)headers;
+- (NSString *)headersAsString;
+
 @end
 
 #endif /* __NGMime_NGMimeBodyPart_H__ */
index 996340029437b566163ace5bc121799760726e0d..6c0d6fbb8c3b6d0f1c0357c22906677c17b2cc71 100644 (file)
@@ -80,6 +80,73 @@ static NGMimeType *defaultType = nil;
   return self->body;
 }
 
+/* convenience */
+
+- (NSString *)headerForKey:(NSString *)_key {
+  return [[self->header objectEnumeratorForKey:_key] nextObject];
+}
+
+- (NSArray *)headersForKey:(NSString *)_key {
+  NSEnumerator   *values;
+  NSMutableArray *array;
+  id value;
+  
+  if ((values = [self->header objectEnumeratorForKey:_key]) == nil)
+    return nil;
+  
+  array = [NSMutableArray arrayWithCapacity:4];
+  while ((value = [values nextObject]) != nil)
+    [array addObject:value];
+  return array;
+}
+
+- (NSArray *)headerKeys {
+  NSEnumerator *values;
+  NSMutableArray *array  = nil;
+  id name = nil;
+
+  if ((values = [self->header keyEnumerator]) == nil)
+    return nil;
+  
+  array = [[NSMutableArray alloc] init];
+  while ((name = [values nextObject]) != nil)
+    [array addObject:name];
+
+  name = [array copy];
+  [array release];
+  
+  return [name autorelease];
+}
+
+- (NSDictionary *)headers {
+  return [self->header asDictionary];
+}
+
+- (NSString *)headersAsString {
+  // TODO: not correct for MIME
+  NSMutableString *ms;
+  NSEnumerator *keys;
+  NSString     *key;
+  
+  ms = [NSMutableString stringWithCapacity:1024];
+  
+  /* headers */
+  keys = [[self headerKeys] objectEnumerator];
+  while ((key = [keys nextObject]) != nil) {
+    NSEnumerator *vals;
+    id val;
+    
+    vals = [[self headersForKey:key] objectEnumerator];
+    while ((val = [vals nextObject])) {
+      [ms appendString:key];
+      [ms appendString:@": "];
+      [ms appendString:[val stringValue]];
+      [ms appendString:@"\r\n"];
+    }
+  }
+  return ms;
+}
+
 /* NGMimePart */
 
 - (NGMimeType *)contentType {
@@ -128,9 +195,11 @@ static NGMimeType *defaultType = nil;
 /* description */
 
 - (NSString *)description {
-  NSMutableString *d = [[NSMutableString alloc] init];
+  NSMutableString *d;
   id b = [self body];
 
+  d = [NSMutableString stringWithCapacity:128];
+
   [d appendFormat:@"<%@[0x%08X]: header=%@",
        NSStringFromClass([self class]), self, self->header];
 
@@ -150,10 +219,8 @@ static NGMimeType *defaultType = nil;
   else
     [d appendFormat:@" body=%@", b];
   
-
   [d appendString:@">"];
-
-  return AUTORELEASE(d);
+  return d;
 }
 
 @end /* NGMimeBodyPart */
index 4948443dda7e3ffdfa0a9bb4db0f012fb8714e65..6a6dd3ab354053201ed6a45b2726d30a527e428e 100644 (file)
@@ -2,7 +2,7 @@
 
 MAJOR_VERSION:=4
 MINOR_VERSION:=5
-SUBMINOR_VERSION:=228
+SUBMINOR_VERSION:=229
 
 # v4.5.214 requires libNGExtensions v4.5.146
 # v4.2.149 requires libNGStreams    v4.2.34