aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/async
diff options
context:
space:
mode:
authorGravatar Pushkar Singh <pushkar@hothouselabs.com>2013-07-20 22:49:28 -0700
committerGravatar Pushkar Singh <pushkar@hothouselabs.com>2013-07-20 22:49:28 -0700
commit52473496926f12877dca66ad44ac1af65e9406d6 (patch)
treec839a7674083a7795d278faefeea161a9d267fdc /src/async
parent0bc680acc776bd83dd9f0300015fc85b5e9aad7f (diff)
parent798a4b1117527acc1de523b13577d86fe7df990b (diff)
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'src/async')
-rw-r--r--src/async/imap/MCAsyncIMAP.h2
-rw-r--r--src/async/imap/MCIMAPAsyncConnection.cc38
-rw-r--r--src/async/imap/MCIMAPAsyncConnection.h11
-rw-r--r--src/async/imap/MCIMAPAsyncSession.cc30
-rw-r--r--src/async/imap/MCIMAPAsyncSession.h7
-rw-r--r--src/async/imap/MCIMAPDisconnectOperation.cc2
-rw-r--r--src/async/imap/MCIMAPFetchMessagesOperation.cc20
-rw-r--r--src/async/imap/MCIMAPFetchMessagesOperation.h4
-rw-r--r--src/async/imap/MCIMAPFolderInfoOperation.cc4
-rw-r--r--src/async/imap/MCIMAPFolderStatusOperation.cc4
-rw-r--r--src/async/imap/MCIMAPMessageRenderingOperation.cc73
-rw-r--r--src/async/imap/MCIMAPMessageRenderingOperation.h47
-rw-r--r--src/async/smtp/MCSMTPDisconnectOperation.cc2
13 files changed, 233 insertions, 11 deletions
diff --git a/src/async/imap/MCAsyncIMAP.h b/src/async/imap/MCAsyncIMAP.h
index 1a7a955d..a6bf40d0 100644
--- a/src/async/imap/MCAsyncIMAP.h
+++ b/src/async/imap/MCAsyncIMAP.h
@@ -28,6 +28,6 @@
#include <MailCore/MCIMAPIdentityOperation.h>
#include <MailCore/MCIMAPCapabilityOperation.h>
#include <MailCore/MCIMAPOperationCallback.h>
-
+#include <MailCore/MCIMAPMessageRenderingOperation.h>
#endif
diff --git a/src/async/imap/MCIMAPAsyncConnection.cc b/src/async/imap/MCIMAPAsyncConnection.cc
index 1d07f79a..85c411a8 100644
--- a/src/async/imap/MCIMAPAsyncConnection.cc
+++ b/src/async/imap/MCIMAPAsyncConnection.cc
@@ -34,6 +34,7 @@
#include "MCIMAPDisconnectOperation.h"
#include "MCIMAPAsyncSession.h"
#include "MCConnectionLogger.h"
+#include "MCIMAPMessageRenderingOperation.h"
using namespace mailcore;
@@ -592,3 +593,40 @@ void IMAPAsyncConnection::logConnection(ConnectionLogType logType, Data * buffer
}
pthread_mutex_unlock(&mConnectionLoggerLock);
}
+
+IMAPMessageRenderingOperation * IMAPAsyncConnection::renderingOperation(IMAPMessage * message,
+ String * folder,
+ IMAPMessageRenderingType type)
+{
+ IMAPMessageRenderingOperation * op = new IMAPMessageRenderingOperation();
+ op->setSession(this);
+ op->setMessage(message);
+ op->setFolder(folder);
+ op->setRenderingType(type);
+ op->autorelease();
+ return op;
+}
+
+IMAPMessageRenderingOperation * IMAPAsyncConnection::htmlRenderingOperation(IMAPMessage * message,
+ String * folder)
+{
+ return renderingOperation(message, folder, IMAPMessageRenderingTypeHTML);
+}
+
+IMAPMessageRenderingOperation * IMAPAsyncConnection::htmlBodyRenderingOperation(IMAPMessage * message,
+ String * folder)
+{
+ return renderingOperation(message, folder, IMAPMessageRenderingTypeHTMLBody);
+}
+
+IMAPMessageRenderingOperation * IMAPAsyncConnection::plainTextRenderingOperation(IMAPMessage * message,
+ String * folder)
+{
+ return renderingOperation(message, folder, IMAPMessageRenderingTypePlainText);
+}
+
+IMAPMessageRenderingOperation * IMAPAsyncConnection::plainTextBodyRenderingOperation(IMAPMessage * message,
+ String * folder)
+{
+ return renderingOperation(message, folder, IMAPMessageRenderingTypePlainTextBody);
+}
diff --git a/src/async/imap/MCIMAPAsyncConnection.h b/src/async/imap/MCIMAPAsyncConnection.h
index 319cc224..45acb707 100644
--- a/src/async/imap/MCIMAPAsyncConnection.h
+++ b/src/async/imap/MCIMAPAsyncConnection.h
@@ -28,6 +28,8 @@ namespace mailcore {
class IMAPOperationQueueCallback;
class IMAPAsyncSession;
class IMAPConnectionLogger;
+ class IMAPMessageRenderingOperation;
+ class IMAPMessage;
class IMAPAsyncConnection : public Object {
public:
@@ -119,6 +121,12 @@ namespace mailcore {
virtual IMAPCapabilityOperation * capabilityOperation();
+ virtual IMAPMessageRenderingOperation * htmlRenderingOperation(IMAPMessage * message, String * folder);
+ virtual IMAPMessageRenderingOperation * htmlBodyRenderingOperation(IMAPMessage * message, String * folder);
+ virtual IMAPMessageRenderingOperation * plainTextRenderingOperation(IMAPMessage * message, String * folder);
+ virtual IMAPMessageRenderingOperation * plainTextBodyRenderingOperation(IMAPMessage * message, String * folder);
+
+
private:
IMAPSession * mSession;
OperationQueue * mQueue;
@@ -132,6 +140,9 @@ namespace mailcore {
pthread_mutex_t mConnectionLoggerLock;
virtual void tryAutomaticDisconnectAfterDelay(void * context);
+ virtual IMAPMessageRenderingOperation * renderingOperation(IMAPMessage * message,
+ String * folder,
+ IMAPMessageRenderingType type);
public: // private
virtual void runOperation(IMAPOperation * operation);
diff --git a/src/async/imap/MCIMAPAsyncSession.cc b/src/async/imap/MCIMAPAsyncSession.cc
index 6981322e..7aa37d83 100644
--- a/src/async/imap/MCIMAPAsyncSession.cc
+++ b/src/async/imap/MCIMAPAsyncSession.cc
@@ -1,5 +1,5 @@
//
-// MCIMAPAsyncSession.cpp
+// MCIMAPAsyncSession.cc
// mailcore2
//
// Created by DINH Viêt Hoà on 1/17/13.
@@ -462,3 +462,31 @@ ConnectionLogger * IMAPAsyncSession::connectionLogger()
{
return mConnectionLogger;
}
+
+IMAPMessageRenderingOperation * IMAPAsyncSession::htmlRenderingOperation(IMAPMessage * message,
+ String * folder)
+{
+ IMAPAsyncConnection * session = sessionForFolder(folder);
+ return session->htmlRenderingOperation(message, folder);
+}
+
+IMAPMessageRenderingOperation * IMAPAsyncSession::htmlBodyRenderingOperation(IMAPMessage * message,
+ String * folder)
+{
+ IMAPAsyncConnection * session = sessionForFolder(folder);
+ return session->htmlBodyRenderingOperation(message, folder);
+}
+
+IMAPMessageRenderingOperation * IMAPAsyncSession::plainTextRenderingOperation(IMAPMessage * message,
+ String * folder)
+{
+ IMAPAsyncConnection * session = sessionForFolder(folder);
+ return session->plainTextRenderingOperation(message, folder);
+}
+
+IMAPMessageRenderingOperation * IMAPAsyncSession::plainTextBodyRenderingOperation(IMAPMessage * message,
+ String * folder)
+{
+ IMAPAsyncConnection * session = sessionForFolder(folder);
+ return session->plainTextBodyRenderingOperation(message, folder);
+} \ No newline at end of file
diff --git a/src/async/imap/MCIMAPAsyncSession.h b/src/async/imap/MCIMAPAsyncSession.h
index ae1bbb90..d919493b 100644
--- a/src/async/imap/MCIMAPAsyncSession.h
+++ b/src/async/imap/MCIMAPAsyncSession.h
@@ -33,6 +33,8 @@ namespace mailcore {
class IMAPIdentityOperation;
class IMAPAsyncConnection;
class IMAPCapabilityOperation;
+ class IMAPMessageRenderingOperation;
+ class IMAPMessage;
class IMAPAsyncSession : public Object {
public:
@@ -132,6 +134,11 @@ namespace mailcore {
virtual IMAPOperation * checkAccountOperation();
virtual IMAPCapabilityOperation * capabilityOperation();
+
+ virtual IMAPMessageRenderingOperation * htmlRenderingOperation(IMAPMessage * message, String * folder);
+ virtual IMAPMessageRenderingOperation * htmlBodyRenderingOperation(IMAPMessage * message, String * folder);
+ virtual IMAPMessageRenderingOperation * plainTextRenderingOperation(IMAPMessage * message, String * folder);
+ virtual IMAPMessageRenderingOperation * plainTextBodyRenderingOperation(IMAPMessage * message, String * folder);
private:
Array * mSessions;
diff --git a/src/async/imap/MCIMAPDisconnectOperation.cc b/src/async/imap/MCIMAPDisconnectOperation.cc
index 070eeaae..4ee4ee9a 100644
--- a/src/async/imap/MCIMAPDisconnectOperation.cc
+++ b/src/async/imap/MCIMAPDisconnectOperation.cc
@@ -24,5 +24,5 @@ IMAPDisconnectOperation::~IMAPDisconnectOperation()
void IMAPDisconnectOperation::main()
{
session()->session()->disconnect();
- setError(ErrorCode::ErrorNone);
+ setError(ErrorNone);
}
diff --git a/src/async/imap/MCIMAPFetchMessagesOperation.cc b/src/async/imap/MCIMAPFetchMessagesOperation.cc
index ece60c66..480f2c1b 100644
--- a/src/async/imap/MCIMAPFetchMessagesOperation.cc
+++ b/src/async/imap/MCIMAPFetchMessagesOperation.cc
@@ -21,6 +21,7 @@ IMAPFetchMessagesOperation::IMAPFetchMessagesOperation()
mMessages = NULL;
mVanishedMessages = NULL;
mModSequenceValue = 0;
+ mExtraHeaders = NULL;
}
IMAPFetchMessagesOperation::~IMAPFetchMessagesOperation()
@@ -28,6 +29,7 @@ IMAPFetchMessagesOperation::~IMAPFetchMessagesOperation()
MC_SAFE_RELEASE(mIndexes);
MC_SAFE_RELEASE(mMessages);
MC_SAFE_RELEASE(mVanishedMessages);
+ MC_SAFE_RELEASE(mExtraHeaders);
}
void IMAPFetchMessagesOperation::setFetchByUidEnabled(bool enabled)
@@ -70,6 +72,14 @@ IMAPMessagesRequestKind IMAPFetchMessagesOperation::kind()
return mKind;
}
+void IMAPFetchMessagesOperation::setExtraHeaders(Array * extraHeaders) {
+ MC_SAFE_REPLACE_COPY(Array, mExtraHeaders, extraHeaders);
+}
+
+Array * IMAPFetchMessagesOperation::extraHeaders() {
+ return mExtraHeaders;
+}
+
Array * IMAPFetchMessagesOperation::messages()
{
return mMessages;
@@ -87,18 +97,22 @@ void IMAPFetchMessagesOperation::main()
if (mModSequenceValue != 0) {
IMAPSyncResult * syncResult;
- syncResult = session()->session()->syncMessagesByUID(folder(), mKind, mIndexes, mModSequenceValue, this, &error);
+ syncResult = session()->session()->syncMessagesByUIDWithExtraHeaders(folder(), mKind, mIndexes,
+ mModSequenceValue, this, mExtraHeaders,
+ &error);
if (syncResult != NULL) {
mMessages = syncResult->modifiedOrAddedMessages();
mVanishedMessages = syncResult->vanishedMessages();
}
}
else {
- mMessages = session()->session()->fetchMessagesByUID(folder(), mKind, mIndexes, this, &error);
+ mMessages = session()->session()->fetchMessagesByUIDWithExtraHeaders(folder(), mKind, mIndexes, this,
+ mExtraHeaders, &error);
}
}
else {
- mMessages = session()->session()->fetchMessagesByNumber(folder(), mKind, mIndexes, this, &error);
+ mMessages = session()->session()->fetchMessagesByNumberWithExtraHeaders(folder(), mKind, mIndexes, this,
+ mExtraHeaders, &error);
}
MC_SAFE_RETAIN(mMessages);
MC_SAFE_RETAIN(mVanishedMessages);
diff --git a/src/async/imap/MCIMAPFetchMessagesOperation.h b/src/async/imap/MCIMAPFetchMessagesOperation.h
index 64f75bbf..2a57e44c 100644
--- a/src/async/imap/MCIMAPFetchMessagesOperation.h
+++ b/src/async/imap/MCIMAPFetchMessagesOperation.h
@@ -33,6 +33,9 @@ namespace mailcore {
virtual void setKind(IMAPMessagesRequestKind kind);
virtual IMAPMessagesRequestKind kind();
+ virtual void setExtraHeaders(Array * extraHeaders);
+ virtual Array * extraHeaders();
+
// Result.
virtual Array * /* IMAPMessage */ messages();
virtual IndexSet * vanishedMessages();
@@ -44,6 +47,7 @@ namespace mailcore {
bool mFetchByUidEnabled;
IndexSet * mIndexes;
IMAPMessagesRequestKind mKind;
+ Array * /* String */ mExtraHeaders;
Array * /* IMAPMessage */ mMessages;
IndexSet * mVanishedMessages;
uint64_t mModSequenceValue;
diff --git a/src/async/imap/MCIMAPFolderInfoOperation.cc b/src/async/imap/MCIMAPFolderInfoOperation.cc
index 20df52ed..c6bba891 100644
--- a/src/async/imap/MCIMAPFolderInfoOperation.cc
+++ b/src/async/imap/MCIMAPFolderInfoOperation.cc
@@ -56,13 +56,13 @@ void IMAPFolderInfoOperation::main()
ErrorCode error;
session()->session()->loginIfNeeded(&error);
- if (error != ErrorCode::ErrorNone) {
+ if (error != ErrorNone) {
setError(error);
return;
}
session()->session()->select(folder(), &error);
- if (error != ErrorCode::ErrorNone) {
+ if (error != ErrorNone) {
setError(error);
return;
}
diff --git a/src/async/imap/MCIMAPFolderStatusOperation.cc b/src/async/imap/MCIMAPFolderStatusOperation.cc
index 0ca7d884..22f2797b 100644
--- a/src/async/imap/MCIMAPFolderStatusOperation.cc
+++ b/src/async/imap/MCIMAPFolderStatusOperation.cc
@@ -29,13 +29,13 @@ void IMAPFolderStatusOperation::main()
ErrorCode error;
session()->session()->loginIfNeeded(&error);
- if (error != ErrorCode::ErrorNone) {
+ if (error != ErrorNone) {
setError(error);
return;
}
IMAPFolderStatus *status = session()->session()->folderStatus(folder(), &error);
- if (error != ErrorCode::ErrorNone) {
+ if (error != ErrorNone) {
setError(error);
return;
}
diff --git a/src/async/imap/MCIMAPMessageRenderingOperation.cc b/src/async/imap/MCIMAPMessageRenderingOperation.cc
new file mode 100644
index 00000000..e054aa3f
--- /dev/null
+++ b/src/async/imap/MCIMAPMessageRenderingOperation.cc
@@ -0,0 +1,73 @@
+//
+// MCIMAPMessageRenderingOperation.cc
+// mailcore2
+//
+// Created by Paul Young on 27/06/2013.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#include "MCIMAPMessageRenderingOperation.h"
+
+#include "MCIMAPSession.h"
+#include "MCIMAPAsyncConnection.h"
+
+using namespace mailcore;
+
+IMAPMessageRenderingOperation::IMAPMessageRenderingOperation()
+{
+ mMessage = NULL;
+ mRenderingType = IMAPMessageRenderingTypePlainTextBody;
+ mResult = NULL;
+}
+
+IMAPMessageRenderingOperation::~IMAPMessageRenderingOperation()
+{
+ MC_SAFE_RELEASE(mMessage);
+ MC_SAFE_RELEASE(mResult);
+}
+
+void IMAPMessageRenderingOperation::setRenderingType(IMAPMessageRenderingType type)
+{
+ mRenderingType = type;
+}
+
+IMAPMessageRenderingType IMAPMessageRenderingOperation::renderingType()
+{
+ return mRenderingType;
+}
+
+void IMAPMessageRenderingOperation::setMessage(IMAPMessage * message)
+{
+ MC_SAFE_REPLACE_COPY(IMAPMessage, mMessage, message);
+}
+
+IMAPMessage * IMAPMessageRenderingOperation::message()
+{
+ return mMessage;
+}
+
+String * IMAPMessageRenderingOperation::result()
+{
+ return mResult;
+}
+
+void IMAPMessageRenderingOperation::main()
+{
+ ErrorCode error = ErrorNone;
+
+ if (mRenderingType == IMAPMessageRenderingTypeHTML) {
+ mResult = session()->session()->htmlRendering(mMessage, folder(), &error);
+ }
+ else if (mRenderingType == IMAPMessageRenderingTypeHTMLBody) {
+ mResult = session()->session()->htmlBodyRendering(mMessage, folder(), &error);
+ }
+ else if (mRenderingType == IMAPMessageRenderingTypePlainText) {
+ mResult = session()->session()->plainTextRendering(mMessage, folder(), &error);
+ }
+ else if (mRenderingType == IMAPMessageRenderingTypePlainTextBody) {
+ mResult = session()->session()->plainTextBodyRendering(mMessage, folder(), &error);
+ }
+
+ MC_SAFE_RETAIN(mResult);
+ setError(error);
+}
diff --git a/src/async/imap/MCIMAPMessageRenderingOperation.h b/src/async/imap/MCIMAPMessageRenderingOperation.h
new file mode 100644
index 00000000..9840fd88
--- /dev/null
+++ b/src/async/imap/MCIMAPMessageRenderingOperation.h
@@ -0,0 +1,47 @@
+//
+// MCIMAPMessageRenderingOperation.h
+// mailcore2
+//
+// Created by Paul Young on 27/06/2013.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#ifndef __MAILCORE_MCIMAPMessageRenderingOperation_H_
+
+#define __MAILCORE_MCIMAPMessageRenderingOperation_H_
+
+#include <MailCore/MCIMAPOperation.h>
+#include <MailCore/MCIMAPMessage.h>
+
+#ifdef __cplusplus
+
+namespace mailcore {
+
+ class IMAPMessageRenderingOperation : public IMAPOperation {
+ public:
+ IMAPMessageRenderingOperation();
+ virtual ~IMAPMessageRenderingOperation();
+
+ virtual void setRenderingType(IMAPMessageRenderingType type);
+ virtual IMAPMessageRenderingType renderingType();
+
+ virtual void setMessage(IMAPMessage * message);
+ virtual IMAPMessage * message();
+
+ // Result.
+ virtual String * result();
+
+ public: // subclass behavior
+ virtual void main();
+
+ private:
+ IMAPMessageRenderingType mRenderingType;
+ String * mResult;
+ IMAPMessage * mMessage;
+
+ };
+}
+
+#endif
+
+#endif
diff --git a/src/async/smtp/MCSMTPDisconnectOperation.cc b/src/async/smtp/MCSMTPDisconnectOperation.cc
index 592ceb48..ba20567b 100644
--- a/src/async/smtp/MCSMTPDisconnectOperation.cc
+++ b/src/async/smtp/MCSMTPDisconnectOperation.cc
@@ -24,5 +24,5 @@ SMTPDisconnectOperation::~SMTPDisconnectOperation()
void SMTPDisconnectOperation::main()
{
session()->session()->disconnect();
- setError(ErrorCode::ErrorNone);
+ setError(ErrorNone);
}