diff options
author | 2013-07-20 22:49:28 -0700 | |
---|---|---|
committer | 2013-07-20 22:49:28 -0700 | |
commit | 52473496926f12877dca66ad44ac1af65e9406d6 (patch) | |
tree | c839a7674083a7795d278faefeea161a9d267fdc /src/async | |
parent | 0bc680acc776bd83dd9f0300015fc85b5e9aad7f (diff) | |
parent | 798a4b1117527acc1de523b13577d86fe7df990b (diff) |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'src/async')
-rw-r--r-- | src/async/imap/MCAsyncIMAP.h | 2 | ||||
-rw-r--r-- | src/async/imap/MCIMAPAsyncConnection.cc | 38 | ||||
-rw-r--r-- | src/async/imap/MCIMAPAsyncConnection.h | 11 | ||||
-rw-r--r-- | src/async/imap/MCIMAPAsyncSession.cc | 30 | ||||
-rw-r--r-- | src/async/imap/MCIMAPAsyncSession.h | 7 | ||||
-rw-r--r-- | src/async/imap/MCIMAPDisconnectOperation.cc | 2 | ||||
-rw-r--r-- | src/async/imap/MCIMAPFetchMessagesOperation.cc | 20 | ||||
-rw-r--r-- | src/async/imap/MCIMAPFetchMessagesOperation.h | 4 | ||||
-rw-r--r-- | src/async/imap/MCIMAPFolderInfoOperation.cc | 4 | ||||
-rw-r--r-- | src/async/imap/MCIMAPFolderStatusOperation.cc | 4 | ||||
-rw-r--r-- | src/async/imap/MCIMAPMessageRenderingOperation.cc | 73 | ||||
-rw-r--r-- | src/async/imap/MCIMAPMessageRenderingOperation.h | 47 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPDisconnectOperation.cc | 2 |
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); } |