From 59caeaf0bdde0619d5b9f3e81a08971c2a0dbbfb Mon Sep 17 00:00:00 2001 From: Ken Grigsby Date: Fri, 19 Apr 2013 17:29:04 -0500 Subject: Implemented Address::RFC822StringForAddresses and Address::nonEncodedRFC822StringForAddresses and ObjC counterparts --- src/core/abstract/MCAddress.cc | 26 ++++++++++++++++++++++++++ src/core/abstract/MCAddress.h | 3 +++ src/core/renderer/MCAddressDisplay.cpp | 10 +--------- src/objc/abstract/MCOAddress.h | 15 +++++++++++++++ src/objc/abstract/MCOAddress.mm | 14 ++++++++++++++ tests/test-all.mm | 19 ++++++++++++++++--- 6 files changed, 75 insertions(+), 12 deletions(-) diff --git a/src/core/abstract/MCAddress.cc b/src/core/abstract/MCAddress.cc index 4f6fc303..dce52cff 100644 --- a/src/core/abstract/MCAddress.cc +++ b/src/core/abstract/MCAddress.cc @@ -206,6 +206,32 @@ Array * Address::addressesWithNonEncodedRFC822String(String * string) return result; } +String * Address::RFC822StringForAddresses(Array * addresses) +{ + String * result = String::string(); + for(unsigned int i = 0 ; i < addresses->count() ; i ++) { + Address * address = (Address *) addresses->objectAtIndex(i); + if (i != 0) { + result->appendString(MCSTR(", ")); + } + result->appendString(address->RFC822String()); + } + return result; +} + +String * Address::nonEncodedRFC822StringForAddresses(Array * addresses) +{ + String * result = String::string(); + for(unsigned int i = 0 ; i < addresses->count() ; i ++) { + Address * address = (Address *) addresses->objectAtIndex(i); + if (i != 0) { + result->appendString(MCSTR(", ")); + } + result->appendString(address->nonEncodedRFC822String()); + } + return result; +} + String * Address::description() { String * result = String::string(); diff --git a/src/core/abstract/MCAddress.h b/src/core/abstract/MCAddress.h index 4c132ed3..ad8a36f6 100644 --- a/src/core/abstract/MCAddress.h +++ b/src/core/abstract/MCAddress.h @@ -21,6 +21,9 @@ namespace mailcore { static Array * addressesWithRFC822String(String * string); static Array * addressesWithNonEncodedRFC822String(String * string); + static String * RFC822StringForAddresses(Array * addresses); + static String * nonEncodedRFC822StringForAddresses(Array * addresses); + virtual void setDisplayName(String * displayName); virtual String * displayName(); diff --git a/src/core/renderer/MCAddressDisplay.cpp b/src/core/renderer/MCAddressDisplay.cpp index 842dd0df..4a0fe44b 100644 --- a/src/core/renderer/MCAddressDisplay.cpp +++ b/src/core/renderer/MCAddressDisplay.cpp @@ -56,15 +56,7 @@ String * AddressDisplay::veryShortDisplayStringForAddress(Address * address) String * AddressDisplay::displayStringForAddresses(Array * addresses) { - String * result = String::string(); - for(unsigned int i = 0 ; i < addresses->count() ; i ++) { - Address * address = (Address *) addresses->objectAtIndex(i); - if (i != 0) { - result->appendString(MCSTR(", ")); - } - result->appendString(displayStringForAddress(address)); - } - return result; + return Address::nonEncodedRFC822StringForAddresses(addresses); } String * AddressDisplay::shortDisplayStringForAddresses(Array * addresses) diff --git a/src/objc/abstract/MCOAddress.h b/src/objc/abstract/MCOAddress.h index 33f2c545..4680edd6 100644 --- a/src/objc/abstract/MCOAddress.h +++ b/src/objc/abstract/MCOAddress.h @@ -61,4 +61,19 @@ @end +@interface NSArray (MCONSArray) + +// The receiver is an NSArray of MCOAddress. +// Returns an NSArray of NSString objects separated by commas that contain the +// RFC822 encoding of the addresses. +// For example: @[ @"DINH Vi=C3=AAt Ho=C3=A0 " ] +- (NSString *) RFC822String; + +// Returns an NSArray of NSString objects separated by commas that contain the +// non-MIME-encoded RFC822 form of the addresses. +// For example: @[ "DINH Viêt Hoà " ] +- (NSString *) nonEncodedRFC822String; + +@end + #endif diff --git a/src/objc/abstract/MCOAddress.mm b/src/objc/abstract/MCOAddress.mm index 6676e1a2..a6fbb728 100644 --- a/src/objc/abstract/MCOAddress.mm +++ b/src/objc/abstract/MCOAddress.mm @@ -149,3 +149,17 @@ MCO_OBJC_SYNTHESIZE_STRING(setMailbox, mailbox) } @end + +@implementation NSArray (MCONSArray) + +- (NSString *) RFC822String +{ + return [NSString mco_stringWithMCString:mailcore::Address::RFC822StringForAddresses([self mco_mcArray])]; +} + +- (NSString *) nonEncodedRFC822String +{ + return [NSString mco_stringWithMCString:mailcore::Address::nonEncodedRFC822StringForAddresses([self mco_mcArray ])]; +} + +@end diff --git a/tests/test-all.mm b/tests/test-all.mm index 97de53fd..6107730e 100644 --- a/tests/test-all.mm +++ b/tests/test-all.mm @@ -272,6 +272,19 @@ static void testAsyncPOP() [[NSRunLoop currentRunLoop] run]; } +static void testAddresses() +{ + mailcore::Address *addr = mailcore::Address::addressWithNonEncodedRFC822String(MCSTR("DINH Viêt Hoà ")); + MCLog("%s %s", MCUTF8DESC(addr->nonEncodedRFC822String()), MCUTF8DESC(addr->RFC822String())); + + mailcore::Array *addresses = mailcore::Address::addressesWithNonEncodedRFC822String(MCSTR("My Email1 , DINH Viêt Hoà ,\"Email3, My\" ")); + MCLog("%s", MCUTF8DESC(addresses)); + mailcore::String *str = mailcore::Address::nonEncodedRFC822StringForAddresses(addresses); + MCLog("%s", MCUTF8DESC(str)); + str = mailcore::Address::RFC822StringForAddresses(addresses); + MCLog("%s", MCUTF8DESC(str)); +} + void testObjC() { MCOIMAPSession *session = [[MCOIMAPSession alloc] init]; @@ -317,7 +330,7 @@ void testAll() displayName = MCSTR("My Email"); mailcore::AutoreleasePool * pool = new mailcore::AutoreleasePool(); - + mailcore::logEnabled = true; mailstream_debug = 1; //mailcore::Data * data = testMessageBuilder(); @@ -328,8 +341,8 @@ void testAll() //testAsyncSMTP(data); //testAsyncIMAP(); //testAsyncPOP(); - - testObjC(); + testAddresses(); + //testObjC(); MCLog("pool release"); pool->release(); -- cgit v1.2.3