aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/abstract/MCAbstractPart.cc51
-rw-r--r--src/core/abstract/MCAbstractPart.h7
-rw-r--r--src/core/abstract/MCMessageHeader.cc35
-rw-r--r--src/core/abstract/MCMessageHeader.h1
-rw-r--r--src/core/basetypes/MCIterator.h4
-rw-r--r--src/core/rfc822/MCAttachment.cc60
-rw-r--r--src/core/rfc822/MCAttachment.h7
-rw-r--r--src/objc/abstract/MCOAbstractPart.h12
-rw-r--r--src/objc/abstract/MCOAbstractPart.mm20
-rw-r--r--src/objc/rfc822/MCOAttachment.h12
-rw-r--r--src/objc/rfc822/MCOAttachment.mm19
-rw-r--r--tests/test-all.mm1
12 files changed, 106 insertions, 123 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);
diff --git a/src/objc/abstract/MCOAbstractPart.h b/src/objc/abstract/MCOAbstractPart.h
index e30f09bf..30dd8f5f 100644
--- a/src/objc/abstract/MCOAbstractPart.h
+++ b/src/objc/abstract/MCOAbstractPart.h
@@ -82,6 +82,18 @@ typedef NS_ENUM(NSInteger, MCOPartType) {
/** Returns a string representation of the data according to charset.*/
- (NSString *) decodedStringForData:(NSData *)data;
+/** Adds a content type parameter.*/
+- (void) setContentTypeParameterValue:(NSString *)value forName:(NSString *)name;
+
+/** Remove a given content type parameter.*/
+- (void) removeContentTypeParameterForName:(NSString *)name;
+
+/** Returns the value of a given content type parameter.*/
+- (NSString *) contentTypeParameterValueForName:(NSString *)name;
+
+/** Returns an array with the names of all content type parameters.*/
+- (NSArray * /* NSString */) allContentTypeParametersNames;
+
@end
#endif
diff --git a/src/objc/abstract/MCOAbstractPart.mm b/src/objc/abstract/MCOAbstractPart.mm
index d55422d5..8608ec61 100644
--- a/src/objc/abstract/MCOAbstractPart.mm
+++ b/src/objc/abstract/MCOAbstractPart.mm
@@ -87,4 +87,24 @@ MCO_OBJC_SYNTHESIZE_BOOL(setInlineAttachment, isInlineAttachment)
{
return [NSString mco_stringWithMCString:MCO_NATIVE_INSTANCE->decodedStringForData([data mco_mcData])];
}
+
+- (void) setContentTypeParameterValue:(NSString *)value forName:(NSString *)name
+{
+ MCO_NATIVE_INSTANCE->setContentTypeParameter(MCO_FROM_OBJC(mailcore::String, name), MCO_FROM_OBJC(mailcore::String, value));
+}
+
+- (NSString *) contentTypeParameterValueForName:(NSString *)name
+{
+ return MCO_TO_OBJC(MCO_NATIVE_INSTANCE->contentTypeParameterValueForName((MCO_FROM_OBJC(mailcore::String, name))));
+}
+- (void) removeContentTypeParameterForName:(NSString *)name
+{
+ MCO_NATIVE_INSTANCE->removeContentTypeParameter(MCO_FROM_OBJC(mailcore::String, name));
+}
+
+- (NSArray * /* NSString */) allContentTypeParametersNames
+{
+ return MCO_TO_OBJC(MCO_NATIVE_INSTANCE->allContentTypeParametersNames());
+}
+
@end
diff --git a/src/objc/rfc822/MCOAttachment.h b/src/objc/rfc822/MCOAttachment.h
index 954a825c..eec1bd19 100644
--- a/src/objc/rfc822/MCOAttachment.h
+++ b/src/objc/rfc822/MCOAttachment.h
@@ -42,18 +42,6 @@
/** Returns string representation according to charset*/
- (NSString *) decodedString;
-/** Adds a content type parameter.*/
-- (void) setContentTypeParameterValue:(NSString *)value forName:(NSString *)name;
-
-/** Remove a given content type parameter.*/
-- (void) removeContentTypeParameterForName:(NSString *)name;
-
-/** Returns the value of a given content type parameter.*/
-- (NSString *) contentTypeParameterValueForName:(NSString *)name;
-
-/** Returns an array with the names of all content type parameters.*/
-- (NSArray * /* NSString */) allContentTypeParametersNames;
-
@end
#endif
diff --git a/src/objc/rfc822/MCOAttachment.mm b/src/objc/rfc822/MCOAttachment.mm
index 18c13693..afaf96af 100644
--- a/src/objc/rfc822/MCOAttachment.mm
+++ b/src/objc/rfc822/MCOAttachment.mm
@@ -90,23 +90,4 @@ MCO_OBJC_SYNTHESIZE_DATA(setData, data)
return [NSString mco_stringWithMCString:result];
}
-- (void) setContentTypeParameterValue:(NSString *)value forName:(NSString *)name
-{
- MCO_NATIVE_INSTANCE->setContentTypeParameter(MCO_FROM_OBJC(mailcore::String, name), MCO_FROM_OBJC(mailcore::String, value));
-}
-
-- (NSString *) contentTypeParameterValueForName:(NSString *)name
-{
- return MCO_TO_OBJC(MCO_NATIVE_INSTANCE->contentTypeParameterValueForName((MCO_FROM_OBJC(mailcore::String, name))));
-}
-- (void) removeContentTypeParameterForName:(NSString *)name
-{
- MCO_NATIVE_INSTANCE->removeContentTypeParameter(MCO_FROM_OBJC(mailcore::String, name));
-}
-
-- (NSArray * /* NSString */) allContentTypeParametersNames
-{
- return MCO_TO_OBJC(MCO_NATIVE_INSTANCE->allContentTypeParametersNames());
-}
-
@end
diff --git a/tests/test-all.mm b/tests/test-all.mm
index 0f93b779..af66c6b0 100644
--- a/tests/test-all.mm
+++ b/tests/test-all.mm
@@ -223,6 +223,7 @@ class TestIMAPCallback : public mailcore::Object, public mailcore::OperationCall
virtual void operationFinished(mailcore::Operation * op)
{
mailcore::IMAPFetchMessagesOperation * fetchOp = (mailcore::IMAPFetchMessagesOperation *) op;
+ (void) (fetchOp);
//MCLog("callback %s %s %s", MCUTF8DESC(op), MCUTF8DESC(fetchOp->messages()), MCUTF8DESC(this));
}