diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/abstract/MCAbstractPart.cc | 51 | ||||
-rw-r--r-- | src/core/abstract/MCAbstractPart.h | 7 | ||||
-rw-r--r-- | src/core/abstract/MCMessageHeader.cc | 35 | ||||
-rw-r--r-- | src/core/abstract/MCMessageHeader.h | 1 | ||||
-rw-r--r-- | src/core/basetypes/MCIterator.h | 4 | ||||
-rw-r--r-- | src/core/rfc822/MCAttachment.cc | 60 | ||||
-rw-r--r-- | src/core/rfc822/MCAttachment.h | 7 |
7 files changed, 73 insertions, 92 deletions
diff --git a/src/core/abstract/MCAbstractPart.cc b/src/core/abstract/MCAbstractPart.cc index 50f12249..5b7a1c9a 100644 --- a/src/core/abstract/MCAbstractPart.cc +++ b/src/core/abstract/MCAbstractPart.cc @@ -27,6 +27,7 @@ AbstractPart::AbstractPart(AbstractPart * other) setContentDescription(other->mContentDescription); setInlineAttachment(other->mInlineAttachment); setPartType(other->mPartType); + setContentTypeParameters(other->mContentTypeParameters); } void AbstractPart::init() @@ -40,6 +41,7 @@ void AbstractPart::init() mContentDescription = NULL; mInlineAttachment = false; mPartType = PartTypeSingle; + mContentTypeParameters = NULL; } AbstractPart::~AbstractPart() @@ -51,6 +53,7 @@ AbstractPart::~AbstractPart() MC_SAFE_RELEASE(mContentID); MC_SAFE_RELEASE(mContentLocation); MC_SAFE_RELEASE(mContentDescription); + MC_SAFE_RELEASE(mContentTypeParameters); } String * AbstractPart::description() @@ -76,6 +79,11 @@ String * AbstractPart::description() result->appendUTF8Format("content-description: %s\n", mContentDescription->UTF8Characters()); } result->appendUTF8Format("inline: %i\n", mInlineAttachment); + if (mContentTypeParameters != NULL) { + mc_foreachhashmapKeyAndValue(String, key, String, value, mContentTypeParameters) { + result->appendUTF8Format("%s: %s\n", key->UTF8Characters(), value->UTF8Characters()); + } + } result->appendUTF8Format(">"); return result; @@ -395,3 +403,46 @@ void AbstractPart::importSerializable(HashMap * serializable) } } } + +void AbstractPart::setContentTypeParameters(HashMap * parameters) +{ + MC_SAFE_REPLACE_COPY(HashMap, mContentTypeParameters, parameters); +} + +Array * AbstractPart::allContentTypeParametersNames() +{ + if (mContentTypeParameters == NULL) + return Array::array(); + return mContentTypeParameters->allKeys(); +} + +void AbstractPart::setContentTypeParameter(String * name, String * object) +{ + if (mContentTypeParameters == NULL) { + mContentTypeParameters = new HashMap(); + } + removeContentTypeParameter(name); + mContentTypeParameters->setObjectForKey(name, object); +} + +void AbstractPart::removeContentTypeParameter(String * name) +{ + if (mContentTypeParameters == NULL) + return; + mc_foreachhashmapKey(String, key, mContentTypeParameters) { + if (key->isEqualCaseInsensitive(name)) { + mContentTypeParameters->removeObjectForKey(key); + break; + } + } +} + +String * AbstractPart::contentTypeParameterValueForName(String * name) +{ + mc_foreachhashmapKey(String, key, mContentTypeParameters) { + if (key->isEqualCaseInsensitive(name)) { + return (String *) mContentTypeParameters->objectForKey(key); + } + } + return NULL; +} diff --git a/src/core/abstract/MCAbstractPart.h b/src/core/abstract/MCAbstractPart.h index 7f641205..0fcbf279 100644 --- a/src/core/abstract/MCAbstractPart.h +++ b/src/core/abstract/MCAbstractPart.h @@ -48,6 +48,12 @@ namespace mailcore { virtual String * decodedStringForData(Data * data); + void setContentTypeParameters(HashMap * parameters); + Array * allContentTypeParametersNames(); + void setContentTypeParameter(String * name, String * object); + void removeContentTypeParameter(String * name); + String * contentTypeParameterValueForName(String * name); + public: // subclass behavior AbstractPart(AbstractPart * other); virtual String * description(); @@ -70,6 +76,7 @@ namespace mailcore { String * mContentDescription; bool mInlineAttachment; PartType mPartType; + HashMap * mContentTypeParameters; void init(); }; diff --git a/src/core/abstract/MCMessageHeader.cc b/src/core/abstract/MCMessageHeader.cc index 6e8d2c09..89dec15c 100644 --- a/src/core/abstract/MCMessageHeader.cc +++ b/src/core/abstract/MCMessageHeader.cc @@ -62,7 +62,6 @@ void MessageHeader::init(bool generateDate, bool generateMessageID) mDate = (time_t) -1; mReceivedDate = (time_t) -1; mExtraHeaders = NULL; - mlcExtraHeaders = NULL; if (generateDate) { time_t date; @@ -116,7 +115,6 @@ MessageHeader::~MessageHeader() MC_SAFE_RELEASE(mReplyTo); MC_SAFE_RELEASE(mSubject); MC_SAFE_RELEASE(mExtraHeaders); - MC_SAFE_RELEASE(mlcExtraHeaders); } String * MessageHeader::description() @@ -307,13 +305,6 @@ String * MessageHeader::userAgent() void MessageHeader::setExtraHeaders(HashMap * headers) { MC_SAFE_REPLACE_COPY(HashMap, mExtraHeaders, headers); - MC_SAFE_RELEASE(mlcExtraHeaders); - if (mExtraHeaders != NULL) { - mlcExtraHeaders = new HashMap(); - mc_foreachhashmapKeyAndValue(String, key, String, value, mExtraHeaders) { - mlcExtraHeaders->setObjectForKey(key->lowercaseString(), value); - } - } } Array * MessageHeader::allExtraHeadersNames() @@ -328,30 +319,30 @@ void MessageHeader::setExtraHeader(String * name, String * object) if (mExtraHeaders == NULL) { mExtraHeaders = new HashMap(); } - if (mlcExtraHeaders == NULL) { - mlcExtraHeaders = new HashMap(); - } - if (object == NULL) { - removeExtraHeader(name); - return; - } + removeExtraHeader(name); mExtraHeaders->setObjectForKey(name, object); - mlcExtraHeaders->setObjectForKey(name->lowercaseString(), object); } void MessageHeader::removeExtraHeader(String * name) { if (mExtraHeaders == NULL) return; - mExtraHeaders->removeObjectForKey(name); - mlcExtraHeaders->removeObjectForKey(name); + mc_foreachhashmapKey(String, key, mExtraHeaders) { + if (key->isEqualCaseInsensitive(name)) { + mExtraHeaders->removeObjectForKey(key); + break; + } + } } String * MessageHeader::extraHeaderValueForName(String * name) { - if (mlcExtraHeaders == NULL) - return NULL; - return (String *) mlcExtraHeaders->objectForKey(name->lowercaseString()); + mc_foreachhashmapKey(String, key, mExtraHeaders) { + if (key->isEqualCaseInsensitive(name)) { + return (String *) mExtraHeaders->objectForKey(key); + } + } + return NULL; } String * MessageHeader::extractedSubject() diff --git a/src/core/abstract/MCMessageHeader.h b/src/core/abstract/MCMessageHeader.h index 51b1e2f7..4018343c 100644 --- a/src/core/abstract/MCMessageHeader.h +++ b/src/core/abstract/MCMessageHeader.h @@ -99,7 +99,6 @@ namespace mailcore { time_t mDate; time_t mReceivedDate; HashMap * mExtraHeaders; - HashMap * mlcExtraHeaders; void init(bool generateDate, bool generateMessageID); void setExtraHeaders(HashMap *headers); Array * recipientWithReplyAll(bool replyAll, bool includeTo, bool includeCc, Array * senderEmails); diff --git a/src/core/basetypes/MCIterator.h b/src/core/basetypes/MCIterator.h index c8b23fab..e1f258d4 100644 --- a/src/core/basetypes/MCIterator.h +++ b/src/core/basetypes/MCIterator.h @@ -32,13 +32,13 @@ for (unsigned int __index = 0; NULL != (__variable = (type *) mailcore::ArrayIte keyType * __key; \ HashMapIterator __key##__iterator = HashMapIteratorInit(__hashmap, true, false); \ while (HashMapIteratorRun(&__key##__iterator)) \ -while (HashMapIteratorNext(&__key##__iterator, &__key, NULL)) +while (HashMapIteratorNext(&__key##__iterator, (Object **) &__key, (Object **) NULL)) #define mc_foreachhashmapValue(valueType, __value, __hashmap) \ valueType * __value; \ HashMapIterator __value##__iterator = HashMapIteratorInit(__hashmap, false, true); \ while (HashMapIteratorRun(&__value##__iterator)) \ -while (HashMapIteratorNext(&__value##__iterator, NULL, (Object **) &__value)) +while (HashMapIteratorNext(&__value##__iterator, (Object **) NULL, (Object **) &__value)) #define mc_foreachhashmapKeyAndValue(keyType, __key, valueType, __value, __hashmap) \ keyType * __key; \ diff --git a/src/core/rfc822/MCAttachment.cc b/src/core/rfc822/MCAttachment.cc index 172881cb..eae40cb0 100644 --- a/src/core/rfc822/MCAttachment.cc +++ b/src/core/rfc822/MCAttachment.cc @@ -211,8 +211,6 @@ Attachment * Attachment::attachmentWithText(String * text) void Attachment::init() { mData = NULL; - mContentTypeParameters = NULL; - mlcContentTypeParameters = NULL; setMimeType(MCSTR("application/octet-stream")); } @@ -225,14 +223,11 @@ Attachment::Attachment(Attachment * other) : AbstractPart(other) { init(); MC_SAFE_REPLACE_RETAIN(Data, mData, other->mData); - setContentTypeParameters(other->mContentTypeParameters); } Attachment::~Attachment() { MC_SAFE_RELEASE(mData); - MC_SAFE_RELEASE(mContentTypeParameters); - MC_SAFE_RELEASE(mlcContentTypeParameters); } String * Attachment::description() @@ -261,11 +256,6 @@ String * Attachment::description() else { result->appendUTF8Format("no data\n"); } - if (mContentTypeParameters != NULL) { - mc_foreachhashmapKeyAndValue(String, key, String, value, mContentTypeParameters) { - result->appendUTF8Format("%s: %s\n", key->UTF8Characters(), value->UTF8Characters()); - } - } result->appendUTF8Format(">"); return result; @@ -296,56 +286,6 @@ String * Attachment::decodedString() } } -void Attachment::setContentTypeParameters(HashMap * parameters) -{ - MC_SAFE_REPLACE_COPY(HashMap, mContentTypeParameters, parameters); - MC_SAFE_RELEASE(mlcContentTypeParameters); - if (mContentTypeParameters != NULL) { - mlcContentTypeParameters = new HashMap(); - mc_foreachhashmapKeyAndValue(String, key, String, value, mContentTypeParameters) { - mlcContentTypeParameters->setObjectForKey(key->lowercaseString(), value); - } - } -} - -Array * Attachment::allContentTypeParametersNames() -{ - if (mContentTypeParameters == NULL) - return Array::array(); - return mContentTypeParameters->allKeys(); -} - -void Attachment::setContentTypeParameter(String * name, String * object) -{ - if (mContentTypeParameters == NULL) { - mContentTypeParameters = new HashMap(); - } - if (mlcContentTypeParameters == NULL) { - mlcContentTypeParameters = new HashMap(); - } - if (object == NULL) { - removeContentTypeParameter(name); - return; - } - mContentTypeParameters->setObjectForKey(name, object); - mlcContentTypeParameters->setObjectForKey(name->lowercaseString(), object); -} - -void Attachment::removeContentTypeParameter(String * name) -{ - if (mContentTypeParameters == NULL) - return; - mContentTypeParameters->removeObjectForKey(name); - mlcContentTypeParameters->removeObjectForKey(name); -} - -String * Attachment::contentTypeParameterValueForName(String * name) -{ - if (mlcContentTypeParameters == NULL) - return NULL; - return (String *) mlcContentTypeParameters->objectForKey(name->lowercaseString()); -} - AbstractPart * Attachment::attachmentsWithMIME(struct mailmime * mime) { return attachmentsWithMIMEWithMain(mime, true); diff --git a/src/core/rfc822/MCAttachment.h b/src/core/rfc822/MCAttachment.h index 069688f2..2217bc4c 100644 --- a/src/core/rfc822/MCAttachment.h +++ b/src/core/rfc822/MCAttachment.h @@ -29,11 +29,6 @@ namespace mailcore { virtual Data * data(); virtual String * decodedString(); - virtual void setContentTypeParameter(String * name, String * value); - virtual void removeContentTypeParameter(String * name); - virtual String * contentTypeParameterValueForName(String *name); - virtual Array * allContentTypeParametersNames(); - public: // subclass behavior Attachment(Attachment * other); virtual String * description(); @@ -44,8 +39,6 @@ namespace mailcore { private: Data * mData; - HashMap * mContentTypeParameters; - HashMap * mlcContentTypeParameters; void init(); static void fillMultipartSubAttachments(AbstractMultipart * multipart, struct mailmime * mime); static AbstractPart * attachmentsWithMIMEWithMain(struct mailmime * mime, bool isMain); |