From 6280c6a3d1daad83b8054730d430edbc91bc6d2d Mon Sep 17 00:00:00 2001 From: Ryan Johnson Date: Thu, 27 Jun 2013 23:56:19 -0700 Subject: Allows for custom headers to be set in message * Adds setHeaders, addHeader, getHeader to {MCO,MC}MessageHeader * Exposes MCHashMap iterator for more effecient iteration --- src/core/abstract/MCMessageHeader.cc | 36 +++++++++++++++++++++++++++++++++++ src/core/abstract/MCMessageHeader.h | 9 +++++++-- src/core/basetypes/MCHashMap.cc | 9 --------- src/core/basetypes/MCHashMap.h | 12 +++++++++--- src/objc/abstract/MCOMessageHeader.h | 3 +++ src/objc/abstract/MCOMessageHeader.mm | 8 ++++++++ 6 files changed, 63 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/core/abstract/MCMessageHeader.cc b/src/core/abstract/MCMessageHeader.cc index ac792111..a91396e5 100644 --- a/src/core/abstract/MCMessageHeader.cc +++ b/src/core/abstract/MCMessageHeader.cc @@ -45,6 +45,7 @@ MessageHeader::MessageHeader(MessageHeader * other) setDate(other->date()); setReceivedDate(other->receivedDate()); setUserAgent(other->mUserAgent); + setExtraHeaders(other->mExtraHeaders); } void MessageHeader::init(bool generateDate, bool generateMessageID) @@ -62,6 +63,7 @@ void MessageHeader::init(bool generateDate, bool generateMessageID) mDate = (time_t) -1; mReceivedDate = (time_t) -1; mUserAgent = NULL; + mExtraHeaders = NULL; if (generateDate) { time_t date; @@ -113,6 +115,7 @@ MessageHeader::~MessageHeader() MC_SAFE_RELEASE(mReplyTo); MC_SAFE_RELEASE(mSubject); MC_SAFE_RELEASE(mUserAgent); + MC_SAFE_RELEASE(mExtraHeaders); } String * MessageHeader::description() @@ -292,6 +295,24 @@ String * MessageHeader::userAgent() return mUserAgent; } +void MessageHeader::setExtraHeaders(HashMap * headers) { + MC_SAFE_REPLACE_COPY(HashMap, mExtraHeaders, headers); +} + +void MessageHeader::addHeader(String * header, String * value) { + if (!mExtraHeaders) { + mExtraHeaders = new HashMap(); + } + mExtraHeaders->setObjectForKey(header, value); +} + +String * MessageHeader::getHeader(String *header) { + if (mExtraHeaders) { + return (String *)mExtraHeaders->objectForKey(header); + } + return NULL; +} + String * MessageHeader::extractedSubject() { if (subject() == NULL) @@ -822,6 +843,21 @@ struct mailimf_fields * MessageHeader::createIMFFieldsAndFilterBcc(bool filterBc field = mailimf_field_new_custom(strdup("X-Mailer"), strdup(mUserAgent->UTF8Characters())); mailimf_fields_add(fields, field); } + + if (mExtraHeaders != NULL) { + HashMapIter *iter; + + for (iter = mExtraHeaders->iteratorBegin(); iter != NULL; iter = mExtraHeaders->iteratorNext(iter)) { + struct mailimf_field * field; + String * key; + String * value; + + key = (String *)iter->key; + value = (String *)iter->value; + field = mailimf_field_new_custom(strdup(key->UTF8Characters()), strdup(value->UTF8Characters())); + mailimf_fields_add(fields, field); + } + } return fields; } diff --git a/src/core/abstract/MCMessageHeader.h b/src/core/abstract/MCMessageHeader.h index f90c1c2d..b48c461e 100644 --- a/src/core/abstract/MCMessageHeader.h +++ b/src/core/abstract/MCMessageHeader.h @@ -54,8 +54,12 @@ namespace mailcore { virtual void setUserAgent(String * userAgent); virtual String * userAgent(); - - virtual String * extractedSubject(); + + virtual void addHeader(String *header, String *value); + virtual void setExtraHeaders(HashMap *headers); + virtual String * getHeader(String *header); + + String * extractedSubject(); virtual String * partialExtractedSubject(); virtual void importHeadersData(Data * data); @@ -89,6 +93,7 @@ namespace mailcore { time_t mDate; time_t mReceivedDate; String * mUserAgent; + HashMap * mExtraHeaders; void init(bool generateDate, bool generateMessageID); Array * recipientWithReplyAll(bool replyAll, bool includeTo, bool includeCc, Array * senderEmails); }; diff --git a/src/core/basetypes/MCHashMap.cc b/src/core/basetypes/MCHashMap.cc index 164198f5..524221fa 100644 --- a/src/core/basetypes/MCHashMap.cc +++ b/src/core/basetypes/MCHashMap.cc @@ -10,15 +10,6 @@ using namespace mailcore; -namespace mailcore { - struct HashMapCell { - unsigned int func; - Object * key; - Object * value; - HashMapCell * next; - }; -} - #define CHASH_DEFAULTSIZE 13 #define CHASH_MAXDEPTH 3 diff --git a/src/core/basetypes/MCHashMap.h b/src/core/basetypes/MCHashMap.h index 40751b8e..75bcab47 100644 --- a/src/core/basetypes/MCHashMap.h +++ b/src/core/basetypes/MCHashMap.h @@ -10,7 +10,12 @@ namespace mailcore { class String; class Array; - struct HashMapCell; + struct HashMapCell { + unsigned int func; + Object * key; + Object * value; + HashMapCell * next; + }; typedef HashMapCell HashMapIter; class HashMap : public Object { @@ -28,6 +33,9 @@ namespace mailcore { virtual Array * allValues(); virtual void removeAllObjects(); + HashMapIter * iteratorBegin(); + HashMapIter * iteratorNext(HashMapIter * iter); + public: // subclass behavior HashMap(HashMap * o); virtual String * description(); @@ -37,8 +45,6 @@ namespace mailcore { unsigned int mAllocated; unsigned int mCount; void ** mCells; - HashMapIter * iteratorBegin(); - HashMapIter * iteratorNext(HashMapIter * iter); void allocate(unsigned int size); void init(); }; diff --git a/src/objc/abstract/MCOMessageHeader.h b/src/objc/abstract/MCOMessageHeader.h index 6e8eb9bf..67a94362 100644 --- a/src/objc/abstract/MCOMessageHeader.h +++ b/src/objc/abstract/MCOMessageHeader.h @@ -57,6 +57,9 @@ /** User-Agent.*/ @property (nonatomic, copy) NSString * userAgent; +- (void)addHeader:(NSString *)header value:(NSString *)value; +- (NSString *)getHeader:(NSString *)header; + /** Extracted subject (also remove square brackets).*/ - (NSString *) extractedSubject; diff --git a/src/objc/abstract/MCOMessageHeader.mm b/src/objc/abstract/MCOMessageHeader.mm index 6729894d..4dd9b35e 100644 --- a/src/objc/abstract/MCOMessageHeader.mm +++ b/src/objc/abstract/MCOMessageHeader.mm @@ -94,6 +94,14 @@ MCO_OBJC_SYNTHESIZE_ARRAY(setReplyTo, replyTo) MCO_OBJC_SYNTHESIZE_STRING(setSubject, subject) MCO_OBJC_SYNTHESIZE_STRING(setUserAgent, userAgent) +- (void)addHeader:(NSString *)header value:(NSString *)value { + _nativeHeader->addHeader(MCO_FROM_OBJC(mailcore::String, header), MCO_FROM_OBJC(mailcore::String, value)); +} + +- (NSString *)getHeader:(NSString *)header { + return MCO_TO_OBJC(_nativeHeader->getHeader(MCO_FROM_OBJC(mailcore::String, header))); +} + - (NSString *) extractedSubject { return MCO_OBJC_BRIDGE_GET(extractedSubject); -- cgit v1.2.3 From 08d731fc900a40142d6d5d2b2e62ec0fb46e2eea Mon Sep 17 00:00:00 2001 From: Ryan Johnson Date: Mon, 1 Jul 2013 23:53:34 -0700 Subject: Fixes for PR feedback * Reverts MCHashMap changes, uses mc_foreachdictionaryKeyAndValue * Adds getter for mExtraHeaders to MessageHeader * Adds removeHeader * Tweaks method names --- src/core/abstract/MCMessageHeader.cc | 30 +++++++++++++++++------------- src/core/abstract/MCMessageHeader.h | 7 +++++-- src/core/basetypes/MCHashMap.cc | 9 +++++++++ src/core/basetypes/MCHashMap.h | 12 +++--------- src/objc/abstract/MCOMessageHeader.h | 4 ++-- src/objc/abstract/MCOMessageHeader.mm | 8 ++++---- 6 files changed, 40 insertions(+), 30 deletions(-) (limited to 'src') diff --git a/src/core/abstract/MCMessageHeader.cc b/src/core/abstract/MCMessageHeader.cc index a91396e5..76b52e55 100644 --- a/src/core/abstract/MCMessageHeader.cc +++ b/src/core/abstract/MCMessageHeader.cc @@ -299,16 +299,26 @@ void MessageHeader::setExtraHeaders(HashMap * headers) { MC_SAFE_REPLACE_COPY(HashMap, mExtraHeaders, headers); } -void MessageHeader::addHeader(String * header, String * value) { - if (!mExtraHeaders) { +HashMap * MessageHeader::extraHeaders() { + return mExtraHeaders; +} + +void MessageHeader::addHeader(String * name, String * object) { + if (mExtraHeaders == NULL) { mExtraHeaders = new HashMap(); } - mExtraHeaders->setObjectForKey(header, value); + mExtraHeaders->setObjectForKey(name, object); } -String * MessageHeader::getHeader(String *header) { +void MessageHeader::removeHeader(String * name) { + if (mExtraHeaders != NULL) { + mExtraHeaders->removeObjectForKey(name); + } +} + +String * MessageHeader::headerForName(String * name) { if (mExtraHeaders) { - return (String *)mExtraHeaders->objectForKey(header); + return (String *)mExtraHeaders->objectForKey(name); } return NULL; } @@ -845,16 +855,10 @@ struct mailimf_fields * MessageHeader::createIMFFieldsAndFilterBcc(bool filterBc } if (mExtraHeaders != NULL) { - HashMapIter *iter; - - for (iter = mExtraHeaders->iteratorBegin(); iter != NULL; iter = mExtraHeaders->iteratorNext(iter)) { + mc_foreachdictionaryKeyAndValue(String, header, String, value, mExtraHeaders) { struct mailimf_field * field; - String * key; - String * value; - key = (String *)iter->key; - value = (String *)iter->value; - field = mailimf_field_new_custom(strdup(key->UTF8Characters()), strdup(value->UTF8Characters())); + field = mailimf_field_new_custom(strdup(header->UTF8Characters()), strdup(value->UTF8Characters())); mailimf_fields_add(fields, field); } } diff --git a/src/core/abstract/MCMessageHeader.h b/src/core/abstract/MCMessageHeader.h index b48c461e..0056028e 100644 --- a/src/core/abstract/MCMessageHeader.h +++ b/src/core/abstract/MCMessageHeader.h @@ -55,9 +55,12 @@ namespace mailcore { virtual void setUserAgent(String * userAgent); virtual String * userAgent(); - virtual void addHeader(String *header, String *value); virtual void setExtraHeaders(HashMap *headers); - virtual String * getHeader(String *header); + virtual HashMap * extraHeaders(); + + virtual void addHeader(String *name, String * value); + virtual void removeHeader(String *name); + virtual String * headerForName(String *name); String * extractedSubject(); virtual String * partialExtractedSubject(); diff --git a/src/core/basetypes/MCHashMap.cc b/src/core/basetypes/MCHashMap.cc index 524221fa..164198f5 100644 --- a/src/core/basetypes/MCHashMap.cc +++ b/src/core/basetypes/MCHashMap.cc @@ -10,6 +10,15 @@ using namespace mailcore; +namespace mailcore { + struct HashMapCell { + unsigned int func; + Object * key; + Object * value; + HashMapCell * next; + }; +} + #define CHASH_DEFAULTSIZE 13 #define CHASH_MAXDEPTH 3 diff --git a/src/core/basetypes/MCHashMap.h b/src/core/basetypes/MCHashMap.h index 75bcab47..40751b8e 100644 --- a/src/core/basetypes/MCHashMap.h +++ b/src/core/basetypes/MCHashMap.h @@ -10,12 +10,7 @@ namespace mailcore { class String; class Array; - struct HashMapCell { - unsigned int func; - Object * key; - Object * value; - HashMapCell * next; - }; + struct HashMapCell; typedef HashMapCell HashMapIter; class HashMap : public Object { @@ -33,9 +28,6 @@ namespace mailcore { virtual Array * allValues(); virtual void removeAllObjects(); - HashMapIter * iteratorBegin(); - HashMapIter * iteratorNext(HashMapIter * iter); - public: // subclass behavior HashMap(HashMap * o); virtual String * description(); @@ -45,6 +37,8 @@ namespace mailcore { unsigned int mAllocated; unsigned int mCount; void ** mCells; + HashMapIter * iteratorBegin(); + HashMapIter * iteratorNext(HashMapIter * iter); void allocate(unsigned int size); void init(); }; diff --git a/src/objc/abstract/MCOMessageHeader.h b/src/objc/abstract/MCOMessageHeader.h index 67a94362..134a9598 100644 --- a/src/objc/abstract/MCOMessageHeader.h +++ b/src/objc/abstract/MCOMessageHeader.h @@ -57,8 +57,8 @@ /** User-Agent.*/ @property (nonatomic, copy) NSString * userAgent; -- (void)addHeader:(NSString *)header value:(NSString *)value; -- (NSString *)getHeader:(NSString *)header; +- (void)addHeaderValue:(NSString *)value forName:(NSString *)name; +- (NSString *)headerForName:(NSString *)name; /** Extracted subject (also remove square brackets).*/ - (NSString *) extractedSubject; diff --git a/src/objc/abstract/MCOMessageHeader.mm b/src/objc/abstract/MCOMessageHeader.mm index 4dd9b35e..3c5d4937 100644 --- a/src/objc/abstract/MCOMessageHeader.mm +++ b/src/objc/abstract/MCOMessageHeader.mm @@ -94,12 +94,12 @@ MCO_OBJC_SYNTHESIZE_ARRAY(setReplyTo, replyTo) MCO_OBJC_SYNTHESIZE_STRING(setSubject, subject) MCO_OBJC_SYNTHESIZE_STRING(setUserAgent, userAgent) -- (void)addHeader:(NSString *)header value:(NSString *)value { - _nativeHeader->addHeader(MCO_FROM_OBJC(mailcore::String, header), MCO_FROM_OBJC(mailcore::String, value)); +- (void)addHeaderValue:(NSString *)value forName:(NSString *)name { + _nativeHeader->addHeader(MCO_FROM_OBJC(mailcore::String, name), MCO_FROM_OBJC(mailcore::String, value)); } -- (NSString *)getHeader:(NSString *)header { - return MCO_TO_OBJC(_nativeHeader->getHeader(MCO_FROM_OBJC(mailcore::String, header))); +- (NSString *)headerForName:(NSString *)name { + return MCO_TO_OBJC(_nativeHeader->headerForName((MCO_FROM_OBJC(mailcore::String, name)))); } - (NSString *) extractedSubject -- cgit v1.2.3 From 398e820c4ce6047712effaba5f1c08d095b7c68c Mon Sep 17 00:00:00 2001 From: Ryan Johnson Date: Wed, 3 Jul 2013 00:11:13 -0700 Subject: Whitespace cleanup --- src/core/abstract/MCMessageHeader.cc | 2 +- src/core/abstract/MCMessageHeader.h | 162 +++++++++++++++++------------------ 2 files changed, 82 insertions(+), 82 deletions(-) (limited to 'src') diff --git a/src/core/abstract/MCMessageHeader.cc b/src/core/abstract/MCMessageHeader.cc index 76b52e55..3909db7f 100644 --- a/src/core/abstract/MCMessageHeader.cc +++ b/src/core/abstract/MCMessageHeader.cc @@ -318,7 +318,7 @@ void MessageHeader::removeHeader(String * name) { String * MessageHeader::headerForName(String * name) { if (mExtraHeaders) { - return (String *)mExtraHeaders->objectForKey(name); + return (String *) mExtraHeaders->objectForKey(name); } return NULL; } diff --git a/src/core/abstract/MCMessageHeader.h b/src/core/abstract/MCMessageHeader.h index 0056028e..fce29df3 100644 --- a/src/core/abstract/MCMessageHeader.h +++ b/src/core/abstract/MCMessageHeader.h @@ -8,99 +8,99 @@ #ifdef __cplusplus namespace mailcore { - - class Address; - - class MessageHeader : public Object { - public: - MessageHeader(); - virtual ~MessageHeader(); - - virtual void setMessageID(String * messageID); - virtual String * messageID(); - - virtual void setReferences(Array * /* String */ references); - virtual Array * /* String */ references(); - - virtual void setInReplyTo(Array * /* String */ inReplyTo); - virtual Array * /* String */ inReplyTo(); - - virtual void setDate(time_t date); - virtual time_t date(); - - virtual void setReceivedDate(time_t date); - virtual time_t receivedDate(); - - virtual void setSender(Address * sender); - virtual Address * sender(); - - virtual void setFrom(Address * from); - virtual Address * from(); - - virtual void setTo(Array * /* Address */ to); - virtual Array * /* Address */ to(); - - virtual void setCc(Array * /* Address */ cc); - virtual Array * /* Address */ cc(); - - virtual void setBcc(Array * /* Address */ bcc); - virtual Array * /* Address */ bcc(); - - virtual void setReplyTo(Array * /* Address */ replyTo); - virtual Array * /* Address */ replyTo(); - - virtual void setSubject(String * subject); - virtual String * subject(); - - virtual void setUserAgent(String * userAgent); - virtual String * userAgent(); - + + class Address; + + class MessageHeader : public Object { + public: + MessageHeader(); + virtual ~MessageHeader(); + + virtual void setMessageID(String * messageID); + virtual String * messageID(); + + virtual void setReferences(Array * /* String */ references); + virtual Array * /* String */ references(); + + virtual void setInReplyTo(Array * /* String */ inReplyTo); + virtual Array * /* String */ inReplyTo(); + + virtual void setDate(time_t date); + virtual time_t date(); + + virtual void setReceivedDate(time_t date); + virtual time_t receivedDate(); + + virtual void setSender(Address * sender); + virtual Address * sender(); + + virtual void setFrom(Address * from); + virtual Address * from(); + + virtual void setTo(Array * /* Address */ to); + virtual Array * /* Address */ to(); + + virtual void setCc(Array * /* Address */ cc); + virtual Array * /* Address */ cc(); + + virtual void setBcc(Array * /* Address */ bcc); + virtual Array * /* Address */ bcc(); + + virtual void setReplyTo(Array * /* Address */ replyTo); + virtual Array * /* Address */ replyTo(); + + virtual void setSubject(String * subject); + virtual String * subject(); + + virtual void setUserAgent(String * userAgent); + virtual String * userAgent(); + virtual void setExtraHeaders(HashMap *headers); virtual HashMap * extraHeaders(); - + virtual void addHeader(String *name, String * value); virtual void removeHeader(String *name); virtual String * headerForName(String *name); - + String * extractedSubject(); - virtual String * partialExtractedSubject(); - virtual void importHeadersData(Data * data); - + virtual String * partialExtractedSubject(); + virtual void importHeadersData(Data * data); + virtual MessageHeader * replyHeader(bool replyAll, Array * addressesExcludedFromRecipient); virtual MessageHeader * forwardHeader(); - + public: // subclass behavior - MessageHeader(MessageHeader * other); - virtual String * description(); - virtual Object * copy(); - + MessageHeader(MessageHeader * other); + virtual String * description(); + virtual Object * copy(); + public: // private - virtual void importIMAPEnvelope(struct mailimap_envelope * env); - virtual void importIMAPReferences(Data * data); - virtual void importIMAPInternalDate(struct mailimap_date_time * date); - - virtual struct mailimf_fields * createIMFFieldsAndFilterBcc(bool filterBcc); - virtual void importIMFFields(struct mailimf_fields * fields); - - private: - String * mMessageID; - Array * /* String */ mReferences; - Array * /* String */ mInReplyTo; - Address * mSender; - Address * mFrom; - Array * /* Address */ mTo; - Array * /* Address */ mCc; - Array * /* Address */ mBcc; - Array * /* Address */ mReplyTo; - String * mSubject; - time_t mDate; - time_t mReceivedDate; - String * mUserAgent; + virtual void importIMAPEnvelope(struct mailimap_envelope * env); + virtual void importIMAPReferences(Data * data); + virtual void importIMAPInternalDate(struct mailimap_date_time * date); + + virtual struct mailimf_fields * createIMFFieldsAndFilterBcc(bool filterBcc); + virtual void importIMFFields(struct mailimf_fields * fields); + + private: + String * mMessageID; + Array * /* String */ mReferences; + Array * /* String */ mInReplyTo; + Address * mSender; + Address * mFrom; + Array * /* Address */ mTo; + Array * /* Address */ mCc; + Array * /* Address */ mBcc; + Array * /* Address */ mReplyTo; + String * mSubject; + time_t mDate; + time_t mReceivedDate; + String * mUserAgent; HashMap * mExtraHeaders; - void init(bool generateDate, bool generateMessageID); + void init(bool generateDate, bool generateMessageID); Array * recipientWithReplyAll(bool replyAll, bool includeTo, bool includeCc, Array * senderEmails); - }; - + }; + } #endif -- cgit v1.2.3 From 31762d8a7434268f08ae7dfbf06edc95754efb25 Mon Sep 17 00:00:00 2001 From: Ryan Johnson Date: Wed, 10 Jul 2013 11:23:32 -0500 Subject: Fixes for PR feedback * headerForName -> headerValueForName * setExtraHeaders made private, removed extraHeaders * added removeHeaderForName --- src/core/abstract/MCMessageHeader.cc | 6 +++--- src/core/abstract/MCMessageHeader.h | 7 +++---- src/objc/abstract/MCOMessageHeader.h | 4 +++- src/objc/abstract/MCOMessageHeader.mm | 11 +++++++++-- 4 files changed, 18 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/core/abstract/MCMessageHeader.cc b/src/core/abstract/MCMessageHeader.cc index 3909db7f..2a3552fa 100644 --- a/src/core/abstract/MCMessageHeader.cc +++ b/src/core/abstract/MCMessageHeader.cc @@ -299,8 +299,8 @@ void MessageHeader::setExtraHeaders(HashMap * headers) { MC_SAFE_REPLACE_COPY(HashMap, mExtraHeaders, headers); } -HashMap * MessageHeader::extraHeaders() { - return mExtraHeaders; +Array * MessageHeader::allExtraHeadersNames() { + return mExtraHeaders->allKeys(); } void MessageHeader::addHeader(String * name, String * object) { @@ -316,7 +316,7 @@ void MessageHeader::removeHeader(String * name) { } } -String * MessageHeader::headerForName(String * name) { +String * MessageHeader::headerValueForName(String * name) { if (mExtraHeaders) { return (String *) mExtraHeaders->objectForKey(name); } diff --git a/src/core/abstract/MCMessageHeader.h b/src/core/abstract/MCMessageHeader.h index fce29df3..8da5f980 100644 --- a/src/core/abstract/MCMessageHeader.h +++ b/src/core/abstract/MCMessageHeader.h @@ -55,12 +55,10 @@ namespace mailcore { virtual void setUserAgent(String * userAgent); virtual String * userAgent(); - virtual void setExtraHeaders(HashMap *headers); - virtual HashMap * extraHeaders(); - virtual void addHeader(String *name, String * value); virtual void removeHeader(String *name); - virtual String * headerForName(String *name); + virtual String * headerValueForName(String *name); + virtual Array * allExtraHeadersNames(); String * extractedSubject(); virtual String * partialExtractedSubject(); @@ -98,6 +96,7 @@ namespace mailcore { String * mUserAgent; HashMap * mExtraHeaders; void init(bool generateDate, bool generateMessageID); + void setExtraHeaders(HashMap *headers); Array * recipientWithReplyAll(bool replyAll, bool includeTo, bool includeCc, Array * senderEmails); }; diff --git a/src/objc/abstract/MCOMessageHeader.h b/src/objc/abstract/MCOMessageHeader.h index 134a9598..4177dec9 100644 --- a/src/objc/abstract/MCOMessageHeader.h +++ b/src/objc/abstract/MCOMessageHeader.h @@ -58,7 +58,9 @@ @property (nonatomic, copy) NSString * userAgent; - (void)addHeaderValue:(NSString *)value forName:(NSString *)name; -- (NSString *)headerForName:(NSString *)name; +- (void)removeHeaderForName:(NSString *)name; +- (NSString *)headerValueForName:(NSString *)name; +- (NSArray * /* NSString */)allHeadersNames; /** Extracted subject (also remove square brackets).*/ - (NSString *) extractedSubject; diff --git a/src/objc/abstract/MCOMessageHeader.mm b/src/objc/abstract/MCOMessageHeader.mm index 3c5d4937..429d3761 100644 --- a/src/objc/abstract/MCOMessageHeader.mm +++ b/src/objc/abstract/MCOMessageHeader.mm @@ -98,8 +98,15 @@ MCO_OBJC_SYNTHESIZE_STRING(setUserAgent, userAgent) _nativeHeader->addHeader(MCO_FROM_OBJC(mailcore::String, name), MCO_FROM_OBJC(mailcore::String, value)); } -- (NSString *)headerForName:(NSString *)name { - return MCO_TO_OBJC(_nativeHeader->headerForName((MCO_FROM_OBJC(mailcore::String, name)))); +- (NSString *)headerValueForName:(NSString *)name { + return MCO_TO_OBJC(_nativeHeader->headerValueForName((MCO_FROM_OBJC(mailcore::String, name)))); +} +- (void)removeHeaderForName:(NSString *)name { + _nativeHeader->removeHeader(MCO_FROM_OBJC(mailcore::String, name)); +} + +- (NSArray * /* NSString */)allHeadersNames { + return MCO_TO_OBJC(_nativeHeader->allExtraHeadersNames()); } - (NSString *) extractedSubject -- cgit v1.2.3 From 6594f1527f9392ed74201d726b0c6aa6897e372b Mon Sep 17 00:00:00 2001 From: Ryan Johnson Date: Thu, 11 Jul 2013 18:45:04 -0500 Subject: Adds NULL check and style cleanup * Adds check for mExtraHeaders == NULL to all allExtraHeadersNames() * Makes mExtraHeaders == NULL checks more consistent * Cleans up code formatting to be more consistent --- src/core/abstract/MCMessageHeader.cc | 33 +++++++++++++++++++-------------- tests/test-all.mm | 3 ++- 2 files changed, 21 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/core/abstract/MCMessageHeader.cc b/src/core/abstract/MCMessageHeader.cc index 2a3552fa..bdeb6907 100644 --- a/src/core/abstract/MCMessageHeader.cc +++ b/src/core/abstract/MCMessageHeader.cc @@ -295,32 +295,37 @@ String * MessageHeader::userAgent() return mUserAgent; } -void MessageHeader::setExtraHeaders(HashMap * headers) { +void MessageHeader::setExtraHeaders(HashMap * headers) +{ MC_SAFE_REPLACE_COPY(HashMap, mExtraHeaders, headers); } -Array * MessageHeader::allExtraHeadersNames() { +Array * MessageHeader::allExtraHeadersNames() +{ + if (mExtraHeaders == NULL) + return Array::array(); return mExtraHeaders->allKeys(); } -void MessageHeader::addHeader(String * name, String * object) { - if (mExtraHeaders == NULL) { +void MessageHeader::addHeader(String * name, String * object) +{ + if (mExtraHeaders == NULL) mExtraHeaders = new HashMap(); - } mExtraHeaders->setObjectForKey(name, object); } -void MessageHeader::removeHeader(String * name) { - if (mExtraHeaders != NULL) { - mExtraHeaders->removeObjectForKey(name); - } +void MessageHeader::removeHeader(String * name) +{ + if (mExtraHeaders == NULL) + return; + mExtraHeaders->removeObjectForKey(name); } -String * MessageHeader::headerValueForName(String * name) { - if (mExtraHeaders) { - return (String *) mExtraHeaders->objectForKey(name); - } - return NULL; +String * MessageHeader::headerValueForName(String * name) +{ + if (mExtraHeaders == NULL) + return NULL; + return (String *) mExtraHeaders->objectForKey(name); } String * MessageHeader::extractedSubject() diff --git a/tests/test-all.mm b/tests/test-all.mm index d4b00762..88eeabf1 100644 --- a/tests/test-all.mm +++ b/tests/test-all.mm @@ -53,9 +53,10 @@ static mailcore::Data * testMessageBuilder() bcc->addObject(mailcore::Address::addressWithDisplayName(MCSTR("Hidden Recipient"), MCSTR("foobar@bcc-recipient.org"))); msg->header()->setTo(to); msg->header()->setBcc(bcc); - msg->header()->addHeader(MCSTR("X-Custom-Header"), MCSTR("Custom Header Value")); to->release(); bcc->release(); + MCAssert(msg->header()->allExtraHeadersNames()->count() == 0); + msg->header()->addHeader(MCSTR("X-Custom-Header"), MCSTR("Custom Header Value")); msg->header()->setSubject(MCSTR("Mon projet d'été")); msg->setHTMLBody(MCSTR("
Hello
")); msg->addAttachment(mailcore::Attachment::attachmentWithContentsOfFile(MCSTR("first-filename"))); -- cgit v1.2.3