aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar marcopifferi <marcopifferi@users.noreply.github.com>2014-03-20 10:14:37 +0100
committerGravatar marcopifferi <marcopifferi@users.noreply.github.com>2014-03-20 10:14:37 +0100
commitac745ea4778b2602c366cb328f87d14f2ee46399 (patch)
tree5a74cb347c7d572c2a7403985f6a7ddb93b6482f
parentf262b42e781de2d68ae4adbbf14f44b14b901fc4 (diff)
parent8871a6cb9ac3e2713e03c78ee0275a35f1835efb (diff)
Merge pull request #1 from MailCore/master
merging latest mail core 2
-rw-r--r--resources/providers.json49
-rwxr-xr-xscripts/prepare-libetpan-ios.sh2
-rwxr-xr-xscripts/prepare-libetpan-macos.sh2
-rw-r--r--src/core/abstract/MCAbstractMessage.cc5
-rw-r--r--src/core/abstract/MCAbstractMessage.h1
-rw-r--r--src/core/abstract/MCMessageConstants.h1
-rw-r--r--src/core/basetypes/MCOperationQueue.cc2
-rw-r--r--src/core/basetypes/MCSet.cc2
-rw-r--r--src/core/basetypes/MCString.cc18
-rw-r--r--src/core/basetypes/MCString.h2
-rw-r--r--src/core/imap/MCIMAPMessage.cc5
-rwxr-xr-xsrc/core/imap/MCIMAPSession.cc12
-rw-r--r--src/core/provider/MCMailProvider.cc67
-rw-r--r--src/core/provider/MCMailProvider.h5
-rw-r--r--src/core/renderer/MCHTMLRenderer.cc47
-rw-r--r--src/core/renderer/MCHTMLRenderer.h1
-rw-r--r--src/core/smtp/MCSMTPSession.cc12
-rw-r--r--src/objc/abstract/MCOAbstractMessage.h6
-rw-r--r--src/objc/abstract/MCOAbstractMessage.mm5
-rw-r--r--src/objc/abstract/MCOConstants.h2
-rw-r--r--src/objc/smtp/MCOSMTPSession.mm2
-rw-r--r--src/objc/utils/NSString+MCO.h1
-rw-r--r--src/objc/utils/NSString+MCO.mm4
23 files changed, 179 insertions, 74 deletions
diff --git a/resources/providers.json b/resources/providers.json
index 7286330a..91d14182 100644
--- a/resources/providers.json
+++ b/resources/providers.json
@@ -66,15 +66,15 @@
}
]
},
- "mx":[
- "mx1.sub3.homie.mail.dreamhost.com",
- "mx2.sub3.homie.mail.dreamhost.com",
- "mx1.sub4.homie.mail.dreamhost.com",
- "mx2.sub4.homie.mail.dreamhost.com",
- "mx1.sub5.homie.mail.dreamhost.com",
- "mx2.sub5.homie.mail.dreamhost.com",
- "mx1.balanced.homie.mail.dreamhost.com",
- "mx2.balanced.homie.mail.dreamhost.com"
+ "mx-match":[
+ "mx1\\.sub3\\.homie\\.mail\\.dreamhost\\.com",
+ "mx2\\.sub3\\.homie\\.mail\\.dreamhost\\.com",
+ "mx1\\.sub4\\.homie\\.mail\\.dreamhost\\.com",
+ "mx2\\.sub4\\.homie\\.mail\\.dreamhost\\.com",
+ "mx1\\.sub5\\.homie\\.mail\\.dreamhost\\.com",
+ "mx2\\.sub5\\.homie\\.mail\\.dreamhost\\.com",
+ "mx1\\.balanced\\.homie\\.mail\\.dreamhost\\.com",
+ "mx2\\.balanced\\.homie\\.mail\\.dreamhost\\.com"
],
"mailboxes":{
"drafts":"Drafts",
@@ -318,12 +318,12 @@
}
]
},
- "mx":[
- "aspmx2.googlemail.com",
- "aspmx.l.google.com",
- "aspmx3.googlemail.com",
- "alt1.aspmx.l.google.com",
- "alt2.aspmx.l.google.com"
+ "mx-match":[
+ "aspmx2\\.googlemail\\.com",
+ "aspmx\\.l\\.google\\.com",
+ "aspmx3\\.googlemail\\.com",
+ "alt1\\.aspmx\\.l\\.google\\.com",
+ "alt2\\.aspmx\\.l\\.google\\.com"
],
"domain-match":[
"googlemail\\.com",
@@ -634,9 +634,9 @@
}
]
},
- "mx":[
- "mx1.emailsrvr.com",
- "mx2.emailsrvr.com"
+ "mx-match":[
+ "mx1\\.emailsrvr\\.com",
+ "mx2\\.emailsrvr\\.com"
],
"mailboxes":{
"drafts":"Drafts",
@@ -710,12 +710,8 @@
}
]
},
- "mx":[
- "mx0.ovh.net",
- "mx1.ovh.net",
- "mx2.ovh.net",
- "mx3.ovh.net",
- "mx4.ovh.net"
+ "mx-match":[
+ "mx\\d\\.ovh\\.net"
],
"mailboxes":{
"drafts":"Drafts",
@@ -769,6 +765,9 @@
}
]
},
+ "mx-match":[
+ ".*\\.mail\\.outlook\\.com"
+ ],
"domain-match":[
"outlook\\.com",
"outlook\\.com\\.ar",
@@ -865,4 +864,4 @@
"trash": "Trash"
}
}
-} \ No newline at end of file
+}
diff --git a/scripts/prepare-libetpan-ios.sh b/scripts/prepare-libetpan-ios.sh
index d4de737b..8e839978 100755
--- a/scripts/prepare-libetpan-ios.sh
+++ b/scripts/prepare-libetpan-ios.sh
@@ -15,7 +15,7 @@ else
fi
url="https://github.com/dinhviethoa/libetpan.git"
-rev=b6f16696b39aafcd4a4e5b6183d4cf1d97197203
+rev=f1307f3bb156b28629efe2c8339b522af58898f5
pushd `dirname $0` > /dev/null
scriptpath=`pwd`
diff --git a/scripts/prepare-libetpan-macos.sh b/scripts/prepare-libetpan-macos.sh
index 9fe80a19..02489156 100755
--- a/scripts/prepare-libetpan-macos.sh
+++ b/scripts/prepare-libetpan-macos.sh
@@ -1,7 +1,7 @@
#!/bin/sh
url="https://github.com/dinhviethoa/libetpan.git"
-rev=b6f16696b39aafcd4a4e5b6183d4cf1d97197203
+rev=f1307f3bb156b28629efe2c8339b522af58898f5
pushd `dirname $0` > /dev/null
scriptpath=`pwd`
diff --git a/src/core/abstract/MCAbstractMessage.cc b/src/core/abstract/MCAbstractMessage.cc
index cf3fd6c4..1d1d7efc 100644
--- a/src/core/abstract/MCAbstractMessage.cc
+++ b/src/core/abstract/MCAbstractMessage.cc
@@ -80,6 +80,11 @@ Array * AbstractMessage::htmlInlineAttachments()
return HTMLRenderer::htmlInlineAttachmentsForMessage(this);
}
+Array * AbstractMessage::requiredPartsForRendering()
+{
+ return HTMLRenderer::requiredPartsForRendering(this);
+}
+
HashMap * AbstractMessage::serializable()
{
HashMap * result = Object::serializable();
diff --git a/src/core/abstract/MCAbstractMessage.h b/src/core/abstract/MCAbstractMessage.h
index f7edd0c9..b03d5f2a 100644
--- a/src/core/abstract/MCAbstractMessage.h
+++ b/src/core/abstract/MCAbstractMessage.h
@@ -24,6 +24,7 @@ namespace mailcore {
virtual Array * /* AbstractPart */ attachments();
virtual Array * /* AbstractPart */ htmlInlineAttachments();
+ virtual Array * /* AbstractPart */ requiredPartsForRendering();
public: //subclass behavior
AbstractMessage(AbstractMessage * other);
diff --git a/src/core/abstract/MCMessageConstants.h b/src/core/abstract/MCMessageConstants.h
index 20be3e31..dcc1c7cd 100644
--- a/src/core/abstract/MCMessageConstants.h
+++ b/src/core/abstract/MCMessageConstants.h
@@ -23,6 +23,7 @@ namespace mailcore {
AuthTypeSASLNTLM = 1 << 6,
AuthTypeSASLKerberosV4 = 1 << 7,
AuthTypeXOAuth2 = 1 << 8,
+ AuthTypeXOAuth2Outlook = 1 << 9,
};
enum IMAPFolderFlag {
diff --git a/src/core/basetypes/MCOperationQueue.cc b/src/core/basetypes/MCOperationQueue.cc
index 6840a279..3619530b 100644
--- a/src/core/basetypes/MCOperationQueue.cc
+++ b/src/core/basetypes/MCOperationQueue.cc
@@ -125,7 +125,7 @@ void OperationQueue::runOperations()
if (needsCheckRunning) {
retain(); // (1)
- MCLog("check running %p", this);
+ //MCLog("check running %p", this);
#if __APPLE__
performMethodOnDispatchQueue((Object::Method) &OperationQueue::checkRunningOnMainThread, this, mDispatchQueue);
#else
diff --git a/src/core/basetypes/MCSet.cc b/src/core/basetypes/MCSet.cc
index ad615388..ceccbdcc 100644
--- a/src/core/basetypes/MCSet.cc
+++ b/src/core/basetypes/MCSet.cc
@@ -45,7 +45,7 @@ Set * Set::setWithArray(Array * objects)
String * Set::description()
{
String * result = String::string();
- result->appendUTF8Format("<%s:%p ", className(), this);
+ result->appendUTF8Format("<%s:%p ", MCUTF8(className()), this);
result->appendString(mHash->allKeys()->description());
result->appendUTF8Characters(">");
return result;
diff --git a/src/core/basetypes/MCString.cc b/src/core/basetypes/MCString.cc
index 054cbb80..3f0338db 100644
--- a/src/core/basetypes/MCString.cc
+++ b/src/core/basetypes/MCString.cc
@@ -1795,6 +1795,24 @@ String * String::flattenHTML()
return flattenHTMLAndShowBlockquote(true);
}
+String * String::stripWhitespace()
+{
+ String *str = (String *)copy();
+
+ str->replaceOccurrencesOfString(MCSTR("\t"), MCSTR(" "));
+ str->replaceOccurrencesOfString(MCSTR("\n"), MCSTR(" "));
+ str->replaceOccurrencesOfString(MCSTR("\v"), MCSTR(" "));
+ str->replaceOccurrencesOfString(MCSTR("\f"), MCSTR(" "));
+ str->replaceOccurrencesOfString(MCSTR("\r"), MCSTR(" "));
+
+ while (str->replaceOccurrencesOfString(MCSTR(" "), MCSTR(" ")) > 0) {
+ /* do nothing */
+ }
+
+ return str;
+}
+
+
bool String::hasSuffix(String * suffix)
{
if (mLength >= suffix->mLength) {
diff --git a/src/core/basetypes/MCString.h b/src/core/basetypes/MCString.h
index 7fd07570..25439cf2 100644
--- a/src/core/basetypes/MCString.h
+++ b/src/core/basetypes/MCString.h
@@ -86,6 +86,8 @@ namespace mailcore {
virtual String * flattenHTMLAndShowBlockquote(bool showBlockquote);
virtual String * flattenHTMLAndShowBlockquoteAndLink(bool showBlockquote, bool showLink);
+ virtual String * stripWhitespace();
+
virtual String * lastPathComponent();
virtual String * pathExtension();
virtual Data * dataUsingEncoding(const char * charset = NULL);
diff --git a/src/core/imap/MCIMAPMessage.cc b/src/core/imap/MCIMAPMessage.cc
index 6845d19a..dfb26752 100644
--- a/src/core/imap/MCIMAPMessage.cc
+++ b/src/core/imap/MCIMAPMessage.cc
@@ -5,6 +5,7 @@
#include "MCIMAPMessagePart.h"
#include "MCIMAPMultipart.h"
#include "MCHTMLRenderer.h"
+#include "MCHTMLRendererCallback.h"
using namespace mailcore;
@@ -242,7 +243,9 @@ HashMap * IMAPMessage::serializable()
if (customFlags() != NULL) {
result->setObjectForKey(MCSTR("customFlags"), customFlags());
}
- result->setObjectForKey(MCSTR("mainPart"), mMainPart->serializable());
+ if (mMainPart != NULL) {
+ result->setObjectForKey(MCSTR("mainPart"), mMainPart->serializable());
+ }
if (gmailLabels() != NULL) {
result->setObjectForKey(MCSTR("gmailLabels"), gmailLabels());
}
diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc
index 9cdf0ce9..b387e48f 100755
--- a/src/core/imap/MCIMAPSession.cc
+++ b/src/core/imap/MCIMAPSession.cc
@@ -837,6 +837,7 @@ void IMAPSession::login(ErrorCode * pError)
break;
case AuthTypeXOAuth2:
+ case AuthTypeXOAuth2Outlook:
r = mailimap_oauth2_authenticate(mImap, utf8username, MCUTF8(mOAuth2Token));
break;
}
@@ -3751,17 +3752,8 @@ String * IMAPSession::plainTextBodyRendering(IMAPMessage * message, String * fol
}
String * plainTextBodyString = htmlBodyString->flattenHTML();
-
if (stripWhitespace) {
- plainTextBodyString->replaceOccurrencesOfString(MCSTR("\t"), MCSTR(" "));
- plainTextBodyString->replaceOccurrencesOfString(MCSTR("\n"), MCSTR(" "));
- plainTextBodyString->replaceOccurrencesOfString(MCSTR("\v"), MCSTR(" "));
- plainTextBodyString->replaceOccurrencesOfString(MCSTR("\f"), MCSTR(" "));
- plainTextBodyString->replaceOccurrencesOfString(MCSTR("\r"), MCSTR(" "));
-
- while (plainTextBodyString->replaceOccurrencesOfString(MCSTR(" "), MCSTR(" ")) > 0) {
- /* do nothing */
- }
+ return plainTextBodyString->stripWhitespace();
}
return plainTextBodyString;
diff --git a/src/core/provider/MCMailProvider.cc b/src/core/provider/MCMailProvider.cc
index 7a8cb4cb..aec6f348 100644
--- a/src/core/provider/MCMailProvider.cc
+++ b/src/core/provider/MCMailProvider.cc
@@ -22,7 +22,7 @@ void MailProvider::init()
mSmtpServices = new Array();
mPopServices = new Array();
mDomainMatch = new Array();
- mMxSet = new Set();
+ mMxMatch = new Array();
mMailboxPaths = NULL;
}
@@ -39,7 +39,7 @@ MailProvider::MailProvider(MailProvider * other)
MC_SAFE_REPLACE_COPY(Array, mSmtpServices, other->mSmtpServices);
MC_SAFE_REPLACE_COPY(Array, mPopServices, other->mPopServices);
MC_SAFE_REPLACE_COPY(Array, mDomainMatch, other->mDomainMatch);
- MC_SAFE_REPLACE_COPY(Set, mMxSet, other->mMxSet);
+ MC_SAFE_REPLACE_COPY(Array, mMxMatch, other->mMxMatch);
MC_SAFE_REPLACE_COPY(HashMap, mMailboxPaths, other->mMailboxPaths);
}
@@ -48,7 +48,7 @@ MailProvider::~MailProvider()
MC_SAFE_RELEASE(mImapServices);
MC_SAFE_RELEASE(mSmtpServices);
MC_SAFE_RELEASE(mPopServices);
- MC_SAFE_RELEASE(mMxSet);
+ MC_SAFE_RELEASE(mMxMatch);
MC_SAFE_RELEASE(mDomainMatch);
MC_SAFE_RELEASE(mMailboxPaths);
MC_SAFE_RELEASE(mIdentifier);
@@ -68,7 +68,6 @@ void MailProvider::fillWithInfo(HashMap * info)
Array * smtpInfos;
Array * popInfos;
HashMap * serverInfo;
- Array * mxs;
MC_SAFE_RELEASE(mDomainMatch);
if (info->objectForKey(MCSTR("domain-match")) != NULL) {
@@ -78,10 +77,9 @@ void MailProvider::fillWithInfo(HashMap * info)
if (info->objectForKey(MCSTR("mailboxes")) != NULL) {
mMailboxPaths = (HashMap *) info->objectForKey(MCSTR("mailboxes"))->retain();
}
- mxs = (Array *) info->objectForKey(MCSTR("mx"));
- mMxSet->removeAllObjects();
- mc_foreacharray(String, mx, mxs) {
- mMxSet->addObject(mx->lowercaseString());
+ MC_SAFE_RELEASE(mMxMatch);
+ if (info->objectForKey(MCSTR("mx-match")) != NULL) {
+ mMxMatch = (Array *) info->objectForKey(MCSTR("mx-match"))->retain();
}
serverInfo = (HashMap *) info->objectForKey(MCSTR("servers"));
@@ -148,25 +146,11 @@ bool MailProvider::matchEmail(String * email)
return false;
domain = (String *) components->lastObject();
- cDomain = domain->UTF8Characters();
-
+
mc_foreacharray(String, match, mDomainMatch) {
- regex_t r;
- bool matched;
-
- match = String::stringWithUTF8Format("^%s$", match->UTF8Characters());
- if (regcomp(&r, match->UTF8Characters(), REG_EXTENDED | REG_ICASE | REG_NOSUB) != 0)
- continue;
-
- matched = false;
- if (regexec(&r, cDomain, 0, NULL, 0) == 0) {
- matched = true;
- }
-
- regfree(&r);
-
- if (matched)
+ if (matchDomain(match, domain)){
return true;
+ }
}
return false;
@@ -174,7 +158,36 @@ bool MailProvider::matchEmail(String * email)
bool MailProvider::matchMX(String * hostname)
{
- return mMxSet->containsObject(hostname->lowercaseString());
+ mc_foreacharray(String, match, mMxMatch) {
+ if (matchDomain(match, hostname)){
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool MailProvider::matchDomain(String * match, String * domain)
+{
+ const char * cDomain;
+ regex_t r;
+ bool matched;
+
+ cDomain = domain->UTF8Characters();
+ match = String::stringWithUTF8Format("^%s$", match->UTF8Characters());
+ matched = false;
+
+ if (regcomp(&r, match->UTF8Characters(), REG_EXTENDED | REG_ICASE | REG_NOSUB) != 0){
+ return matched;
+ }
+
+ if (regexec(&r, cDomain, 0, NULL, 0) == 0) {
+ matched = true;
+ }
+
+ regfree(&r);
+
+ return matched;
}
String * MailProvider::sentMailFolderPath()
@@ -232,7 +245,7 @@ bool MailProvider::isMainFolder(String * folderPath, String * prefix)
}
String * MailProvider::description()
-{
+{
return String::stringWithUTF8Format("<%s:%p, %s>", className()->UTF8Characters(), this, MCUTF8(mIdentifier));
}
diff --git a/src/core/provider/MCMailProvider.h b/src/core/provider/MCMailProvider.h
index 026482b3..29ab4fa6 100644
--- a/src/core/provider/MCMailProvider.h
+++ b/src/core/provider/MCMailProvider.h
@@ -57,12 +57,13 @@ namespace mailcore {
private:
String * mIdentifier;
Array * /* String */ mDomainMatch;
+ Array * /* String */ mMxMatch;
Array * /* NetService */ mImapServices;
Array * /* NetService */ mSmtpServices;
Array * /* NetService */ mPopServices;
HashMap * mMailboxPaths;
- Set * mMxSet;
+ virtual bool matchDomain(String * match, String * domain);
void init();
};
@@ -70,4 +71,4 @@ namespace mailcore {
#endif
-#endif \ No newline at end of file
+#endif
diff --git a/src/core/renderer/MCHTMLRenderer.cc b/src/core/renderer/MCHTMLRenderer.cc
index 45c3a77a..bbc0d591 100644
--- a/src/core/renderer/MCHTMLRenderer.cc
+++ b/src/core/renderer/MCHTMLRenderer.cc
@@ -17,8 +17,33 @@
using namespace mailcore;
class HTMLRendererIMAPDummyCallback : public HTMLRendererIMAPCallback {
+private:
+ Array *mRequiredParts;
+
public:
- virtual Data * dataForIMAPPart(String * folder, IMAPPart * part) { return Data::data(); }
+ HTMLRendererIMAPDummyCallback()
+ {
+ mRequiredParts = Array::array();
+ mRequiredParts->retain();
+ }
+
+ virtual ~HTMLRendererIMAPDummyCallback()
+ {
+ MC_SAFE_RELEASE(mRequiredParts);
+ }
+
+
+ virtual Data * dataForIMAPPart(String * folder, IMAPPart * part)
+ {
+ mRequiredParts->addObject(part);
+ return Data::data();
+ }
+
+ Array * requiredParts()
+ {
+ return mRequiredParts;
+ }
+
};
enum {
@@ -178,11 +203,12 @@ static String * htmlForAbstractMessage(String * folder, AbstractMessage * messag
context.firstRendered = 0;
context.folder = folder;
context.state = RENDER_STATE_NONE;
-
+
context.hasMixedTextAndAttachments = false;
context.pass = 0;
context.firstAttachment = false;
context.hasTextPart = false;
+
htmlForAbstractPart(mainPart, &context);
context.relatedAttachments = relatedAttachments;
@@ -414,7 +440,9 @@ static String * htmlForAbstractMultipartRelated(AbstractMultipart * part, htmlRe
if (context->relatedAttachments != NULL) {
for(unsigned int i = 1 ; i < part->parts()->count() ; i ++) {
AbstractPart * otherSubpart = (AbstractPart *) part->parts()->objectAtIndex(i);
- context->relatedAttachments->addObject(otherSubpart);
+ if (context->relatedAttachments != NULL) {
+ context->relatedAttachments->addObject(otherSubpart);
+ }
}
}
return htmlForAbstractPart(subpart, context);
@@ -509,3 +537,16 @@ Array * HTMLRenderer::htmlInlineAttachmentsForMessage(AbstractMessage * message)
(void) ignoredResult; // remove unused variable warning.
return htmlInlineAttachments;
}
+
+Array * HTMLRenderer::requiredPartsForRendering(AbstractMessage * message)
+{
+ HTMLRendererIMAPDummyCallback * dataCallback = new HTMLRendererIMAPDummyCallback();
+ String * ignoredResult = htmlForAbstractMessage(NULL, message, dataCallback, NULL, NULL, NULL);
+
+ Array *requiredParts = dataCallback->requiredParts();
+
+ delete dataCallback;
+ dataCallback = NULL;
+ (void) ignoredResult; // remove unused variable warning.
+ return requiredParts;
+}
diff --git a/src/core/renderer/MCHTMLRenderer.h b/src/core/renderer/MCHTMLRenderer.h
index 47a21acc..6d59cb67 100644
--- a/src/core/renderer/MCHTMLRenderer.h
+++ b/src/core/renderer/MCHTMLRenderer.h
@@ -34,6 +34,7 @@ namespace mailcore {
static Array * /* AbstractPart */ attachmentsForMessage(AbstractMessage * message);
static Array * /* AbstractPart */ htmlInlineAttachmentsForMessage(AbstractMessage * message);
+ static Array * /* AbstractPart */ requiredPartsForRendering(AbstractMessage * message);
};
};
diff --git a/src/core/smtp/MCSMTPSession.cc b/src/core/smtp/MCSMTPSession.cc
index b9f71cb9..c6f28ff9 100644
--- a/src/core/smtp/MCSMTPSession.cc
+++ b/src/core/smtp/MCSMTPSession.cc
@@ -400,7 +400,8 @@ void SMTPSession::login(ErrorCode * pError)
{
int r;
- if ((authType() != AuthTypeXOAuth2) && ((username() == NULL) || (password() == NULL))) {
+ if ((authType() != AuthTypeXOAuth2) && (authType() != AuthTypeXOAuth2Outlook) &&
+ ((username() == NULL) || (password() == NULL))) {
mState = STATE_LOGGEDIN;
* pError = ErrorNone;
return;
@@ -525,6 +526,15 @@ void SMTPSession::login(ErrorCode * pError)
r = mailsmtp_oauth2_authenticate(mSmtp, utf8Username, MCUTF8(mOAuth2Token));
break;
}
+
+ case AuthTypeXOAuth2Outlook: {
+ const char * utf8Username = MCUTF8(mUsername);
+ if (utf8Username == NULL) {
+ utf8Username = "";
+ }
+ r = mailsmtp_oauth2_outlook_authenticate(mSmtp, utf8Username, MCUTF8(mOAuth2Token));
+ break;
+ }
}
if (r == MAILSMTP_ERROR_STREAM) {
* pError = ErrorConnection;
diff --git a/src/objc/abstract/MCOAbstractMessage.h b/src/objc/abstract/MCOAbstractMessage.h
index f15975dd..d917d82f 100644
--- a/src/objc/abstract/MCOAbstractMessage.h
+++ b/src/objc/abstract/MCOAbstractMessage.h
@@ -38,6 +38,12 @@
It will return an array of MCOAttachment for MCOMessageBuilder. */
- (NSArray * /* MCOAbstractPart */) htmlInlineAttachments;
+/**
+ Returns parts required to render the message as plain text or html.
+ This does not include inline images and attachments, but only the text content
+ */
+- (NSArray *) requiredPartsForRendering;
+
@end
#endif
diff --git a/src/objc/abstract/MCOAbstractMessage.mm b/src/objc/abstract/MCOAbstractMessage.mm
index 637d6172..a1eb4250 100644
--- a/src/objc/abstract/MCOAbstractMessage.mm
+++ b/src/objc/abstract/MCOAbstractMessage.mm
@@ -85,4 +85,9 @@ MCO_OBJC_SYNTHESIZE(MessageHeader, setHeader, header)
return MCO_OBJC_BRIDGE_GET(htmlInlineAttachments);
}
+- (NSArray *) requiredPartsForRendering
+{
+ return MCO_OBJC_BRIDGE_GET(requiredPartsForRendering);
+}
+
@end
diff --git a/src/objc/abstract/MCOConstants.h b/src/objc/abstract/MCOConstants.h
index e5ab8184..eb276e0f 100644
--- a/src/objc/abstract/MCOConstants.h
+++ b/src/objc/abstract/MCOConstants.h
@@ -35,6 +35,8 @@ typedef enum {
MCOAuthTypeSASLKerberosV4 = 1 << 7,
/** OAuth2 authentication.*/
MCOAuthTypeXOAuth2 = 1 << 8,
+ /** OAuth2 authentication on outlook.com.*/
+ MCOAuthTypeXOAuth2Outlook = 1 << 9,
} MCOAuthType;
/** It's the IMAP flags of the folder.*/
diff --git a/src/objc/smtp/MCOSMTPSession.mm b/src/objc/smtp/MCOSMTPSession.mm
index b6ae6a4f..17dc5057 100644
--- a/src/objc/smtp/MCOSMTPSession.mm
+++ b/src/objc/smtp/MCOSMTPSession.mm
@@ -124,7 +124,7 @@ MCO_OBJC_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setDispatchQueue,
return result;
}
-- (MCOOperation *) checkAccountOperationWithFrom:(MCOAddress *)from
+- (MCOSMTPOperation *) checkAccountOperationWithFrom:(MCOAddress *)from
{
mailcore::SMTPOperation *coreOp = MCO_NATIVE_INSTANCE->checkAccountOperation(MCO_FROM_OBJC(mailcore::Address, from));
MCOSMTPOperation * result = [[[MCOSMTPOperation alloc] initWithMCOperation:coreOp] autorelease];
diff --git a/src/objc/utils/NSString+MCO.h b/src/objc/utils/NSString+MCO.h
index ac374bf7..71e99a44 100644
--- a/src/objc/utils/NSString+MCO.h
+++ b/src/objc/utils/NSString+MCO.h
@@ -34,6 +34,7 @@ namespace mailcore {
- (NSString *) mco_htmlEncodedString;
- (NSString *) mco_cleanedHTMLString;
+- (NSString *) mco_strippedWhitespace;
@end
diff --git a/src/objc/utils/NSString+MCO.mm b/src/objc/utils/NSString+MCO.mm
index e9933fab..68f75302 100644
--- a/src/objc/utils/NSString+MCO.mm
+++ b/src/objc/utils/NSString+MCO.mm
@@ -65,5 +65,9 @@
return [NSString mco_stringWithMCString:[self mco_mcString]->cleanedHTMLString()];
}
+- (NSString *) mco_strippedWhitespace
+{
+ return [NSString mco_stringWithMCString:[self mco_mcString]->stripWhitespace()];
+}
@end