From e3c45123799d84b0ff85035db606cc36b8379427 Mon Sep 17 00:00:00 2001 From: "Hoa V. DINH" Date: Wed, 19 Nov 2014 00:48:34 -0800 Subject: Renamed .cc files to .cpp (fixed #983) --- src/async/imap/MCIMAPAppendMessageOperation.cc | 82 -- src/async/imap/MCIMAPAppendMessageOperation.cpp | 82 ++ src/async/imap/MCIMAPAsyncConnection.cc | 424 ----------- src/async/imap/MCIMAPAsyncConnection.cpp | 424 +++++++++++ src/async/imap/MCIMAPAsyncSession.cc | 848 --------------------- src/async/imap/MCIMAPAsyncSession.cpp | 848 +++++++++++++++++++++ src/async/imap/MCIMAPCapabilityOperation.cc | 43 -- src/async/imap/MCIMAPCapabilityOperation.cpp | 43 ++ src/async/imap/MCIMAPCheckAccountOperation.cc | 23 - src/async/imap/MCIMAPCheckAccountOperation.cpp | 23 + src/async/imap/MCIMAPConnectOperation.cc | 21 - src/async/imap/MCIMAPConnectOperation.cpp | 21 + src/async/imap/MCIMAPCopyMessagesOperation.cc | 61 -- src/async/imap/MCIMAPCopyMessagesOperation.cpp | 61 ++ src/async/imap/MCIMAPCreateFolderOperation.cc | 29 - src/async/imap/MCIMAPCreateFolderOperation.cpp | 29 + src/async/imap/MCIMAPDeleteFolderOperation.cc | 29 - src/async/imap/MCIMAPDeleteFolderOperation.cpp | 29 + src/async/imap/MCIMAPDisconnectOperation.cc | 28 - src/async/imap/MCIMAPDisconnectOperation.cpp | 28 + src/async/imap/MCIMAPExpungeOperation.cc | 29 - src/async/imap/MCIMAPExpungeOperation.cpp | 29 + src/async/imap/MCIMAPFetchContentOperation.cc | 98 --- src/async/imap/MCIMAPFetchContentOperation.cpp | 98 +++ src/async/imap/MCIMAPFetchFoldersOperation.cc | 55 -- src/async/imap/MCIMAPFetchFoldersOperation.cpp | 55 ++ src/async/imap/MCIMAPFetchMessagesOperation.cc | 120 --- src/async/imap/MCIMAPFetchMessagesOperation.cpp | 120 +++ src/async/imap/MCIMAPFetchNamespaceOperation.cc | 38 - src/async/imap/MCIMAPFetchNamespaceOperation.cpp | 38 + .../imap/MCIMAPFetchParsedContentOperation.cc | 79 -- .../imap/MCIMAPFetchParsedContentOperation.cpp | 79 ++ src/async/imap/MCIMAPFolderInfoOperation.cc | 86 --- src/async/imap/MCIMAPFolderInfoOperation.cpp | 86 +++ src/async/imap/MCIMAPFolderStatusOperation.cc | 51 -- src/async/imap/MCIMAPFolderStatusOperation.cpp | 51 ++ src/async/imap/MCIMAPIdentityOperation.cc | 51 -- src/async/imap/MCIMAPIdentityOperation.cpp | 51 ++ src/async/imap/MCIMAPIdleOperation.cc | 98 --- src/async/imap/MCIMAPIdleOperation.cpp | 98 +++ src/async/imap/MCIMAPMessageRenderingOperation.cc | 76 -- src/async/imap/MCIMAPMessageRenderingOperation.cpp | 76 ++ src/async/imap/MCIMAPMultiDisconnectOperation.cc | 58 -- src/async/imap/MCIMAPMultiDisconnectOperation.cpp | 58 ++ src/async/imap/MCIMAPNoopOperation.cc | 29 - src/async/imap/MCIMAPNoopOperation.cpp | 29 + src/async/imap/MCIMAPOperation.cc | 185 ----- src/async/imap/MCIMAPOperation.cpp | 185 +++++ src/async/imap/MCIMAPQuotaOperation.cc | 47 -- src/async/imap/MCIMAPQuotaOperation.cpp | 47 ++ src/async/imap/MCIMAPRenameFolderOperation.cc | 42 - src/async/imap/MCIMAPRenameFolderOperation.cpp | 42 + src/async/imap/MCIMAPSearchOperation.cc | 79 -- src/async/imap/MCIMAPSearchOperation.cpp | 79 ++ src/async/imap/MCIMAPStoreFlagsOperation.cc | 92 --- src/async/imap/MCIMAPStoreFlagsOperation.cpp | 92 +++ src/async/imap/MCIMAPStoreLabelsOperation.cc | 82 -- src/async/imap/MCIMAPStoreLabelsOperation.cpp | 82 ++ src/async/imap/MCIMAPSubscribeFolderOperation.cc | 45 -- src/async/imap/MCIMAPSubscribeFolderOperation.cpp | 45 ++ src/async/nntp/MCNNTPAsyncSession.cc | 302 -------- src/async/nntp/MCNNTPAsyncSession.cpp | 302 ++++++++ src/async/nntp/MCNNTPCheckAccountOperation.cc | 30 - src/async/nntp/MCNNTPCheckAccountOperation.cpp | 30 + src/async/nntp/MCNNTPDisconnectOperation.cc | 30 - src/async/nntp/MCNNTPDisconnectOperation.cpp | 30 + src/async/nntp/MCNNTPFetchAllArticlesOperation.cc | 49 -- src/async/nntp/MCNNTPFetchAllArticlesOperation.cpp | 49 ++ src/async/nntp/MCNNTPFetchArticleOperation.cc | 69 -- src/async/nntp/MCNNTPFetchArticleOperation.cpp | 69 ++ src/async/nntp/MCNNTPFetchHeaderOperation.cc | 59 -- src/async/nntp/MCNNTPFetchHeaderOperation.cpp | 59 ++ src/async/nntp/MCNNTPFetchOverviewOperation.cc | 68 -- src/async/nntp/MCNNTPFetchOverviewOperation.cpp | 68 ++ src/async/nntp/MCNNTPFetchServerTimeOperation.cc | 34 - src/async/nntp/MCNNTPFetchServerTimeOperation.cpp | 34 + src/async/nntp/MCNNTPListNewsgroupsOperation.cc | 48 -- src/async/nntp/MCNNTPListNewsgroupsOperation.cpp | 48 ++ src/async/nntp/MCNNTPOperation.cc | 104 --- src/async/nntp/MCNNTPOperation.cpp | 104 +++ src/async/pop/MCPOPAsyncSession.cc | 275 ------- src/async/pop/MCPOPAsyncSession.cpp | 275 +++++++ src/async/pop/MCPOPCheckAccountOperation.cc | 30 - src/async/pop/MCPOPCheckAccountOperation.cpp | 30 + src/async/pop/MCPOPDeleteMessagesOperation.cc | 63 -- src/async/pop/MCPOPDeleteMessagesOperation.cpp | 63 ++ src/async/pop/MCPOPFetchHeaderOperation.cc | 51 -- src/async/pop/MCPOPFetchHeaderOperation.cpp | 51 ++ src/async/pop/MCPOPFetchMessageOperation.cc | 49 -- src/async/pop/MCPOPFetchMessageOperation.cpp | 49 ++ src/async/pop/MCPOPFetchMessagesOperation.cc | 37 - src/async/pop/MCPOPFetchMessagesOperation.cpp | 37 + src/async/pop/MCPOPNoopOperation.cc | 30 - src/async/pop/MCPOPNoopOperation.cpp | 30 + src/async/pop/MCPOPOperation.cc | 104 --- src/async/pop/MCPOPOperation.cpp | 104 +++ src/async/smtp/MCSMTPAsyncSession.cc | 294 ------- src/async/smtp/MCSMTPAsyncSession.cpp | 294 +++++++ src/async/smtp/MCSMTPCheckAccountOperation.cc | 42 - src/async/smtp/MCSMTPCheckAccountOperation.cpp | 42 + src/async/smtp/MCSMTPDisconnectOperation.cc | 28 - src/async/smtp/MCSMTPDisconnectOperation.cpp | 28 + src/async/smtp/MCSMTPLoginOperation.cc | 29 - src/async/smtp/MCSMTPLoginOperation.cpp | 29 + src/async/smtp/MCSMTPNoopOperation.cc | 29 - src/async/smtp/MCSMTPNoopOperation.cpp | 29 + src/async/smtp/MCSMTPOperation.cc | 102 --- src/async/smtp/MCSMTPOperation.cpp | 102 +++ src/async/smtp/MCSMTPSendWithDataOperation.cc | 70 -- src/async/smtp/MCSMTPSendWithDataOperation.cpp | 70 ++ 110 files changed, 5054 insertions(+), 5054 deletions(-) delete mode 100644 src/async/imap/MCIMAPAppendMessageOperation.cc create mode 100644 src/async/imap/MCIMAPAppendMessageOperation.cpp delete mode 100755 src/async/imap/MCIMAPAsyncConnection.cc create mode 100755 src/async/imap/MCIMAPAsyncConnection.cpp delete mode 100755 src/async/imap/MCIMAPAsyncSession.cc create mode 100755 src/async/imap/MCIMAPAsyncSession.cpp delete mode 100644 src/async/imap/MCIMAPCapabilityOperation.cc create mode 100644 src/async/imap/MCIMAPCapabilityOperation.cpp delete mode 100644 src/async/imap/MCIMAPCheckAccountOperation.cc create mode 100644 src/async/imap/MCIMAPCheckAccountOperation.cpp delete mode 100644 src/async/imap/MCIMAPConnectOperation.cc create mode 100644 src/async/imap/MCIMAPConnectOperation.cpp delete mode 100644 src/async/imap/MCIMAPCopyMessagesOperation.cc create mode 100644 src/async/imap/MCIMAPCopyMessagesOperation.cpp delete mode 100644 src/async/imap/MCIMAPCreateFolderOperation.cc create mode 100644 src/async/imap/MCIMAPCreateFolderOperation.cpp delete mode 100644 src/async/imap/MCIMAPDeleteFolderOperation.cc create mode 100644 src/async/imap/MCIMAPDeleteFolderOperation.cpp delete mode 100644 src/async/imap/MCIMAPDisconnectOperation.cc create mode 100644 src/async/imap/MCIMAPDisconnectOperation.cpp delete mode 100644 src/async/imap/MCIMAPExpungeOperation.cc create mode 100644 src/async/imap/MCIMAPExpungeOperation.cpp delete mode 100644 src/async/imap/MCIMAPFetchContentOperation.cc create mode 100644 src/async/imap/MCIMAPFetchContentOperation.cpp delete mode 100644 src/async/imap/MCIMAPFetchFoldersOperation.cc create mode 100644 src/async/imap/MCIMAPFetchFoldersOperation.cpp delete mode 100644 src/async/imap/MCIMAPFetchMessagesOperation.cc create mode 100644 src/async/imap/MCIMAPFetchMessagesOperation.cpp delete mode 100644 src/async/imap/MCIMAPFetchNamespaceOperation.cc create mode 100644 src/async/imap/MCIMAPFetchNamespaceOperation.cpp delete mode 100644 src/async/imap/MCIMAPFetchParsedContentOperation.cc create mode 100644 src/async/imap/MCIMAPFetchParsedContentOperation.cpp delete mode 100644 src/async/imap/MCIMAPFolderInfoOperation.cc create mode 100644 src/async/imap/MCIMAPFolderInfoOperation.cpp delete mode 100644 src/async/imap/MCIMAPFolderStatusOperation.cc create mode 100644 src/async/imap/MCIMAPFolderStatusOperation.cpp delete mode 100644 src/async/imap/MCIMAPIdentityOperation.cc create mode 100644 src/async/imap/MCIMAPIdentityOperation.cpp delete mode 100644 src/async/imap/MCIMAPIdleOperation.cc create mode 100644 src/async/imap/MCIMAPIdleOperation.cpp delete mode 100644 src/async/imap/MCIMAPMessageRenderingOperation.cc create mode 100644 src/async/imap/MCIMAPMessageRenderingOperation.cpp delete mode 100644 src/async/imap/MCIMAPMultiDisconnectOperation.cc create mode 100644 src/async/imap/MCIMAPMultiDisconnectOperation.cpp delete mode 100644 src/async/imap/MCIMAPNoopOperation.cc create mode 100644 src/async/imap/MCIMAPNoopOperation.cpp delete mode 100644 src/async/imap/MCIMAPOperation.cc create mode 100644 src/async/imap/MCIMAPOperation.cpp delete mode 100644 src/async/imap/MCIMAPQuotaOperation.cc create mode 100644 src/async/imap/MCIMAPQuotaOperation.cpp delete mode 100644 src/async/imap/MCIMAPRenameFolderOperation.cc create mode 100644 src/async/imap/MCIMAPRenameFolderOperation.cpp delete mode 100644 src/async/imap/MCIMAPSearchOperation.cc create mode 100644 src/async/imap/MCIMAPSearchOperation.cpp delete mode 100644 src/async/imap/MCIMAPStoreFlagsOperation.cc create mode 100644 src/async/imap/MCIMAPStoreFlagsOperation.cpp delete mode 100644 src/async/imap/MCIMAPStoreLabelsOperation.cc create mode 100644 src/async/imap/MCIMAPStoreLabelsOperation.cpp delete mode 100644 src/async/imap/MCIMAPSubscribeFolderOperation.cc create mode 100644 src/async/imap/MCIMAPSubscribeFolderOperation.cpp delete mode 100644 src/async/nntp/MCNNTPAsyncSession.cc create mode 100644 src/async/nntp/MCNNTPAsyncSession.cpp delete mode 100644 src/async/nntp/MCNNTPCheckAccountOperation.cc create mode 100644 src/async/nntp/MCNNTPCheckAccountOperation.cpp delete mode 100644 src/async/nntp/MCNNTPDisconnectOperation.cc create mode 100644 src/async/nntp/MCNNTPDisconnectOperation.cpp delete mode 100644 src/async/nntp/MCNNTPFetchAllArticlesOperation.cc create mode 100644 src/async/nntp/MCNNTPFetchAllArticlesOperation.cpp delete mode 100644 src/async/nntp/MCNNTPFetchArticleOperation.cc create mode 100644 src/async/nntp/MCNNTPFetchArticleOperation.cpp delete mode 100644 src/async/nntp/MCNNTPFetchHeaderOperation.cc create mode 100644 src/async/nntp/MCNNTPFetchHeaderOperation.cpp delete mode 100644 src/async/nntp/MCNNTPFetchOverviewOperation.cc create mode 100644 src/async/nntp/MCNNTPFetchOverviewOperation.cpp delete mode 100644 src/async/nntp/MCNNTPFetchServerTimeOperation.cc create mode 100644 src/async/nntp/MCNNTPFetchServerTimeOperation.cpp delete mode 100644 src/async/nntp/MCNNTPListNewsgroupsOperation.cc create mode 100644 src/async/nntp/MCNNTPListNewsgroupsOperation.cpp delete mode 100644 src/async/nntp/MCNNTPOperation.cc create mode 100644 src/async/nntp/MCNNTPOperation.cpp delete mode 100644 src/async/pop/MCPOPAsyncSession.cc create mode 100644 src/async/pop/MCPOPAsyncSession.cpp delete mode 100644 src/async/pop/MCPOPCheckAccountOperation.cc create mode 100644 src/async/pop/MCPOPCheckAccountOperation.cpp delete mode 100644 src/async/pop/MCPOPDeleteMessagesOperation.cc create mode 100644 src/async/pop/MCPOPDeleteMessagesOperation.cpp delete mode 100644 src/async/pop/MCPOPFetchHeaderOperation.cc create mode 100644 src/async/pop/MCPOPFetchHeaderOperation.cpp delete mode 100644 src/async/pop/MCPOPFetchMessageOperation.cc create mode 100644 src/async/pop/MCPOPFetchMessageOperation.cpp delete mode 100644 src/async/pop/MCPOPFetchMessagesOperation.cc create mode 100644 src/async/pop/MCPOPFetchMessagesOperation.cpp delete mode 100644 src/async/pop/MCPOPNoopOperation.cc create mode 100644 src/async/pop/MCPOPNoopOperation.cpp delete mode 100644 src/async/pop/MCPOPOperation.cc create mode 100644 src/async/pop/MCPOPOperation.cpp delete mode 100644 src/async/smtp/MCSMTPAsyncSession.cc create mode 100644 src/async/smtp/MCSMTPAsyncSession.cpp delete mode 100644 src/async/smtp/MCSMTPCheckAccountOperation.cc create mode 100644 src/async/smtp/MCSMTPCheckAccountOperation.cpp delete mode 100644 src/async/smtp/MCSMTPDisconnectOperation.cc create mode 100644 src/async/smtp/MCSMTPDisconnectOperation.cpp delete mode 100644 src/async/smtp/MCSMTPLoginOperation.cc create mode 100644 src/async/smtp/MCSMTPLoginOperation.cpp delete mode 100644 src/async/smtp/MCSMTPNoopOperation.cc create mode 100644 src/async/smtp/MCSMTPNoopOperation.cpp delete mode 100644 src/async/smtp/MCSMTPOperation.cc create mode 100644 src/async/smtp/MCSMTPOperation.cpp delete mode 100644 src/async/smtp/MCSMTPSendWithDataOperation.cc create mode 100644 src/async/smtp/MCSMTPSendWithDataOperation.cpp (limited to 'src/async') diff --git a/src/async/imap/MCIMAPAppendMessageOperation.cc b/src/async/imap/MCIMAPAppendMessageOperation.cc deleted file mode 100644 index 23eaaea0..00000000 --- a/src/async/imap/MCIMAPAppendMessageOperation.cc +++ /dev/null @@ -1,82 +0,0 @@ -// -// MCIMAPAppendMessageOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPAppendMessageOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPAppendMessageOperation::IMAPAppendMessageOperation() -{ - mMessageData = NULL; - mFlags = MessageFlagNone; - mCustomFlags = NULL; - mDate = (time_t) -1; - mCreatedUID = 0; -} - -IMAPAppendMessageOperation::~IMAPAppendMessageOperation() -{ - MC_SAFE_RELEASE(mMessageData); - MC_SAFE_RELEASE(mCustomFlags); -} - -void IMAPAppendMessageOperation::setMessageData(Data * messageData) -{ - MC_SAFE_REPLACE_RETAIN(Data, mMessageData, messageData); -} - -Data * IMAPAppendMessageOperation::messageData() -{ - return mMessageData; -} - -void IMAPAppendMessageOperation::setFlags(MessageFlag flags) -{ - mFlags = flags; -} - -MessageFlag IMAPAppendMessageOperation::flags() -{ - return mFlags; -} - -void IMAPAppendMessageOperation::setCustomFlags(Array * customFlags) -{ - MC_SAFE_REPLACE_COPY(Array, mCustomFlags, customFlags); -} - -Array * IMAPAppendMessageOperation::customFlags() -{ - return customFlags(); -} - -void IMAPAppendMessageOperation::setDate(time_t date) -{ - mDate = date; -} - -time_t IMAPAppendMessageOperation::date() -{ - return mDate; -} - -uint32_t IMAPAppendMessageOperation::createdUID() -{ - return mCreatedUID; -} - -void IMAPAppendMessageOperation::main() -{ - ErrorCode error; - session()->session()->appendMessageWithCustomFlagsAndDate(folder(), mMessageData, mFlags, mCustomFlags, mDate, this, &mCreatedUID, &error); - setError(error); -} - diff --git a/src/async/imap/MCIMAPAppendMessageOperation.cpp b/src/async/imap/MCIMAPAppendMessageOperation.cpp new file mode 100644 index 00000000..23eaaea0 --- /dev/null +++ b/src/async/imap/MCIMAPAppendMessageOperation.cpp @@ -0,0 +1,82 @@ +// +// MCIMAPAppendMessageOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPAppendMessageOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPAppendMessageOperation::IMAPAppendMessageOperation() +{ + mMessageData = NULL; + mFlags = MessageFlagNone; + mCustomFlags = NULL; + mDate = (time_t) -1; + mCreatedUID = 0; +} + +IMAPAppendMessageOperation::~IMAPAppendMessageOperation() +{ + MC_SAFE_RELEASE(mMessageData); + MC_SAFE_RELEASE(mCustomFlags); +} + +void IMAPAppendMessageOperation::setMessageData(Data * messageData) +{ + MC_SAFE_REPLACE_RETAIN(Data, mMessageData, messageData); +} + +Data * IMAPAppendMessageOperation::messageData() +{ + return mMessageData; +} + +void IMAPAppendMessageOperation::setFlags(MessageFlag flags) +{ + mFlags = flags; +} + +MessageFlag IMAPAppendMessageOperation::flags() +{ + return mFlags; +} + +void IMAPAppendMessageOperation::setCustomFlags(Array * customFlags) +{ + MC_SAFE_REPLACE_COPY(Array, mCustomFlags, customFlags); +} + +Array * IMAPAppendMessageOperation::customFlags() +{ + return customFlags(); +} + +void IMAPAppendMessageOperation::setDate(time_t date) +{ + mDate = date; +} + +time_t IMAPAppendMessageOperation::date() +{ + return mDate; +} + +uint32_t IMAPAppendMessageOperation::createdUID() +{ + return mCreatedUID; +} + +void IMAPAppendMessageOperation::main() +{ + ErrorCode error; + session()->session()->appendMessageWithCustomFlagsAndDate(folder(), mMessageData, mFlags, mCustomFlags, mDate, this, &mCreatedUID, &error); + setError(error); +} + diff --git a/src/async/imap/MCIMAPAsyncConnection.cc b/src/async/imap/MCIMAPAsyncConnection.cc deleted file mode 100755 index b2fc24c3..00000000 --- a/src/async/imap/MCIMAPAsyncConnection.cc +++ /dev/null @@ -1,424 +0,0 @@ -// -// IMAPAsyncConnection.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPAsyncConnection.h" - -#include "MCIMAP.h" -#include "MCIMAPFolderInfoOperation.h" -#include "MCIMAPFolderStatusOperation.h" -#include "MCIMAPFetchFoldersOperation.h" -#include "MCIMAPRenameFolderOperation.h" -#include "MCIMAPDeleteFolderOperation.h" -#include "MCIMAPCreateFolderOperation.h" -#include "MCIMAPSubscribeFolderOperation.h" -#include "MCIMAPExpungeOperation.h" -#include "MCIMAPAppendMessageOperation.h" -#include "MCIMAPCopyMessagesOperation.h" -#include "MCIMAPFetchMessagesOperation.h" -#include "MCIMAPFetchContentOperation.h" -#include "MCIMAPFetchParsedContentOperation.h" -#include "MCIMAPStoreFlagsOperation.h" -#include "MCIMAPStoreLabelsOperation.h" -#include "MCIMAPSearchOperation.h" -#include "MCIMAPConnectOperation.h" -#include "MCIMAPCheckAccountOperation.h" -#include "MCIMAPFetchNamespaceOperation.h" -#include "MCIMAPIdleOperation.h" -#include "MCIMAPIdentityOperation.h" -#include "MCIMAPCapabilityOperation.h" -#include "MCIMAPQuotaOperation.h" -#include "MCOperationQueueCallback.h" -#include "MCIMAPDisconnectOperation.h" -#include "MCIMAPNoopOperation.h" -#include "MCIMAPAsyncSession.h" -#include "MCConnectionLogger.h" -#include "MCIMAPMessageRenderingOperation.h" -#include "MCIMAPIdentity.h" - -using namespace mailcore; - -namespace mailcore { - - class IMAPOperationQueueCallback : public Object, public OperationQueueCallback { - public: - IMAPOperationQueueCallback(IMAPAsyncConnection * connection) { - mConnection = connection; - } - - virtual ~IMAPOperationQueueCallback() { - } - - virtual void queueStartRunning() { - mConnection->setQueueRunning(true); - mConnection->owner()->operationRunningStateChanged(); - mConnection->queueStartRunning(); - } - - virtual void queueStoppedRunning() { - mConnection->setQueueRunning(false); - mConnection->tryAutomaticDisconnect(); - mConnection->owner()->operationRunningStateChanged(); - mConnection->queueStoppedRunning(); - } - - private: - IMAPAsyncConnection * mConnection; - }; - - class IMAPConnectionLogger : public Object, public ConnectionLogger { - public: - IMAPConnectionLogger(IMAPAsyncConnection * connection) { - mConnection = connection; - } - - virtual ~IMAPConnectionLogger() { - } - - virtual void log(void * sender, ConnectionLogType logType, Data * buffer) - { - mConnection->logConnection(logType, buffer); - } - - private: - IMAPAsyncConnection * mConnection; - }; - -} - -IMAPAsyncConnection::IMAPAsyncConnection() -{ - mSession = new IMAPSession(); - mQueue = new OperationQueue(); - mDefaultNamespace = NULL; - mClientIdentity = new IMAPIdentity(); - mLastFolder = NULL; - mQueueCallback = new IMAPOperationQueueCallback(this); - mQueue->setCallback(mQueueCallback); - mOwner = NULL; - mConnectionLogger = NULL; - pthread_mutex_init(&mConnectionLoggerLock, NULL); - mInternalLogger = new IMAPConnectionLogger(this); - mAutomaticConfigurationEnabled = true; - mQueueRunning = false; - mScheduledAutomaticDisconnect = false; -} - -IMAPAsyncConnection::~IMAPAsyncConnection() -{ -#if __APPLE__ - cancelDelayedPerformMethodOnDispatchQueue((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, dispatchQueue()); -#else - cancelDelayedPerformMethod((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL); -#endif - pthread_mutex_destroy(&mConnectionLoggerLock); - MC_SAFE_RELEASE(mInternalLogger); - MC_SAFE_RELEASE(mQueueCallback); - MC_SAFE_RELEASE(mLastFolder); - MC_SAFE_RELEASE(mClientIdentity); - MC_SAFE_RELEASE(mDefaultNamespace); - MC_SAFE_RELEASE(mQueue); - MC_SAFE_RELEASE(mSession); -} - -void IMAPAsyncConnection::setHostname(String * hostname) -{ - mSession->setHostname(hostname); -} - -String * IMAPAsyncConnection::hostname() -{ - return mSession->hostname(); -} - -void IMAPAsyncConnection::setPort(unsigned int port) -{ - mSession->setPort(port); -} - -unsigned int IMAPAsyncConnection::port() -{ - return mSession->port(); -} - -void IMAPAsyncConnection::setUsername(String * username) -{ - mSession->setUsername(username); -} - -String * IMAPAsyncConnection::username() -{ - return mSession->username(); -} - -void IMAPAsyncConnection::setPassword(String * password) -{ - mSession->setPassword(password); -} - -String * IMAPAsyncConnection::password() -{ - return mSession->password(); -} - -void IMAPAsyncConnection::setOAuth2Token(String * token) -{ - mSession->setOAuth2Token(token); -} - -String * IMAPAsyncConnection::OAuth2Token() -{ - return mSession->OAuth2Token(); -} - -void IMAPAsyncConnection::setAuthType(AuthType authType) -{ - mSession->setAuthType(authType); -} - -AuthType IMAPAsyncConnection::authType() -{ - return mSession->authType(); -} - -void IMAPAsyncConnection::setConnectionType(ConnectionType connectionType) -{ - mSession->setConnectionType(connectionType); -} - -ConnectionType IMAPAsyncConnection::connectionType() -{ - return mSession->connectionType(); -} - -void IMAPAsyncConnection::setTimeout(time_t timeout) -{ - mSession->setTimeout(timeout); -} - -time_t IMAPAsyncConnection::timeout() -{ - return mSession->timeout(); -} - -void IMAPAsyncConnection::setCheckCertificateEnabled(bool enabled) -{ - mSession->setCheckCertificateEnabled(enabled); -} - -bool IMAPAsyncConnection::isCheckCertificateEnabled() -{ - return mSession->isCheckCertificateEnabled(); -} - -void IMAPAsyncConnection::setVoIPEnabled(bool enabled) -{ - mSession->setVoIPEnabled(enabled); -} - -bool IMAPAsyncConnection::isVoIPEnabled() -{ - return mSession->isVoIPEnabled(); -} - -void IMAPAsyncConnection::setDefaultNamespace(IMAPNamespace * ns) -{ - mSession->setDefaultNamespace(ns); - MC_SAFE_REPLACE_RETAIN(IMAPNamespace, mDefaultNamespace, ns); -} - -IMAPNamespace * IMAPAsyncConnection::defaultNamespace() -{ - return mDefaultNamespace; -} - -void IMAPAsyncConnection::setClientIdentity(IMAPIdentity * identity) -{ - MC_SAFE_REPLACE_COPY(IMAPIdentity, mClientIdentity, identity); - mc_foreacharray(String, key, identity->allInfoKeys()) { - mSession->clientIdentity()->setInfoForKey(key, identity->infoForKey(key)); - } -} - -IMAPIdentity * IMAPAsyncConnection::clientIdentity() -{ - return mClientIdentity; -} - -IMAPOperation * IMAPAsyncConnection::disconnectOperation() -{ - IMAPDisconnectOperation * op = new IMAPDisconnectOperation(); - op->setSession(this); - op->autorelease(); - return op; -} - -IMAPSession * IMAPAsyncConnection::session() -{ - return mSession; -} - -unsigned int IMAPAsyncConnection::operationsCount() -{ - return mQueue->count(); -} - -void IMAPAsyncConnection::cancelAllOperations() -{ - mQueue->cancelAllOperations(); -} - -void IMAPAsyncConnection::runOperation(IMAPOperation * operation) -{ - if (mScheduledAutomaticDisconnect) { -#if __APPLE__ - cancelDelayedPerformMethodOnDispatchQueue((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, dispatchQueue()); -#else - cancelDelayedPerformMethod((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL); -#endif - mOwner->release(); - mScheduledAutomaticDisconnect = false; - } - mQueue->addOperation(operation); -} - -void IMAPAsyncConnection::tryAutomaticDisconnect() -{ - // It's safe since no thread is running when this function is called. - if (mSession->isDisconnected()) { - return; - } - - bool scheduledAutomaticDisconnect = mScheduledAutomaticDisconnect; - if (scheduledAutomaticDisconnect) { -#if __APPLE__ - cancelDelayedPerformMethodOnDispatchQueue((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, dispatchQueue()); -#else - cancelDelayedPerformMethod((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL); -#endif - } - - mOwner->retain(); - mScheduledAutomaticDisconnect = true; -#if __APPLE__ - performMethodOnDispatchQueueAfterDelay((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, dispatchQueue(), 30); -#else - performMethodAfterDelay((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, 30); -#endif - - if (scheduledAutomaticDisconnect) { - mOwner->release(); - } -} - -void IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay(void * context) -{ - mScheduledAutomaticDisconnect = false; - - IMAPOperation * op = disconnectOperation(); - op->start(); - - mOwner->release(); -} - -void IMAPAsyncConnection::queueStartRunning() -{ - this->retain(); - mOwner->retain(); -} - -void IMAPAsyncConnection::queueStoppedRunning() -{ - mOwner->release(); - this->release(); -} - -void IMAPAsyncConnection::setLastFolder(String * folder) -{ - MC_SAFE_REPLACE_COPY(String, mLastFolder, folder); -} - -String * IMAPAsyncConnection::lastFolder() -{ - return mLastFolder; -} - -void IMAPAsyncConnection::setOwner(IMAPAsyncSession * owner) -{ - mOwner = owner; -} - -IMAPAsyncSession * IMAPAsyncConnection::owner() -{ - return mOwner; -} - -void IMAPAsyncConnection::setConnectionLogger(ConnectionLogger * logger) -{ - pthread_mutex_lock(&mConnectionLoggerLock); - mConnectionLogger = logger; - if (mConnectionLogger != NULL) { - mSession->setConnectionLogger(mInternalLogger); - } - else { - mSession->setConnectionLogger(NULL); - } - pthread_mutex_unlock(&mConnectionLoggerLock); -} - -ConnectionLogger * IMAPAsyncConnection::connectionLogger() -{ - ConnectionLogger * result; - - pthread_mutex_lock(&mConnectionLoggerLock); - result = mConnectionLogger; - pthread_mutex_unlock(&mConnectionLoggerLock); - - return result; -} - -void IMAPAsyncConnection::logConnection(ConnectionLogType logType, Data * buffer) -{ - pthread_mutex_lock(&mConnectionLoggerLock); - if (mConnectionLogger != NULL) { - mConnectionLogger->log(this, logType, buffer); - } - pthread_mutex_unlock(&mConnectionLoggerLock); -} - -void IMAPAsyncConnection::setAutomaticConfigurationEnabled(bool enabled) -{ - mAutomaticConfigurationEnabled = enabled; - mSession->setAutomaticConfigurationEnabled(enabled); -} - -bool IMAPAsyncConnection::isAutomaticConfigurationEnabled() -{ - return mAutomaticConfigurationEnabled; -} - -bool IMAPAsyncConnection::isQueueRunning() -{ - return mQueueRunning; -} - -void IMAPAsyncConnection::setQueueRunning(bool running) -{ - mQueueRunning = running; -} - -#if __APPLE__ -void IMAPAsyncConnection::setDispatchQueue(dispatch_queue_t dispatchQueue) -{ - mQueue->setDispatchQueue(dispatchQueue); -} - -dispatch_queue_t IMAPAsyncConnection::dispatchQueue() -{ - return mQueue->dispatchQueue(); -} -#endif diff --git a/src/async/imap/MCIMAPAsyncConnection.cpp b/src/async/imap/MCIMAPAsyncConnection.cpp new file mode 100755 index 00000000..b2fc24c3 --- /dev/null +++ b/src/async/imap/MCIMAPAsyncConnection.cpp @@ -0,0 +1,424 @@ +// +// IMAPAsyncConnection.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPAsyncConnection.h" + +#include "MCIMAP.h" +#include "MCIMAPFolderInfoOperation.h" +#include "MCIMAPFolderStatusOperation.h" +#include "MCIMAPFetchFoldersOperation.h" +#include "MCIMAPRenameFolderOperation.h" +#include "MCIMAPDeleteFolderOperation.h" +#include "MCIMAPCreateFolderOperation.h" +#include "MCIMAPSubscribeFolderOperation.h" +#include "MCIMAPExpungeOperation.h" +#include "MCIMAPAppendMessageOperation.h" +#include "MCIMAPCopyMessagesOperation.h" +#include "MCIMAPFetchMessagesOperation.h" +#include "MCIMAPFetchContentOperation.h" +#include "MCIMAPFetchParsedContentOperation.h" +#include "MCIMAPStoreFlagsOperation.h" +#include "MCIMAPStoreLabelsOperation.h" +#include "MCIMAPSearchOperation.h" +#include "MCIMAPConnectOperation.h" +#include "MCIMAPCheckAccountOperation.h" +#include "MCIMAPFetchNamespaceOperation.h" +#include "MCIMAPIdleOperation.h" +#include "MCIMAPIdentityOperation.h" +#include "MCIMAPCapabilityOperation.h" +#include "MCIMAPQuotaOperation.h" +#include "MCOperationQueueCallback.h" +#include "MCIMAPDisconnectOperation.h" +#include "MCIMAPNoopOperation.h" +#include "MCIMAPAsyncSession.h" +#include "MCConnectionLogger.h" +#include "MCIMAPMessageRenderingOperation.h" +#include "MCIMAPIdentity.h" + +using namespace mailcore; + +namespace mailcore { + + class IMAPOperationQueueCallback : public Object, public OperationQueueCallback { + public: + IMAPOperationQueueCallback(IMAPAsyncConnection * connection) { + mConnection = connection; + } + + virtual ~IMAPOperationQueueCallback() { + } + + virtual void queueStartRunning() { + mConnection->setQueueRunning(true); + mConnection->owner()->operationRunningStateChanged(); + mConnection->queueStartRunning(); + } + + virtual void queueStoppedRunning() { + mConnection->setQueueRunning(false); + mConnection->tryAutomaticDisconnect(); + mConnection->owner()->operationRunningStateChanged(); + mConnection->queueStoppedRunning(); + } + + private: + IMAPAsyncConnection * mConnection; + }; + + class IMAPConnectionLogger : public Object, public ConnectionLogger { + public: + IMAPConnectionLogger(IMAPAsyncConnection * connection) { + mConnection = connection; + } + + virtual ~IMAPConnectionLogger() { + } + + virtual void log(void * sender, ConnectionLogType logType, Data * buffer) + { + mConnection->logConnection(logType, buffer); + } + + private: + IMAPAsyncConnection * mConnection; + }; + +} + +IMAPAsyncConnection::IMAPAsyncConnection() +{ + mSession = new IMAPSession(); + mQueue = new OperationQueue(); + mDefaultNamespace = NULL; + mClientIdentity = new IMAPIdentity(); + mLastFolder = NULL; + mQueueCallback = new IMAPOperationQueueCallback(this); + mQueue->setCallback(mQueueCallback); + mOwner = NULL; + mConnectionLogger = NULL; + pthread_mutex_init(&mConnectionLoggerLock, NULL); + mInternalLogger = new IMAPConnectionLogger(this); + mAutomaticConfigurationEnabled = true; + mQueueRunning = false; + mScheduledAutomaticDisconnect = false; +} + +IMAPAsyncConnection::~IMAPAsyncConnection() +{ +#if __APPLE__ + cancelDelayedPerformMethodOnDispatchQueue((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, dispatchQueue()); +#else + cancelDelayedPerformMethod((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL); +#endif + pthread_mutex_destroy(&mConnectionLoggerLock); + MC_SAFE_RELEASE(mInternalLogger); + MC_SAFE_RELEASE(mQueueCallback); + MC_SAFE_RELEASE(mLastFolder); + MC_SAFE_RELEASE(mClientIdentity); + MC_SAFE_RELEASE(mDefaultNamespace); + MC_SAFE_RELEASE(mQueue); + MC_SAFE_RELEASE(mSession); +} + +void IMAPAsyncConnection::setHostname(String * hostname) +{ + mSession->setHostname(hostname); +} + +String * IMAPAsyncConnection::hostname() +{ + return mSession->hostname(); +} + +void IMAPAsyncConnection::setPort(unsigned int port) +{ + mSession->setPort(port); +} + +unsigned int IMAPAsyncConnection::port() +{ + return mSession->port(); +} + +void IMAPAsyncConnection::setUsername(String * username) +{ + mSession->setUsername(username); +} + +String * IMAPAsyncConnection::username() +{ + return mSession->username(); +} + +void IMAPAsyncConnection::setPassword(String * password) +{ + mSession->setPassword(password); +} + +String * IMAPAsyncConnection::password() +{ + return mSession->password(); +} + +void IMAPAsyncConnection::setOAuth2Token(String * token) +{ + mSession->setOAuth2Token(token); +} + +String * IMAPAsyncConnection::OAuth2Token() +{ + return mSession->OAuth2Token(); +} + +void IMAPAsyncConnection::setAuthType(AuthType authType) +{ + mSession->setAuthType(authType); +} + +AuthType IMAPAsyncConnection::authType() +{ + return mSession->authType(); +} + +void IMAPAsyncConnection::setConnectionType(ConnectionType connectionType) +{ + mSession->setConnectionType(connectionType); +} + +ConnectionType IMAPAsyncConnection::connectionType() +{ + return mSession->connectionType(); +} + +void IMAPAsyncConnection::setTimeout(time_t timeout) +{ + mSession->setTimeout(timeout); +} + +time_t IMAPAsyncConnection::timeout() +{ + return mSession->timeout(); +} + +void IMAPAsyncConnection::setCheckCertificateEnabled(bool enabled) +{ + mSession->setCheckCertificateEnabled(enabled); +} + +bool IMAPAsyncConnection::isCheckCertificateEnabled() +{ + return mSession->isCheckCertificateEnabled(); +} + +void IMAPAsyncConnection::setVoIPEnabled(bool enabled) +{ + mSession->setVoIPEnabled(enabled); +} + +bool IMAPAsyncConnection::isVoIPEnabled() +{ + return mSession->isVoIPEnabled(); +} + +void IMAPAsyncConnection::setDefaultNamespace(IMAPNamespace * ns) +{ + mSession->setDefaultNamespace(ns); + MC_SAFE_REPLACE_RETAIN(IMAPNamespace, mDefaultNamespace, ns); +} + +IMAPNamespace * IMAPAsyncConnection::defaultNamespace() +{ + return mDefaultNamespace; +} + +void IMAPAsyncConnection::setClientIdentity(IMAPIdentity * identity) +{ + MC_SAFE_REPLACE_COPY(IMAPIdentity, mClientIdentity, identity); + mc_foreacharray(String, key, identity->allInfoKeys()) { + mSession->clientIdentity()->setInfoForKey(key, identity->infoForKey(key)); + } +} + +IMAPIdentity * IMAPAsyncConnection::clientIdentity() +{ + return mClientIdentity; +} + +IMAPOperation * IMAPAsyncConnection::disconnectOperation() +{ + IMAPDisconnectOperation * op = new IMAPDisconnectOperation(); + op->setSession(this); + op->autorelease(); + return op; +} + +IMAPSession * IMAPAsyncConnection::session() +{ + return mSession; +} + +unsigned int IMAPAsyncConnection::operationsCount() +{ + return mQueue->count(); +} + +void IMAPAsyncConnection::cancelAllOperations() +{ + mQueue->cancelAllOperations(); +} + +void IMAPAsyncConnection::runOperation(IMAPOperation * operation) +{ + if (mScheduledAutomaticDisconnect) { +#if __APPLE__ + cancelDelayedPerformMethodOnDispatchQueue((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, dispatchQueue()); +#else + cancelDelayedPerformMethod((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL); +#endif + mOwner->release(); + mScheduledAutomaticDisconnect = false; + } + mQueue->addOperation(operation); +} + +void IMAPAsyncConnection::tryAutomaticDisconnect() +{ + // It's safe since no thread is running when this function is called. + if (mSession->isDisconnected()) { + return; + } + + bool scheduledAutomaticDisconnect = mScheduledAutomaticDisconnect; + if (scheduledAutomaticDisconnect) { +#if __APPLE__ + cancelDelayedPerformMethodOnDispatchQueue((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, dispatchQueue()); +#else + cancelDelayedPerformMethod((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL); +#endif + } + + mOwner->retain(); + mScheduledAutomaticDisconnect = true; +#if __APPLE__ + performMethodOnDispatchQueueAfterDelay((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, dispatchQueue(), 30); +#else + performMethodAfterDelay((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, 30); +#endif + + if (scheduledAutomaticDisconnect) { + mOwner->release(); + } +} + +void IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay(void * context) +{ + mScheduledAutomaticDisconnect = false; + + IMAPOperation * op = disconnectOperation(); + op->start(); + + mOwner->release(); +} + +void IMAPAsyncConnection::queueStartRunning() +{ + this->retain(); + mOwner->retain(); +} + +void IMAPAsyncConnection::queueStoppedRunning() +{ + mOwner->release(); + this->release(); +} + +void IMAPAsyncConnection::setLastFolder(String * folder) +{ + MC_SAFE_REPLACE_COPY(String, mLastFolder, folder); +} + +String * IMAPAsyncConnection::lastFolder() +{ + return mLastFolder; +} + +void IMAPAsyncConnection::setOwner(IMAPAsyncSession * owner) +{ + mOwner = owner; +} + +IMAPAsyncSession * IMAPAsyncConnection::owner() +{ + return mOwner; +} + +void IMAPAsyncConnection::setConnectionLogger(ConnectionLogger * logger) +{ + pthread_mutex_lock(&mConnectionLoggerLock); + mConnectionLogger = logger; + if (mConnectionLogger != NULL) { + mSession->setConnectionLogger(mInternalLogger); + } + else { + mSession->setConnectionLogger(NULL); + } + pthread_mutex_unlock(&mConnectionLoggerLock); +} + +ConnectionLogger * IMAPAsyncConnection::connectionLogger() +{ + ConnectionLogger * result; + + pthread_mutex_lock(&mConnectionLoggerLock); + result = mConnectionLogger; + pthread_mutex_unlock(&mConnectionLoggerLock); + + return result; +} + +void IMAPAsyncConnection::logConnection(ConnectionLogType logType, Data * buffer) +{ + pthread_mutex_lock(&mConnectionLoggerLock); + if (mConnectionLogger != NULL) { + mConnectionLogger->log(this, logType, buffer); + } + pthread_mutex_unlock(&mConnectionLoggerLock); +} + +void IMAPAsyncConnection::setAutomaticConfigurationEnabled(bool enabled) +{ + mAutomaticConfigurationEnabled = enabled; + mSession->setAutomaticConfigurationEnabled(enabled); +} + +bool IMAPAsyncConnection::isAutomaticConfigurationEnabled() +{ + return mAutomaticConfigurationEnabled; +} + +bool IMAPAsyncConnection::isQueueRunning() +{ + return mQueueRunning; +} + +void IMAPAsyncConnection::setQueueRunning(bool running) +{ + mQueueRunning = running; +} + +#if __APPLE__ +void IMAPAsyncConnection::setDispatchQueue(dispatch_queue_t dispatchQueue) +{ + mQueue->setDispatchQueue(dispatchQueue); +} + +dispatch_queue_t IMAPAsyncConnection::dispatchQueue() +{ + return mQueue->dispatchQueue(); +} +#endif diff --git a/src/async/imap/MCIMAPAsyncSession.cc b/src/async/imap/MCIMAPAsyncSession.cc deleted file mode 100755 index f3a55a5e..00000000 --- a/src/async/imap/MCIMAPAsyncSession.cc +++ /dev/null @@ -1,848 +0,0 @@ -// -// MCIMAPAsyncSession.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/17/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPAsyncSession.h" - -#include "MCIMAPAsyncConnection.h" -#include "MCIMAPNamespace.h" -#include "MCOperationQueueCallback.h" -#include "MCConnectionLogger.h" -#include "MCIMAPSession.h" -#include "MCIMAPIdentity.h" -#include "MCIMAPMultiDisconnectOperation.h" - -#include "MCIMAPFolderInfoOperation.h" -#include "MCIMAPFolderStatusOperation.h" -#include "MCIMAPFetchFoldersOperation.h" -#include "MCIMAPRenameFolderOperation.h" -#include "MCIMAPDeleteFolderOperation.h" -#include "MCIMAPCreateFolderOperation.h" -#include "MCIMAPSubscribeFolderOperation.h" -#include "MCIMAPExpungeOperation.h" -#include "MCIMAPAppendMessageOperation.h" -#include "MCIMAPCopyMessagesOperation.h" -#include "MCIMAPFetchMessagesOperation.h" -#include "MCIMAPFetchContentOperation.h" -#include "MCIMAPFetchParsedContentOperation.h" -#include "MCIMAPStoreFlagsOperation.h" -#include "MCIMAPStoreLabelsOperation.h" -#include "MCIMAPSearchOperation.h" -#include "MCIMAPConnectOperation.h" -#include "MCIMAPCheckAccountOperation.h" -#include "MCIMAPFetchNamespaceOperation.h" -#include "MCIMAPIdleOperation.h" -#include "MCIMAPIdentityOperation.h" -#include "MCIMAPCapabilityOperation.h" -#include "MCIMAPQuotaOperation.h" -#include "MCIMAPDisconnectOperation.h" -#include "MCIMAPNoopOperation.h" -#include "MCIMAPMessageRenderingOperation.h" - -#define DEFAULT_MAX_CONNECTIONS 3 - -using namespace mailcore; - -IMAPAsyncSession::IMAPAsyncSession() -{ - mSessions = new Array(); - mMaximumConnections = DEFAULT_MAX_CONNECTIONS; - mAllowsFolderConcurrentAccessEnabled = true; - - mHostname = NULL; - mPort = 0; - mUsername = NULL; - mPassword = NULL; - mOAuth2Token = NULL; - mAuthType = AuthTypeSASLNone; - mConnectionType = ConnectionTypeClear; - mCheckCertificateEnabled = true; - mVoIPEnabled = true; - mDefaultNamespace = NULL; - mTimeout = 30.; - mConnectionLogger = NULL; - mAutomaticConfigurationDone = false; - mServerIdentity = new IMAPIdentity(); - mClientIdentity = new IMAPIdentity(); - mOperationQueueCallback = NULL; -#if __APPLE__ - mDispatchQueue = dispatch_get_main_queue(); -#endif - mGmailUserDisplayName = NULL; -} - -IMAPAsyncSession::~IMAPAsyncSession() -{ -#if __APPLE__ - if (mDispatchQueue != NULL) { - dispatch_release(mDispatchQueue); - } -#endif - MC_SAFE_RELEASE(mGmailUserDisplayName); - MC_SAFE_RELEASE(mServerIdentity); - MC_SAFE_RELEASE(mClientIdentity); - MC_SAFE_RELEASE(mSessions); - MC_SAFE_RELEASE(mHostname); - MC_SAFE_RELEASE(mUsername); - MC_SAFE_RELEASE(mPassword); - MC_SAFE_RELEASE(mOAuth2Token); - MC_SAFE_RELEASE(mDefaultNamespace); -} - -void IMAPAsyncSession::setHostname(String * hostname) -{ - MC_SAFE_REPLACE_COPY(String, mHostname, hostname); -} - -String * IMAPAsyncSession::hostname() -{ - return mHostname; -} - -void IMAPAsyncSession::setPort(unsigned int port) -{ - mPort = port; -} - -unsigned int IMAPAsyncSession::port() -{ - return mPort; -} - -void IMAPAsyncSession::setUsername(String * username) -{ - MC_SAFE_REPLACE_COPY(String, mUsername, username); -} - -String * IMAPAsyncSession::username() -{ - return mUsername; -} - -void IMAPAsyncSession::setPassword(String * password) -{ - MC_SAFE_REPLACE_COPY(String, mPassword, password); -} - -String * IMAPAsyncSession::password() -{ - return mPassword; -} - -void IMAPAsyncSession::setOAuth2Token(String * token) -{ - MC_SAFE_REPLACE_COPY(String, mOAuth2Token, token); -} - -String * IMAPAsyncSession::OAuth2Token() -{ - return mOAuth2Token; -} - -void IMAPAsyncSession::setAuthType(AuthType authType) -{ - mAuthType = authType; -} - -AuthType IMAPAsyncSession::authType() -{ - return mAuthType; -} - -void IMAPAsyncSession::setConnectionType(ConnectionType connectionType) -{ - mConnectionType = connectionType; -} - -ConnectionType IMAPAsyncSession::connectionType() -{ - return mConnectionType; -} - -void IMAPAsyncSession::setTimeout(time_t timeout) -{ - mTimeout = timeout; -} - -time_t IMAPAsyncSession::timeout() -{ - return mTimeout; -} - -void IMAPAsyncSession::setCheckCertificateEnabled(bool enabled) -{ - mCheckCertificateEnabled = enabled; -} - -bool IMAPAsyncSession::isCheckCertificateEnabled() -{ - return mCheckCertificateEnabled; -} - -void IMAPAsyncSession::setVoIPEnabled(bool enabled) -{ - mVoIPEnabled = enabled; -} - -bool IMAPAsyncSession::isVoIPEnabled() -{ - return mVoIPEnabled; -} - -IMAPNamespace * IMAPAsyncSession::defaultNamespace() -{ - return mDefaultNamespace; -} - -void IMAPAsyncSession::setDefaultNamespace(IMAPNamespace * ns) -{ - MC_SAFE_REPLACE_RETAIN(IMAPNamespace, mDefaultNamespace, ns); -} - -void IMAPAsyncSession::setAllowsFolderConcurrentAccessEnabled(bool enabled) -{ - mAllowsFolderConcurrentAccessEnabled = enabled; -} - -bool IMAPAsyncSession::allowsFolderConcurrentAccessEnabled() -{ - return mAllowsFolderConcurrentAccessEnabled; -} - -void IMAPAsyncSession::setMaximumConnections(unsigned int maxConnections) -{ - mMaximumConnections = maxConnections; -} - -unsigned int IMAPAsyncSession::maximumConnections() -{ - return mMaximumConnections; -} - -IMAPIdentity * IMAPAsyncSession::serverIdentity() -{ - return mServerIdentity; -} - -IMAPIdentity * IMAPAsyncSession::clientIdentity() -{ - return mClientIdentity; -} - -String * IMAPAsyncSession::gmailUserDisplayName() -{ - return mGmailUserDisplayName; -} - -IMAPAsyncConnection * IMAPAsyncSession::session() -{ - IMAPAsyncConnection * session = new IMAPAsyncConnection(); - session->setConnectionLogger(mConnectionLogger); - session->setOwner(this); - session->autorelease(); - - session->setHostname(mHostname); - session->setPort(mPort); - session->setUsername(mUsername); - session->setPassword(mPassword); - session->setOAuth2Token(mOAuth2Token); - session->setAuthType(mAuthType); - session->setConnectionType(mConnectionType); - session->setTimeout(mTimeout); - session->setCheckCertificateEnabled(mCheckCertificateEnabled); - session->setVoIPEnabled(mVoIPEnabled); - session->setDefaultNamespace(mDefaultNamespace); - session->setClientIdentity(mClientIdentity); -#if __APPLE__ - session->setDispatchQueue(mDispatchQueue); -#endif -#if 0 // should be implemented properly - if (mAutomaticConfigurationDone) { - session->setAutomaticConfigurationEnabled(false); - } -#endif - - return session; -} - -IMAPAsyncConnection * IMAPAsyncSession::sessionForFolder(String * folder, bool urgent) -{ - if (folder == NULL) { - return availableSession(); - } - else { - IMAPAsyncConnection * s = NULL; - if (urgent && mAllowsFolderConcurrentAccessEnabled) { - s = availableSession(); - if (s->operationsCount() == 0) { - s->setLastFolder(folder); - return s; - } - } - - s = matchingSessionForFolder(folder); - s->setLastFolder(folder); - return s; - } -} - -IMAPAsyncConnection * IMAPAsyncSession::availableSession() -{ - if (mMaximumConnections == 0) { - for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { - IMAPAsyncConnection * s = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); - if (s->operationsCount() == 0) - return s; - } - IMAPAsyncConnection * chosenSession = session(); - mSessions->addObject(chosenSession); - return chosenSession; - } - else { - IMAPAsyncConnection * chosenSession = NULL; - unsigned int minOperationsCount = 0; - for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { - IMAPAsyncConnection * s = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); - if (chosenSession == NULL) { - chosenSession = s; - minOperationsCount = s->operationsCount(); - } - else if (s->operationsCount() < minOperationsCount) { - chosenSession = s; - minOperationsCount = s->operationsCount(); - } - } - if (mSessions->count() < mMaximumConnections) { - if ((chosenSession != NULL) && (minOperationsCount == 0)) { - return chosenSession; - } - chosenSession = session(); - mSessions->addObject(chosenSession); - return chosenSession; - } - else { - return chosenSession; - } - } -} - -IMAPAsyncConnection * IMAPAsyncSession::matchingSessionForFolder(String * folder) -{ - for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { - IMAPAsyncConnection * currentSession = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); - if (currentSession->lastFolder() != NULL) { - if (currentSession->lastFolder()->isEqual(folder)) { - return currentSession; - } - } - else { - return currentSession; - } - } - return availableSession(); -} - -IMAPFolderInfoOperation * IMAPAsyncSession::folderInfoOperation(String * folder) -{ - IMAPFolderInfoOperation * op = new IMAPFolderInfoOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->autorelease(); - return op; -} - -IMAPFolderStatusOperation * IMAPAsyncSession::folderStatusOperation(String * folder) -{ - IMAPFolderStatusOperation * op = new IMAPFolderStatusOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->autorelease(); - return op; -} - -IMAPFetchFoldersOperation * IMAPAsyncSession::fetchSubscribedFoldersOperation() -{ - IMAPFetchFoldersOperation * op = new IMAPFetchFoldersOperation(); - op->setMainSession(this); - op->setFetchSubscribedEnabled(true); - op->autorelease(); - return op; -} - -IMAPFetchFoldersOperation * IMAPAsyncSession::fetchAllFoldersOperation() -{ - IMAPFetchFoldersOperation * op = new IMAPFetchFoldersOperation(); - op->setMainSession(this); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::renameFolderOperation(String * folder, String * otherName) -{ - IMAPRenameFolderOperation * op = new IMAPRenameFolderOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setOtherName(otherName); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::deleteFolderOperation(String * folder) -{ - IMAPDeleteFolderOperation * op = new IMAPDeleteFolderOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::createFolderOperation(String * folder) -{ - IMAPCreateFolderOperation * op = new IMAPCreateFolderOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::subscribeFolderOperation(String * folder) -{ - IMAPSubscribeFolderOperation * op = new IMAPSubscribeFolderOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::unsubscribeFolderOperation(String * folder) -{ - IMAPSubscribeFolderOperation * op = new IMAPSubscribeFolderOperation(); - op->setMainSession(this); - op->setUnsubscribeEnabled(true); - op->setFolder(folder); - op->autorelease(); - return op; -} - -IMAPAppendMessageOperation * IMAPAsyncSession::appendMessageOperation(String * folder, Data * messageData, MessageFlag flags, Array * customFlags) -{ - IMAPAppendMessageOperation * op = new IMAPAppendMessageOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setMessageData(messageData); - op->setFlags(flags); - op->setCustomFlags(customFlags); - op->autorelease(); - return op; -} - -IMAPCopyMessagesOperation * IMAPAsyncSession::copyMessagesOperation(String * folder, IndexSet * uids, String * destFolder) -{ - IMAPCopyMessagesOperation * op = new IMAPCopyMessagesOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setUids(uids); - op->setDestFolder(destFolder); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::expungeOperation(String * folder) -{ - IMAPExpungeOperation * op = new IMAPExpungeOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->autorelease(); - return op; -} - -IMAPFetchMessagesOperation * IMAPAsyncSession::fetchMessagesByUIDOperation(String * folder, IMAPMessagesRequestKind requestKind, - IndexSet * uids) -{ - IMAPFetchMessagesOperation * op = new IMAPFetchMessagesOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setKind(requestKind); - op->setFetchByUidEnabled(true); - op->setIndexes(uids); - op->autorelease(); - return op; -} - -IMAPFetchMessagesOperation * IMAPAsyncSession::fetchMessagesByNumberOperation(String * folder, IMAPMessagesRequestKind requestKind, - IndexSet * numbers) -{ - IMAPFetchMessagesOperation * op = new IMAPFetchMessagesOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setKind(requestKind); - op->setIndexes(numbers); - op->autorelease(); - return op; -} - -IMAPFetchMessagesOperation * IMAPAsyncSession::syncMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind, - IndexSet * uids, uint64_t modSeq) -{ - IMAPFetchMessagesOperation * op = new IMAPFetchMessagesOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setKind(requestKind); - op->setFetchByUidEnabled(true); - op->setIndexes(uids); - op->setModSequenceValue(modSeq); - op->autorelease(); - return op; -} - -IMAPFetchContentOperation * IMAPAsyncSession::fetchMessageByUIDOperation(String * folder, uint32_t uid, bool urgent) -{ - IMAPFetchContentOperation * op = new IMAPFetchContentOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setUid(uid); - op->setUrgent(urgent); - op->autorelease(); - return op; -} - -IMAPFetchContentOperation * IMAPAsyncSession::fetchMessageAttachmentByUIDOperation(String * folder, uint32_t uid, String * partID, - Encoding encoding, bool urgent) -{ - IMAPFetchContentOperation * op = new IMAPFetchContentOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setUid(uid); - op->setPartID(partID); - op->setEncoding(encoding); - op->setUrgent(urgent); - op->autorelease(); - return op; -} - -IMAPFetchContentOperation * IMAPAsyncSession::fetchMessageByNumberOperation(String * folder, uint32_t number, bool urgent) -{ - IMAPFetchContentOperation * op = new IMAPFetchContentOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setNumber(number); - op->setUrgent(urgent); - op->autorelease(); - return op; -} - -IMAPFetchContentOperation * IMAPAsyncSession::fetchMessageAttachmentByNumberOperation(String * folder, uint32_t number, String * partID, - Encoding encoding, bool urgent) -{ - IMAPFetchContentOperation * op = new IMAPFetchContentOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setNumber(number); - op->setPartID(partID); - op->setEncoding(encoding); - op->setUrgent(urgent); - op->autorelease(); - return op; -} - -IMAPFetchParsedContentOperation * IMAPAsyncSession::fetchParsedMessageByUIDOperation(String * folder, uint32_t uid, bool urgent) -{ - IMAPFetchParsedContentOperation * op = new IMAPFetchParsedContentOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setUid(uid); - op->setUrgent(urgent); - op->autorelease(); - return op; -} - -IMAPFetchParsedContentOperation * IMAPAsyncSession::fetchParsedMessageByNumberOperation(String * folder, uint32_t number, bool urgent) -{ - IMAPFetchParsedContentOperation * op = new IMAPFetchParsedContentOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setNumber(number); - op->setUrgent(urgent); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::storeFlagsByUIDOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags) -{ - IMAPStoreFlagsOperation * op = new IMAPStoreFlagsOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setUids(uids); - op->setKind(kind); - op->setFlags(flags); - op->setCustomFlags(customFlags); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::storeFlagsByNumberOperation(String * folder, IndexSet * numbers, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags) -{ - IMAPStoreFlagsOperation * op = new IMAPStoreFlagsOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setNumbers(numbers); - op->setKind(kind); - op->setFlags(flags); - op->setCustomFlags(customFlags); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::storeLabelsByUIDOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels) -{ - IMAPStoreLabelsOperation * op = new IMAPStoreLabelsOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setUids(uids); - op->setKind(kind); - op->setLabels(labels); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::storeLabelsByNumberOperation(String * folder, IndexSet * numbers, IMAPStoreFlagsRequestKind kind, Array * labels) -{ - IMAPStoreLabelsOperation * op = new IMAPStoreLabelsOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setNumbers(numbers); - op->setKind(kind); - op->setLabels(labels); - op->autorelease(); - return op; -} - -IMAPSearchOperation * IMAPAsyncSession::searchOperation(String * folder, IMAPSearchKind kind, String * searchString) -{ - IMAPSearchOperation * op = new IMAPSearchOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setSearchKind(kind); - op->setSearchString(searchString); - op->autorelease(); - return op; -} - -IMAPSearchOperation * IMAPAsyncSession::searchOperation(String * folder, IMAPSearchExpression * expression) -{ - IMAPSearchOperation * op = new IMAPSearchOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setSearchExpression(expression); - op->autorelease(); - return op; -} - -IMAPIdleOperation * IMAPAsyncSession::idleOperation(String * folder, uint32_t lastKnownUID) -{ - IMAPIdleOperation * op = new IMAPIdleOperation(); - op->setMainSession(this); - op->setFolder(folder); - op->setLastKnownUID(lastKnownUID); - op->autorelease(); - return op; -} - -IMAPFetchNamespaceOperation * IMAPAsyncSession::fetchNamespaceOperation() -{ - IMAPFetchNamespaceOperation * op = new IMAPFetchNamespaceOperation(); - op->setMainSession(this); - op->autorelease(); - return op; -} - -IMAPIdentityOperation * IMAPAsyncSession::identityOperation(IMAPIdentity * identity) -{ - IMAPIdentityOperation * op = new IMAPIdentityOperation(); - op->setMainSession(this); - op->setClientIdentity(identity); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::connectOperation() -{ - IMAPConnectOperation * op = new IMAPConnectOperation(); - op->setMainSession(this); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::checkAccountOperation() -{ - IMAPCheckAccountOperation * op = new IMAPCheckAccountOperation(); - op->setMainSession(this); - op->autorelease(); - return op; -} - -IMAPCapabilityOperation * IMAPAsyncSession::capabilityOperation() -{ - IMAPCapabilityOperation * op = new IMAPCapabilityOperation(); - op->setMainSession(this); - op->autorelease(); - return op; -} - -IMAPQuotaOperation * IMAPAsyncSession::quotaOperation() -{ - IMAPQuotaOperation * op = new IMAPQuotaOperation(); - op->setMainSession(this); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::noopOperation() -{ - IMAPNoopOperation * op = new IMAPNoopOperation(); - op->setMainSession(this); - op->autorelease(); - return op; -} - -IMAPOperation * IMAPAsyncSession::disconnectOperation() -{ - IMAPMultiDisconnectOperation * op = new IMAPMultiDisconnectOperation(); - op->autorelease(); - for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { - IMAPAsyncConnection * currentSession = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); - op->addOperation(currentSession->disconnectOperation()); - } - return op; -} - -void IMAPAsyncSession::setConnectionLogger(ConnectionLogger * logger) -{ - mConnectionLogger = logger; - for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { - IMAPAsyncConnection * currentSession = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); - currentSession->setConnectionLogger(logger); - } -} - -ConnectionLogger * IMAPAsyncSession::connectionLogger() -{ - return mConnectionLogger; -} - -IMAPMessageRenderingOperation * IMAPAsyncSession::renderingOperation(IMAPMessage * message, - String * folder, - IMAPMessageRenderingType type) -{ - IMAPMessageRenderingOperation * op = new IMAPMessageRenderingOperation(); - op->setMainSession(this); - op->setMessage(message); - op->setFolder(folder); - op->setRenderingType(type); - op->autorelease(); - return op; -} - -IMAPMessageRenderingOperation * IMAPAsyncSession::htmlRenderingOperation(IMAPMessage * message, - String * folder) -{ - return renderingOperation(message, folder, IMAPMessageRenderingTypeHTML); -} - -IMAPMessageRenderingOperation * IMAPAsyncSession::htmlBodyRenderingOperation(IMAPMessage * message, - String * folder) -{ - return renderingOperation(message, folder, IMAPMessageRenderingTypeHTMLBody); -} - -IMAPMessageRenderingOperation * IMAPAsyncSession::plainTextRenderingOperation(IMAPMessage * message, - String * folder) -{ - return renderingOperation(message, folder, IMAPMessageRenderingTypePlainText); -} - -IMAPMessageRenderingOperation * IMAPAsyncSession::plainTextBodyRenderingOperation(IMAPMessage * message, - String * folder, - bool stripWhitespace) -{ - return renderingOperation(message, folder, - stripWhitespace ? IMAPMessageRenderingTypePlainTextBodyAndStripWhitespace : - IMAPMessageRenderingTypePlainTextBody); -} - -void IMAPAsyncSession::automaticConfigurationDone(IMAPSession * session) -{ - MC_SAFE_REPLACE_COPY(IMAPIdentity, mServerIdentity, session->serverIdentity()); - MC_SAFE_REPLACE_COPY(String, mGmailUserDisplayName, session->gmailUserDisplayName()); - setDefaultNamespace(session->defaultNamespace()); - mAutomaticConfigurationDone = true; -} - -void IMAPAsyncSession::setOperationQueueCallback(OperationQueueCallback * callback) -{ - mOperationQueueCallback = callback; -} - -OperationQueueCallback * IMAPAsyncSession::operationQueueCallback() -{ - return mOperationQueueCallback; -} - -bool IMAPAsyncSession::isOperationQueueRunning() -{ - return mQueueRunning; -} - -void IMAPAsyncSession::cancelAllOperations() -{ - for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { - IMAPAsyncConnection * currentSession = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); - currentSession->cancelAllOperations(); - } -} - -void IMAPAsyncSession::operationRunningStateChanged() -{ - bool isRunning = false; - for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { - IMAPAsyncConnection * currentSession = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); - if (currentSession->isQueueRunning()){ - isRunning = true; - break; - } - } - if (mQueueRunning == isRunning) { - return; - } - mQueueRunning = isRunning; - if (mOperationQueueCallback != NULL) { - if (isRunning) { - mOperationQueueCallback->queueStartRunning(); - } - else { - mOperationQueueCallback->queueStoppedRunning(); - } - } -} - -#if __APPLE__ -void IMAPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue) -{ - if (mDispatchQueue != NULL) { - dispatch_release(mDispatchQueue); - } - mDispatchQueue = dispatchQueue; - if (mDispatchQueue != NULL) { - dispatch_retain(mDispatchQueue); - } -} - -dispatch_queue_t IMAPAsyncSession::dispatchQueue() -{ - return mDispatchQueue; -} -#endif diff --git a/src/async/imap/MCIMAPAsyncSession.cpp b/src/async/imap/MCIMAPAsyncSession.cpp new file mode 100755 index 00000000..f3a55a5e --- /dev/null +++ b/src/async/imap/MCIMAPAsyncSession.cpp @@ -0,0 +1,848 @@ +// +// MCIMAPAsyncSession.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/17/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPAsyncSession.h" + +#include "MCIMAPAsyncConnection.h" +#include "MCIMAPNamespace.h" +#include "MCOperationQueueCallback.h" +#include "MCConnectionLogger.h" +#include "MCIMAPSession.h" +#include "MCIMAPIdentity.h" +#include "MCIMAPMultiDisconnectOperation.h" + +#include "MCIMAPFolderInfoOperation.h" +#include "MCIMAPFolderStatusOperation.h" +#include "MCIMAPFetchFoldersOperation.h" +#include "MCIMAPRenameFolderOperation.h" +#include "MCIMAPDeleteFolderOperation.h" +#include "MCIMAPCreateFolderOperation.h" +#include "MCIMAPSubscribeFolderOperation.h" +#include "MCIMAPExpungeOperation.h" +#include "MCIMAPAppendMessageOperation.h" +#include "MCIMAPCopyMessagesOperation.h" +#include "MCIMAPFetchMessagesOperation.h" +#include "MCIMAPFetchContentOperation.h" +#include "MCIMAPFetchParsedContentOperation.h" +#include "MCIMAPStoreFlagsOperation.h" +#include "MCIMAPStoreLabelsOperation.h" +#include "MCIMAPSearchOperation.h" +#include "MCIMAPConnectOperation.h" +#include "MCIMAPCheckAccountOperation.h" +#include "MCIMAPFetchNamespaceOperation.h" +#include "MCIMAPIdleOperation.h" +#include "MCIMAPIdentityOperation.h" +#include "MCIMAPCapabilityOperation.h" +#include "MCIMAPQuotaOperation.h" +#include "MCIMAPDisconnectOperation.h" +#include "MCIMAPNoopOperation.h" +#include "MCIMAPMessageRenderingOperation.h" + +#define DEFAULT_MAX_CONNECTIONS 3 + +using namespace mailcore; + +IMAPAsyncSession::IMAPAsyncSession() +{ + mSessions = new Array(); + mMaximumConnections = DEFAULT_MAX_CONNECTIONS; + mAllowsFolderConcurrentAccessEnabled = true; + + mHostname = NULL; + mPort = 0; + mUsername = NULL; + mPassword = NULL; + mOAuth2Token = NULL; + mAuthType = AuthTypeSASLNone; + mConnectionType = ConnectionTypeClear; + mCheckCertificateEnabled = true; + mVoIPEnabled = true; + mDefaultNamespace = NULL; + mTimeout = 30.; + mConnectionLogger = NULL; + mAutomaticConfigurationDone = false; + mServerIdentity = new IMAPIdentity(); + mClientIdentity = new IMAPIdentity(); + mOperationQueueCallback = NULL; +#if __APPLE__ + mDispatchQueue = dispatch_get_main_queue(); +#endif + mGmailUserDisplayName = NULL; +} + +IMAPAsyncSession::~IMAPAsyncSession() +{ +#if __APPLE__ + if (mDispatchQueue != NULL) { + dispatch_release(mDispatchQueue); + } +#endif + MC_SAFE_RELEASE(mGmailUserDisplayName); + MC_SAFE_RELEASE(mServerIdentity); + MC_SAFE_RELEASE(mClientIdentity); + MC_SAFE_RELEASE(mSessions); + MC_SAFE_RELEASE(mHostname); + MC_SAFE_RELEASE(mUsername); + MC_SAFE_RELEASE(mPassword); + MC_SAFE_RELEASE(mOAuth2Token); + MC_SAFE_RELEASE(mDefaultNamespace); +} + +void IMAPAsyncSession::setHostname(String * hostname) +{ + MC_SAFE_REPLACE_COPY(String, mHostname, hostname); +} + +String * IMAPAsyncSession::hostname() +{ + return mHostname; +} + +void IMAPAsyncSession::setPort(unsigned int port) +{ + mPort = port; +} + +unsigned int IMAPAsyncSession::port() +{ + return mPort; +} + +void IMAPAsyncSession::setUsername(String * username) +{ + MC_SAFE_REPLACE_COPY(String, mUsername, username); +} + +String * IMAPAsyncSession::username() +{ + return mUsername; +} + +void IMAPAsyncSession::setPassword(String * password) +{ + MC_SAFE_REPLACE_COPY(String, mPassword, password); +} + +String * IMAPAsyncSession::password() +{ + return mPassword; +} + +void IMAPAsyncSession::setOAuth2Token(String * token) +{ + MC_SAFE_REPLACE_COPY(String, mOAuth2Token, token); +} + +String * IMAPAsyncSession::OAuth2Token() +{ + return mOAuth2Token; +} + +void IMAPAsyncSession::setAuthType(AuthType authType) +{ + mAuthType = authType; +} + +AuthType IMAPAsyncSession::authType() +{ + return mAuthType; +} + +void IMAPAsyncSession::setConnectionType(ConnectionType connectionType) +{ + mConnectionType = connectionType; +} + +ConnectionType IMAPAsyncSession::connectionType() +{ + return mConnectionType; +} + +void IMAPAsyncSession::setTimeout(time_t timeout) +{ + mTimeout = timeout; +} + +time_t IMAPAsyncSession::timeout() +{ + return mTimeout; +} + +void IMAPAsyncSession::setCheckCertificateEnabled(bool enabled) +{ + mCheckCertificateEnabled = enabled; +} + +bool IMAPAsyncSession::isCheckCertificateEnabled() +{ + return mCheckCertificateEnabled; +} + +void IMAPAsyncSession::setVoIPEnabled(bool enabled) +{ + mVoIPEnabled = enabled; +} + +bool IMAPAsyncSession::isVoIPEnabled() +{ + return mVoIPEnabled; +} + +IMAPNamespace * IMAPAsyncSession::defaultNamespace() +{ + return mDefaultNamespace; +} + +void IMAPAsyncSession::setDefaultNamespace(IMAPNamespace * ns) +{ + MC_SAFE_REPLACE_RETAIN(IMAPNamespace, mDefaultNamespace, ns); +} + +void IMAPAsyncSession::setAllowsFolderConcurrentAccessEnabled(bool enabled) +{ + mAllowsFolderConcurrentAccessEnabled = enabled; +} + +bool IMAPAsyncSession::allowsFolderConcurrentAccessEnabled() +{ + return mAllowsFolderConcurrentAccessEnabled; +} + +void IMAPAsyncSession::setMaximumConnections(unsigned int maxConnections) +{ + mMaximumConnections = maxConnections; +} + +unsigned int IMAPAsyncSession::maximumConnections() +{ + return mMaximumConnections; +} + +IMAPIdentity * IMAPAsyncSession::serverIdentity() +{ + return mServerIdentity; +} + +IMAPIdentity * IMAPAsyncSession::clientIdentity() +{ + return mClientIdentity; +} + +String * IMAPAsyncSession::gmailUserDisplayName() +{ + return mGmailUserDisplayName; +} + +IMAPAsyncConnection * IMAPAsyncSession::session() +{ + IMAPAsyncConnection * session = new IMAPAsyncConnection(); + session->setConnectionLogger(mConnectionLogger); + session->setOwner(this); + session->autorelease(); + + session->setHostname(mHostname); + session->setPort(mPort); + session->setUsername(mUsername); + session->setPassword(mPassword); + session->setOAuth2Token(mOAuth2Token); + session->setAuthType(mAuthType); + session->setConnectionType(mConnectionType); + session->setTimeout(mTimeout); + session->setCheckCertificateEnabled(mCheckCertificateEnabled); + session->setVoIPEnabled(mVoIPEnabled); + session->setDefaultNamespace(mDefaultNamespace); + session->setClientIdentity(mClientIdentity); +#if __APPLE__ + session->setDispatchQueue(mDispatchQueue); +#endif +#if 0 // should be implemented properly + if (mAutomaticConfigurationDone) { + session->setAutomaticConfigurationEnabled(false); + } +#endif + + return session; +} + +IMAPAsyncConnection * IMAPAsyncSession::sessionForFolder(String * folder, bool urgent) +{ + if (folder == NULL) { + return availableSession(); + } + else { + IMAPAsyncConnection * s = NULL; + if (urgent && mAllowsFolderConcurrentAccessEnabled) { + s = availableSession(); + if (s->operationsCount() == 0) { + s->setLastFolder(folder); + return s; + } + } + + s = matchingSessionForFolder(folder); + s->setLastFolder(folder); + return s; + } +} + +IMAPAsyncConnection * IMAPAsyncSession::availableSession() +{ + if (mMaximumConnections == 0) { + for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { + IMAPAsyncConnection * s = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); + if (s->operationsCount() == 0) + return s; + } + IMAPAsyncConnection * chosenSession = session(); + mSessions->addObject(chosenSession); + return chosenSession; + } + else { + IMAPAsyncConnection * chosenSession = NULL; + unsigned int minOperationsCount = 0; + for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { + IMAPAsyncConnection * s = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); + if (chosenSession == NULL) { + chosenSession = s; + minOperationsCount = s->operationsCount(); + } + else if (s->operationsCount() < minOperationsCount) { + chosenSession = s; + minOperationsCount = s->operationsCount(); + } + } + if (mSessions->count() < mMaximumConnections) { + if ((chosenSession != NULL) && (minOperationsCount == 0)) { + return chosenSession; + } + chosenSession = session(); + mSessions->addObject(chosenSession); + return chosenSession; + } + else { + return chosenSession; + } + } +} + +IMAPAsyncConnection * IMAPAsyncSession::matchingSessionForFolder(String * folder) +{ + for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { + IMAPAsyncConnection * currentSession = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); + if (currentSession->lastFolder() != NULL) { + if (currentSession->lastFolder()->isEqual(folder)) { + return currentSession; + } + } + else { + return currentSession; + } + } + return availableSession(); +} + +IMAPFolderInfoOperation * IMAPAsyncSession::folderInfoOperation(String * folder) +{ + IMAPFolderInfoOperation * op = new IMAPFolderInfoOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->autorelease(); + return op; +} + +IMAPFolderStatusOperation * IMAPAsyncSession::folderStatusOperation(String * folder) +{ + IMAPFolderStatusOperation * op = new IMAPFolderStatusOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->autorelease(); + return op; +} + +IMAPFetchFoldersOperation * IMAPAsyncSession::fetchSubscribedFoldersOperation() +{ + IMAPFetchFoldersOperation * op = new IMAPFetchFoldersOperation(); + op->setMainSession(this); + op->setFetchSubscribedEnabled(true); + op->autorelease(); + return op; +} + +IMAPFetchFoldersOperation * IMAPAsyncSession::fetchAllFoldersOperation() +{ + IMAPFetchFoldersOperation * op = new IMAPFetchFoldersOperation(); + op->setMainSession(this); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::renameFolderOperation(String * folder, String * otherName) +{ + IMAPRenameFolderOperation * op = new IMAPRenameFolderOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setOtherName(otherName); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::deleteFolderOperation(String * folder) +{ + IMAPDeleteFolderOperation * op = new IMAPDeleteFolderOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::createFolderOperation(String * folder) +{ + IMAPCreateFolderOperation * op = new IMAPCreateFolderOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::subscribeFolderOperation(String * folder) +{ + IMAPSubscribeFolderOperation * op = new IMAPSubscribeFolderOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::unsubscribeFolderOperation(String * folder) +{ + IMAPSubscribeFolderOperation * op = new IMAPSubscribeFolderOperation(); + op->setMainSession(this); + op->setUnsubscribeEnabled(true); + op->setFolder(folder); + op->autorelease(); + return op; +} + +IMAPAppendMessageOperation * IMAPAsyncSession::appendMessageOperation(String * folder, Data * messageData, MessageFlag flags, Array * customFlags) +{ + IMAPAppendMessageOperation * op = new IMAPAppendMessageOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setMessageData(messageData); + op->setFlags(flags); + op->setCustomFlags(customFlags); + op->autorelease(); + return op; +} + +IMAPCopyMessagesOperation * IMAPAsyncSession::copyMessagesOperation(String * folder, IndexSet * uids, String * destFolder) +{ + IMAPCopyMessagesOperation * op = new IMAPCopyMessagesOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setUids(uids); + op->setDestFolder(destFolder); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::expungeOperation(String * folder) +{ + IMAPExpungeOperation * op = new IMAPExpungeOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->autorelease(); + return op; +} + +IMAPFetchMessagesOperation * IMAPAsyncSession::fetchMessagesByUIDOperation(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * uids) +{ + IMAPFetchMessagesOperation * op = new IMAPFetchMessagesOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setKind(requestKind); + op->setFetchByUidEnabled(true); + op->setIndexes(uids); + op->autorelease(); + return op; +} + +IMAPFetchMessagesOperation * IMAPAsyncSession::fetchMessagesByNumberOperation(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * numbers) +{ + IMAPFetchMessagesOperation * op = new IMAPFetchMessagesOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setKind(requestKind); + op->setIndexes(numbers); + op->autorelease(); + return op; +} + +IMAPFetchMessagesOperation * IMAPAsyncSession::syncMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * uids, uint64_t modSeq) +{ + IMAPFetchMessagesOperation * op = new IMAPFetchMessagesOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setKind(requestKind); + op->setFetchByUidEnabled(true); + op->setIndexes(uids); + op->setModSequenceValue(modSeq); + op->autorelease(); + return op; +} + +IMAPFetchContentOperation * IMAPAsyncSession::fetchMessageByUIDOperation(String * folder, uint32_t uid, bool urgent) +{ + IMAPFetchContentOperation * op = new IMAPFetchContentOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setUid(uid); + op->setUrgent(urgent); + op->autorelease(); + return op; +} + +IMAPFetchContentOperation * IMAPAsyncSession::fetchMessageAttachmentByUIDOperation(String * folder, uint32_t uid, String * partID, + Encoding encoding, bool urgent) +{ + IMAPFetchContentOperation * op = new IMAPFetchContentOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setUid(uid); + op->setPartID(partID); + op->setEncoding(encoding); + op->setUrgent(urgent); + op->autorelease(); + return op; +} + +IMAPFetchContentOperation * IMAPAsyncSession::fetchMessageByNumberOperation(String * folder, uint32_t number, bool urgent) +{ + IMAPFetchContentOperation * op = new IMAPFetchContentOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setNumber(number); + op->setUrgent(urgent); + op->autorelease(); + return op; +} + +IMAPFetchContentOperation * IMAPAsyncSession::fetchMessageAttachmentByNumberOperation(String * folder, uint32_t number, String * partID, + Encoding encoding, bool urgent) +{ + IMAPFetchContentOperation * op = new IMAPFetchContentOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setNumber(number); + op->setPartID(partID); + op->setEncoding(encoding); + op->setUrgent(urgent); + op->autorelease(); + return op; +} + +IMAPFetchParsedContentOperation * IMAPAsyncSession::fetchParsedMessageByUIDOperation(String * folder, uint32_t uid, bool urgent) +{ + IMAPFetchParsedContentOperation * op = new IMAPFetchParsedContentOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setUid(uid); + op->setUrgent(urgent); + op->autorelease(); + return op; +} + +IMAPFetchParsedContentOperation * IMAPAsyncSession::fetchParsedMessageByNumberOperation(String * folder, uint32_t number, bool urgent) +{ + IMAPFetchParsedContentOperation * op = new IMAPFetchParsedContentOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setNumber(number); + op->setUrgent(urgent); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::storeFlagsByUIDOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags) +{ + IMAPStoreFlagsOperation * op = new IMAPStoreFlagsOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setUids(uids); + op->setKind(kind); + op->setFlags(flags); + op->setCustomFlags(customFlags); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::storeFlagsByNumberOperation(String * folder, IndexSet * numbers, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags) +{ + IMAPStoreFlagsOperation * op = new IMAPStoreFlagsOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setNumbers(numbers); + op->setKind(kind); + op->setFlags(flags); + op->setCustomFlags(customFlags); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::storeLabelsByUIDOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels) +{ + IMAPStoreLabelsOperation * op = new IMAPStoreLabelsOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setUids(uids); + op->setKind(kind); + op->setLabels(labels); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::storeLabelsByNumberOperation(String * folder, IndexSet * numbers, IMAPStoreFlagsRequestKind kind, Array * labels) +{ + IMAPStoreLabelsOperation * op = new IMAPStoreLabelsOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setNumbers(numbers); + op->setKind(kind); + op->setLabels(labels); + op->autorelease(); + return op; +} + +IMAPSearchOperation * IMAPAsyncSession::searchOperation(String * folder, IMAPSearchKind kind, String * searchString) +{ + IMAPSearchOperation * op = new IMAPSearchOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setSearchKind(kind); + op->setSearchString(searchString); + op->autorelease(); + return op; +} + +IMAPSearchOperation * IMAPAsyncSession::searchOperation(String * folder, IMAPSearchExpression * expression) +{ + IMAPSearchOperation * op = new IMAPSearchOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setSearchExpression(expression); + op->autorelease(); + return op; +} + +IMAPIdleOperation * IMAPAsyncSession::idleOperation(String * folder, uint32_t lastKnownUID) +{ + IMAPIdleOperation * op = new IMAPIdleOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setLastKnownUID(lastKnownUID); + op->autorelease(); + return op; +} + +IMAPFetchNamespaceOperation * IMAPAsyncSession::fetchNamespaceOperation() +{ + IMAPFetchNamespaceOperation * op = new IMAPFetchNamespaceOperation(); + op->setMainSession(this); + op->autorelease(); + return op; +} + +IMAPIdentityOperation * IMAPAsyncSession::identityOperation(IMAPIdentity * identity) +{ + IMAPIdentityOperation * op = new IMAPIdentityOperation(); + op->setMainSession(this); + op->setClientIdentity(identity); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::connectOperation() +{ + IMAPConnectOperation * op = new IMAPConnectOperation(); + op->setMainSession(this); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::checkAccountOperation() +{ + IMAPCheckAccountOperation * op = new IMAPCheckAccountOperation(); + op->setMainSession(this); + op->autorelease(); + return op; +} + +IMAPCapabilityOperation * IMAPAsyncSession::capabilityOperation() +{ + IMAPCapabilityOperation * op = new IMAPCapabilityOperation(); + op->setMainSession(this); + op->autorelease(); + return op; +} + +IMAPQuotaOperation * IMAPAsyncSession::quotaOperation() +{ + IMAPQuotaOperation * op = new IMAPQuotaOperation(); + op->setMainSession(this); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::noopOperation() +{ + IMAPNoopOperation * op = new IMAPNoopOperation(); + op->setMainSession(this); + op->autorelease(); + return op; +} + +IMAPOperation * IMAPAsyncSession::disconnectOperation() +{ + IMAPMultiDisconnectOperation * op = new IMAPMultiDisconnectOperation(); + op->autorelease(); + for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { + IMAPAsyncConnection * currentSession = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); + op->addOperation(currentSession->disconnectOperation()); + } + return op; +} + +void IMAPAsyncSession::setConnectionLogger(ConnectionLogger * logger) +{ + mConnectionLogger = logger; + for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { + IMAPAsyncConnection * currentSession = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); + currentSession->setConnectionLogger(logger); + } +} + +ConnectionLogger * IMAPAsyncSession::connectionLogger() +{ + return mConnectionLogger; +} + +IMAPMessageRenderingOperation * IMAPAsyncSession::renderingOperation(IMAPMessage * message, + String * folder, + IMAPMessageRenderingType type) +{ + IMAPMessageRenderingOperation * op = new IMAPMessageRenderingOperation(); + op->setMainSession(this); + op->setMessage(message); + op->setFolder(folder); + op->setRenderingType(type); + op->autorelease(); + return op; +} + +IMAPMessageRenderingOperation * IMAPAsyncSession::htmlRenderingOperation(IMAPMessage * message, + String * folder) +{ + return renderingOperation(message, folder, IMAPMessageRenderingTypeHTML); +} + +IMAPMessageRenderingOperation * IMAPAsyncSession::htmlBodyRenderingOperation(IMAPMessage * message, + String * folder) +{ + return renderingOperation(message, folder, IMAPMessageRenderingTypeHTMLBody); +} + +IMAPMessageRenderingOperation * IMAPAsyncSession::plainTextRenderingOperation(IMAPMessage * message, + String * folder) +{ + return renderingOperation(message, folder, IMAPMessageRenderingTypePlainText); +} + +IMAPMessageRenderingOperation * IMAPAsyncSession::plainTextBodyRenderingOperation(IMAPMessage * message, + String * folder, + bool stripWhitespace) +{ + return renderingOperation(message, folder, + stripWhitespace ? IMAPMessageRenderingTypePlainTextBodyAndStripWhitespace : + IMAPMessageRenderingTypePlainTextBody); +} + +void IMAPAsyncSession::automaticConfigurationDone(IMAPSession * session) +{ + MC_SAFE_REPLACE_COPY(IMAPIdentity, mServerIdentity, session->serverIdentity()); + MC_SAFE_REPLACE_COPY(String, mGmailUserDisplayName, session->gmailUserDisplayName()); + setDefaultNamespace(session->defaultNamespace()); + mAutomaticConfigurationDone = true; +} + +void IMAPAsyncSession::setOperationQueueCallback(OperationQueueCallback * callback) +{ + mOperationQueueCallback = callback; +} + +OperationQueueCallback * IMAPAsyncSession::operationQueueCallback() +{ + return mOperationQueueCallback; +} + +bool IMAPAsyncSession::isOperationQueueRunning() +{ + return mQueueRunning; +} + +void IMAPAsyncSession::cancelAllOperations() +{ + for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { + IMAPAsyncConnection * currentSession = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); + currentSession->cancelAllOperations(); + } +} + +void IMAPAsyncSession::operationRunningStateChanged() +{ + bool isRunning = false; + for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { + IMAPAsyncConnection * currentSession = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); + if (currentSession->isQueueRunning()){ + isRunning = true; + break; + } + } + if (mQueueRunning == isRunning) { + return; + } + mQueueRunning = isRunning; + if (mOperationQueueCallback != NULL) { + if (isRunning) { + mOperationQueueCallback->queueStartRunning(); + } + else { + mOperationQueueCallback->queueStoppedRunning(); + } + } +} + +#if __APPLE__ +void IMAPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue) +{ + if (mDispatchQueue != NULL) { + dispatch_release(mDispatchQueue); + } + mDispatchQueue = dispatchQueue; + if (mDispatchQueue != NULL) { + dispatch_retain(mDispatchQueue); + } +} + +dispatch_queue_t IMAPAsyncSession::dispatchQueue() +{ + return mDispatchQueue; +} +#endif diff --git a/src/async/imap/MCIMAPCapabilityOperation.cc b/src/async/imap/MCIMAPCapabilityOperation.cc deleted file mode 100644 index 9edb9b1c..00000000 --- a/src/async/imap/MCIMAPCapabilityOperation.cc +++ /dev/null @@ -1,43 +0,0 @@ -// -// MCIMAPCapabilityOperation.cpp -// mailcore2 -// -// Created by DINH Viêt Hoà on 3/4/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPCapabilityOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPCapabilityOperation::IMAPCapabilityOperation() -{ - mCapabilities = NULL; -} - -IMAPCapabilityOperation::~IMAPCapabilityOperation() -{ - MC_SAFE_RELEASE(mCapabilities); -} - -IndexSet * IMAPCapabilityOperation::capabilities() -{ - return mCapabilities; -} - -void IMAPCapabilityOperation::main() -{ - ErrorCode error; - session()->session()->loginIfNeeded(&error); - if (error != ErrorNone) { - setError(error); - return; - } - mCapabilities = session()->session()->capability(&error); - MC_SAFE_RETAIN(mCapabilities); - setError(error); -} - diff --git a/src/async/imap/MCIMAPCapabilityOperation.cpp b/src/async/imap/MCIMAPCapabilityOperation.cpp new file mode 100644 index 00000000..9edb9b1c --- /dev/null +++ b/src/async/imap/MCIMAPCapabilityOperation.cpp @@ -0,0 +1,43 @@ +// +// MCIMAPCapabilityOperation.cpp +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/4/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPCapabilityOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPCapabilityOperation::IMAPCapabilityOperation() +{ + mCapabilities = NULL; +} + +IMAPCapabilityOperation::~IMAPCapabilityOperation() +{ + MC_SAFE_RELEASE(mCapabilities); +} + +IndexSet * IMAPCapabilityOperation::capabilities() +{ + return mCapabilities; +} + +void IMAPCapabilityOperation::main() +{ + ErrorCode error; + session()->session()->loginIfNeeded(&error); + if (error != ErrorNone) { + setError(error); + return; + } + mCapabilities = session()->session()->capability(&error); + MC_SAFE_RETAIN(mCapabilities); + setError(error); +} + diff --git a/src/async/imap/MCIMAPCheckAccountOperation.cc b/src/async/imap/MCIMAPCheckAccountOperation.cc deleted file mode 100644 index 5baa89a9..00000000 --- a/src/async/imap/MCIMAPCheckAccountOperation.cc +++ /dev/null @@ -1,23 +0,0 @@ -// -// MCIMAPCheckAccountOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPCheckAccountOperation.h" - -#include "MCIMAPAsyncConnection.h" -#include "MCIMAPSession.h" - -using namespace mailcore; - -void IMAPCheckAccountOperation::main() -{ - ErrorCode error; - session()->session()->connectIfNeeded(&error); - if (error == ErrorNone) - session()->session()->login(&error); - setError(error); -} diff --git a/src/async/imap/MCIMAPCheckAccountOperation.cpp b/src/async/imap/MCIMAPCheckAccountOperation.cpp new file mode 100644 index 00000000..5baa89a9 --- /dev/null +++ b/src/async/imap/MCIMAPCheckAccountOperation.cpp @@ -0,0 +1,23 @@ +// +// MCIMAPCheckAccountOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPCheckAccountOperation.h" + +#include "MCIMAPAsyncConnection.h" +#include "MCIMAPSession.h" + +using namespace mailcore; + +void IMAPCheckAccountOperation::main() +{ + ErrorCode error; + session()->session()->connectIfNeeded(&error); + if (error == ErrorNone) + session()->session()->login(&error); + setError(error); +} diff --git a/src/async/imap/MCIMAPConnectOperation.cc b/src/async/imap/MCIMAPConnectOperation.cc deleted file mode 100644 index e4f71d03..00000000 --- a/src/async/imap/MCIMAPConnectOperation.cc +++ /dev/null @@ -1,21 +0,0 @@ -// -// MCIMAPConnectOperation.cc -// mailcore2 -// -// Created by Ryan Walklin on 6/09/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPConnectOperation.h" - -#include "MCIMAPAsyncConnection.h" -#include "MCIMAPSession.h" - -using namespace mailcore; - -void IMAPConnectOperation::main() -{ - ErrorCode error; - session()->session()->connectIfNeeded(&error); - setError(error); -} diff --git a/src/async/imap/MCIMAPConnectOperation.cpp b/src/async/imap/MCIMAPConnectOperation.cpp new file mode 100644 index 00000000..e4f71d03 --- /dev/null +++ b/src/async/imap/MCIMAPConnectOperation.cpp @@ -0,0 +1,21 @@ +// +// MCIMAPConnectOperation.cc +// mailcore2 +// +// Created by Ryan Walklin on 6/09/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPConnectOperation.h" + +#include "MCIMAPAsyncConnection.h" +#include "MCIMAPSession.h" + +using namespace mailcore; + +void IMAPConnectOperation::main() +{ + ErrorCode error; + session()->session()->connectIfNeeded(&error); + setError(error); +} diff --git a/src/async/imap/MCIMAPCopyMessagesOperation.cc b/src/async/imap/MCIMAPCopyMessagesOperation.cc deleted file mode 100644 index 87ef8e20..00000000 --- a/src/async/imap/MCIMAPCopyMessagesOperation.cc +++ /dev/null @@ -1,61 +0,0 @@ -// -// MCIMAPCopyMessagesOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPCopyMessagesOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPCopyMessagesOperation::IMAPCopyMessagesOperation() -{ - mUids = NULL; - mDestFolder = NULL; - mUidMapping = NULL; -} - -IMAPCopyMessagesOperation::~IMAPCopyMessagesOperation() -{ - MC_SAFE_RELEASE(mUidMapping); - MC_SAFE_RELEASE(mUids); - MC_SAFE_RELEASE(mDestFolder); -} - -void IMAPCopyMessagesOperation::setUids(IndexSet * uids) -{ - MC_SAFE_REPLACE_RETAIN(IndexSet, mUids, uids); -} - -IndexSet * IMAPCopyMessagesOperation::uids() -{ - return mUids; -} - -HashMap * IMAPCopyMessagesOperation::uidMapping() -{ - return mUidMapping; -} - -void IMAPCopyMessagesOperation::setDestFolder(String * destFolder) -{ - MC_SAFE_REPLACE_COPY(String, mDestFolder, destFolder); -} - -String * IMAPCopyMessagesOperation::destFolder() -{ - return mDestFolder; -} - -void IMAPCopyMessagesOperation::main() -{ - ErrorCode error; - session()->session()->copyMessages(folder(), mUids, mDestFolder, &mUidMapping, &error); - MC_SAFE_RETAIN(mUidMapping); - setError(error); -} diff --git a/src/async/imap/MCIMAPCopyMessagesOperation.cpp b/src/async/imap/MCIMAPCopyMessagesOperation.cpp new file mode 100644 index 00000000..87ef8e20 --- /dev/null +++ b/src/async/imap/MCIMAPCopyMessagesOperation.cpp @@ -0,0 +1,61 @@ +// +// MCIMAPCopyMessagesOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPCopyMessagesOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPCopyMessagesOperation::IMAPCopyMessagesOperation() +{ + mUids = NULL; + mDestFolder = NULL; + mUidMapping = NULL; +} + +IMAPCopyMessagesOperation::~IMAPCopyMessagesOperation() +{ + MC_SAFE_RELEASE(mUidMapping); + MC_SAFE_RELEASE(mUids); + MC_SAFE_RELEASE(mDestFolder); +} + +void IMAPCopyMessagesOperation::setUids(IndexSet * uids) +{ + MC_SAFE_REPLACE_RETAIN(IndexSet, mUids, uids); +} + +IndexSet * IMAPCopyMessagesOperation::uids() +{ + return mUids; +} + +HashMap * IMAPCopyMessagesOperation::uidMapping() +{ + return mUidMapping; +} + +void IMAPCopyMessagesOperation::setDestFolder(String * destFolder) +{ + MC_SAFE_REPLACE_COPY(String, mDestFolder, destFolder); +} + +String * IMAPCopyMessagesOperation::destFolder() +{ + return mDestFolder; +} + +void IMAPCopyMessagesOperation::main() +{ + ErrorCode error; + session()->session()->copyMessages(folder(), mUids, mDestFolder, &mUidMapping, &error); + MC_SAFE_RETAIN(mUidMapping); + setError(error); +} diff --git a/src/async/imap/MCIMAPCreateFolderOperation.cc b/src/async/imap/MCIMAPCreateFolderOperation.cc deleted file mode 100644 index d4e341fc..00000000 --- a/src/async/imap/MCIMAPCreateFolderOperation.cc +++ /dev/null @@ -1,29 +0,0 @@ -// -// MCIMAPCreateFolderOperation.cpp -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPCreateFolderOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPCreateFolderOperation::IMAPCreateFolderOperation() -{ -} - -IMAPCreateFolderOperation::~IMAPCreateFolderOperation() -{ -} - -void IMAPCreateFolderOperation::main() -{ - ErrorCode error; - session()->session()->createFolder(folder(), &error); - setError(error); -} diff --git a/src/async/imap/MCIMAPCreateFolderOperation.cpp b/src/async/imap/MCIMAPCreateFolderOperation.cpp new file mode 100644 index 00000000..d4e341fc --- /dev/null +++ b/src/async/imap/MCIMAPCreateFolderOperation.cpp @@ -0,0 +1,29 @@ +// +// MCIMAPCreateFolderOperation.cpp +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPCreateFolderOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPCreateFolderOperation::IMAPCreateFolderOperation() +{ +} + +IMAPCreateFolderOperation::~IMAPCreateFolderOperation() +{ +} + +void IMAPCreateFolderOperation::main() +{ + ErrorCode error; + session()->session()->createFolder(folder(), &error); + setError(error); +} diff --git a/src/async/imap/MCIMAPDeleteFolderOperation.cc b/src/async/imap/MCIMAPDeleteFolderOperation.cc deleted file mode 100644 index d03bfc88..00000000 --- a/src/async/imap/MCIMAPDeleteFolderOperation.cc +++ /dev/null @@ -1,29 +0,0 @@ -// -// MCIMAPDeleteFolderOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPDeleteFolderOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPDeleteFolderOperation::IMAPDeleteFolderOperation() -{ -} - -IMAPDeleteFolderOperation::~IMAPDeleteFolderOperation() -{ -} - -void IMAPDeleteFolderOperation::main() -{ - ErrorCode error; - session()->session()->deleteFolder(folder(), &error); - setError(error); -} diff --git a/src/async/imap/MCIMAPDeleteFolderOperation.cpp b/src/async/imap/MCIMAPDeleteFolderOperation.cpp new file mode 100644 index 00000000..d03bfc88 --- /dev/null +++ b/src/async/imap/MCIMAPDeleteFolderOperation.cpp @@ -0,0 +1,29 @@ +// +// MCIMAPDeleteFolderOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPDeleteFolderOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPDeleteFolderOperation::IMAPDeleteFolderOperation() +{ +} + +IMAPDeleteFolderOperation::~IMAPDeleteFolderOperation() +{ +} + +void IMAPDeleteFolderOperation::main() +{ + ErrorCode error; + session()->session()->deleteFolder(folder(), &error); + setError(error); +} diff --git a/src/async/imap/MCIMAPDisconnectOperation.cc b/src/async/imap/MCIMAPDisconnectOperation.cc deleted file mode 100644 index 4ee4ee9a..00000000 --- a/src/async/imap/MCIMAPDisconnectOperation.cc +++ /dev/null @@ -1,28 +0,0 @@ -// -// MCIMAPDisconnectOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 6/22/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPDisconnectOperation.h" - -#include "MCIMAPAsyncConnection.h" -#include "MCIMAPSession.h" - -using namespace mailcore; - -IMAPDisconnectOperation::IMAPDisconnectOperation() -{ -} - -IMAPDisconnectOperation::~IMAPDisconnectOperation() -{ -} - -void IMAPDisconnectOperation::main() -{ - session()->session()->disconnect(); - setError(ErrorNone); -} diff --git a/src/async/imap/MCIMAPDisconnectOperation.cpp b/src/async/imap/MCIMAPDisconnectOperation.cpp new file mode 100644 index 00000000..4ee4ee9a --- /dev/null +++ b/src/async/imap/MCIMAPDisconnectOperation.cpp @@ -0,0 +1,28 @@ +// +// MCIMAPDisconnectOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 6/22/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPDisconnectOperation.h" + +#include "MCIMAPAsyncConnection.h" +#include "MCIMAPSession.h" + +using namespace mailcore; + +IMAPDisconnectOperation::IMAPDisconnectOperation() +{ +} + +IMAPDisconnectOperation::~IMAPDisconnectOperation() +{ +} + +void IMAPDisconnectOperation::main() +{ + session()->session()->disconnect(); + setError(ErrorNone); +} diff --git a/src/async/imap/MCIMAPExpungeOperation.cc b/src/async/imap/MCIMAPExpungeOperation.cc deleted file mode 100644 index 141258b4..00000000 --- a/src/async/imap/MCIMAPExpungeOperation.cc +++ /dev/null @@ -1,29 +0,0 @@ -// -// MCIMAPExpungeOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPExpungeOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPExpungeOperation::IMAPExpungeOperation() -{ -} - -IMAPExpungeOperation::~IMAPExpungeOperation() -{ -} - -void IMAPExpungeOperation::main() -{ - ErrorCode error; - session()->session()->expunge(folder(), &error); - setError(error); -} diff --git a/src/async/imap/MCIMAPExpungeOperation.cpp b/src/async/imap/MCIMAPExpungeOperation.cpp new file mode 100644 index 00000000..141258b4 --- /dev/null +++ b/src/async/imap/MCIMAPExpungeOperation.cpp @@ -0,0 +1,29 @@ +// +// MCIMAPExpungeOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPExpungeOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPExpungeOperation::IMAPExpungeOperation() +{ +} + +IMAPExpungeOperation::~IMAPExpungeOperation() +{ +} + +void IMAPExpungeOperation::main() +{ + ErrorCode error; + session()->session()->expunge(folder(), &error); + setError(error); +} diff --git a/src/async/imap/MCIMAPFetchContentOperation.cc b/src/async/imap/MCIMAPFetchContentOperation.cc deleted file mode 100644 index 049ac8a7..00000000 --- a/src/async/imap/MCIMAPFetchContentOperation.cc +++ /dev/null @@ -1,98 +0,0 @@ -// -// IMAPFetchContentOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPFetchContentOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPFetchContentOperation::IMAPFetchContentOperation() -{ - mUid = 0; - mNumber = 0; - mPartID = NULL; - mEncoding = Encoding7Bit; - mData = NULL; -} - -IMAPFetchContentOperation::~IMAPFetchContentOperation() -{ - MC_SAFE_RELEASE(mPartID); - MC_SAFE_RELEASE(mData); -} - -void IMAPFetchContentOperation::setUid(uint32_t uid) -{ - mUid = uid; -} - -uint32_t IMAPFetchContentOperation::uid() -{ - return mUid; -} - -void IMAPFetchContentOperation::setNumber(uint32_t value) -{ - mNumber = value; -} - -uint32_t IMAPFetchContentOperation::number() -{ - return mNumber; -} - -void IMAPFetchContentOperation::setPartID(String * partID) -{ - MC_SAFE_REPLACE_COPY(String, mPartID, partID); -} - -String * IMAPFetchContentOperation::partID() -{ - return mPartID; -} - -void IMAPFetchContentOperation::setEncoding(Encoding encoding) -{ - mEncoding = encoding; -} - -Encoding IMAPFetchContentOperation::encoding() -{ - return mEncoding; -} - -Data * IMAPFetchContentOperation::data() -{ - return mData; -} - -void IMAPFetchContentOperation::main() -{ - ErrorCode error; - if (mUid != 0) { - if (mPartID != NULL) { - mData = session()->session()->fetchMessageAttachmentByUID(folder(), mUid, mPartID, mEncoding, this, &error); - } - else { - mData = session()->session()->fetchMessageByUID(folder(), mUid, this, &error); - } - } - else { - if (mPartID != NULL) { - mData = session()->session()->fetchMessageAttachmentByNumber(folder(), mNumber, mPartID, mEncoding, this, &error); - } - else { - mData = session()->session()->fetchMessageByNumber(folder(), mNumber, this, &error); - } - } - MC_SAFE_RETAIN(mData); - setError(error); -} - diff --git a/src/async/imap/MCIMAPFetchContentOperation.cpp b/src/async/imap/MCIMAPFetchContentOperation.cpp new file mode 100644 index 00000000..049ac8a7 --- /dev/null +++ b/src/async/imap/MCIMAPFetchContentOperation.cpp @@ -0,0 +1,98 @@ +// +// IMAPFetchContentOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPFetchContentOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPFetchContentOperation::IMAPFetchContentOperation() +{ + mUid = 0; + mNumber = 0; + mPartID = NULL; + mEncoding = Encoding7Bit; + mData = NULL; +} + +IMAPFetchContentOperation::~IMAPFetchContentOperation() +{ + MC_SAFE_RELEASE(mPartID); + MC_SAFE_RELEASE(mData); +} + +void IMAPFetchContentOperation::setUid(uint32_t uid) +{ + mUid = uid; +} + +uint32_t IMAPFetchContentOperation::uid() +{ + return mUid; +} + +void IMAPFetchContentOperation::setNumber(uint32_t value) +{ + mNumber = value; +} + +uint32_t IMAPFetchContentOperation::number() +{ + return mNumber; +} + +void IMAPFetchContentOperation::setPartID(String * partID) +{ + MC_SAFE_REPLACE_COPY(String, mPartID, partID); +} + +String * IMAPFetchContentOperation::partID() +{ + return mPartID; +} + +void IMAPFetchContentOperation::setEncoding(Encoding encoding) +{ + mEncoding = encoding; +} + +Encoding IMAPFetchContentOperation::encoding() +{ + return mEncoding; +} + +Data * IMAPFetchContentOperation::data() +{ + return mData; +} + +void IMAPFetchContentOperation::main() +{ + ErrorCode error; + if (mUid != 0) { + if (mPartID != NULL) { + mData = session()->session()->fetchMessageAttachmentByUID(folder(), mUid, mPartID, mEncoding, this, &error); + } + else { + mData = session()->session()->fetchMessageByUID(folder(), mUid, this, &error); + } + } + else { + if (mPartID != NULL) { + mData = session()->session()->fetchMessageAttachmentByNumber(folder(), mNumber, mPartID, mEncoding, this, &error); + } + else { + mData = session()->session()->fetchMessageByNumber(folder(), mNumber, this, &error); + } + } + MC_SAFE_RETAIN(mData); + setError(error); +} + diff --git a/src/async/imap/MCIMAPFetchFoldersOperation.cc b/src/async/imap/MCIMAPFetchFoldersOperation.cc deleted file mode 100644 index e1f121e8..00000000 --- a/src/async/imap/MCIMAPFetchFoldersOperation.cc +++ /dev/null @@ -1,55 +0,0 @@ -// -// MCIMAPFetchFoldersOperation.cpp -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPFetchFoldersOperation.h" - -#include - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPFetchFoldersOperation::IMAPFetchFoldersOperation() -{ - mFetchSubscribedEnabled = false; - mFolders = NULL; -} - -IMAPFetchFoldersOperation::~IMAPFetchFoldersOperation() -{ - MC_SAFE_RELEASE(mFolders); -} - -void IMAPFetchFoldersOperation::setFetchSubscribedEnabled(bool enabled) -{ - mFetchSubscribedEnabled = enabled; -} - -bool IMAPFetchFoldersOperation::isFetchSubscribedEnabled() -{ - return mFetchSubscribedEnabled; -} - -Array * IMAPFetchFoldersOperation::folders() -{ - return mFolders; -} - -void IMAPFetchFoldersOperation::main() -{ - ErrorCode error; - if (mFetchSubscribedEnabled) { - mFolders = session()->session()->fetchSubscribedFolders(&error); - } - else { - mFolders = session()->session()->fetchAllFolders(&error); - } - MC_SAFE_RETAIN(mFolders); - setError(error); -} diff --git a/src/async/imap/MCIMAPFetchFoldersOperation.cpp b/src/async/imap/MCIMAPFetchFoldersOperation.cpp new file mode 100644 index 00000000..e1f121e8 --- /dev/null +++ b/src/async/imap/MCIMAPFetchFoldersOperation.cpp @@ -0,0 +1,55 @@ +// +// MCIMAPFetchFoldersOperation.cpp +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPFetchFoldersOperation.h" + +#include + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPFetchFoldersOperation::IMAPFetchFoldersOperation() +{ + mFetchSubscribedEnabled = false; + mFolders = NULL; +} + +IMAPFetchFoldersOperation::~IMAPFetchFoldersOperation() +{ + MC_SAFE_RELEASE(mFolders); +} + +void IMAPFetchFoldersOperation::setFetchSubscribedEnabled(bool enabled) +{ + mFetchSubscribedEnabled = enabled; +} + +bool IMAPFetchFoldersOperation::isFetchSubscribedEnabled() +{ + return mFetchSubscribedEnabled; +} + +Array * IMAPFetchFoldersOperation::folders() +{ + return mFolders; +} + +void IMAPFetchFoldersOperation::main() +{ + ErrorCode error; + if (mFetchSubscribedEnabled) { + mFolders = session()->session()->fetchSubscribedFolders(&error); + } + else { + mFolders = session()->session()->fetchAllFolders(&error); + } + MC_SAFE_RETAIN(mFolders); + setError(error); +} diff --git a/src/async/imap/MCIMAPFetchMessagesOperation.cc b/src/async/imap/MCIMAPFetchMessagesOperation.cc deleted file mode 100644 index 480f2c1b..00000000 --- a/src/async/imap/MCIMAPFetchMessagesOperation.cc +++ /dev/null @@ -1,120 +0,0 @@ -// -// IMAPFetchMessagesOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPFetchMessagesOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" -#include "MCIMAPSyncResult.h" - -using namespace mailcore; - -IMAPFetchMessagesOperation::IMAPFetchMessagesOperation() -{ - mFetchByUidEnabled = false; - mIndexes = NULL; - mMessages = NULL; - mVanishedMessages = NULL; - mModSequenceValue = 0; - mExtraHeaders = NULL; -} - -IMAPFetchMessagesOperation::~IMAPFetchMessagesOperation() -{ - MC_SAFE_RELEASE(mIndexes); - MC_SAFE_RELEASE(mMessages); - MC_SAFE_RELEASE(mVanishedMessages); - MC_SAFE_RELEASE(mExtraHeaders); -} - -void IMAPFetchMessagesOperation::setFetchByUidEnabled(bool enabled) -{ - mFetchByUidEnabled = enabled; -} - -bool IMAPFetchMessagesOperation::isFetchByUidEnabled() -{ - return mFetchByUidEnabled; -} - -void IMAPFetchMessagesOperation::setIndexes(IndexSet * indexes) -{ - MC_SAFE_REPLACE_RETAIN(IndexSet, mIndexes, indexes); -} - -IndexSet * IMAPFetchMessagesOperation::indexes() -{ - return mIndexes; -} - -void IMAPFetchMessagesOperation::setModSequenceValue(uint64_t modseq) -{ - mModSequenceValue = modseq; -} - -uint64_t IMAPFetchMessagesOperation::modSequenceValue() -{ - return mModSequenceValue; -} - -void IMAPFetchMessagesOperation::setKind(IMAPMessagesRequestKind kind) -{ - mKind = kind; -} - -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; -} - -IndexSet * IMAPFetchMessagesOperation::vanishedMessages() -{ - return mVanishedMessages; -} - -void IMAPFetchMessagesOperation::main() -{ - ErrorCode error; - if (mFetchByUidEnabled) { - if (mModSequenceValue != 0) { - IMAPSyncResult * syncResult; - - syncResult = session()->session()->syncMessagesByUIDWithExtraHeaders(folder(), mKind, mIndexes, - mModSequenceValue, this, mExtraHeaders, - &error); - if (syncResult != NULL) { - mMessages = syncResult->modifiedOrAddedMessages(); - mVanishedMessages = syncResult->vanishedMessages(); - } - } - else { - mMessages = session()->session()->fetchMessagesByUIDWithExtraHeaders(folder(), mKind, mIndexes, this, - mExtraHeaders, &error); - } - } - else { - mMessages = session()->session()->fetchMessagesByNumberWithExtraHeaders(folder(), mKind, mIndexes, this, - mExtraHeaders, &error); - } - MC_SAFE_RETAIN(mMessages); - MC_SAFE_RETAIN(mVanishedMessages); - setError(error); -} diff --git a/src/async/imap/MCIMAPFetchMessagesOperation.cpp b/src/async/imap/MCIMAPFetchMessagesOperation.cpp new file mode 100644 index 00000000..480f2c1b --- /dev/null +++ b/src/async/imap/MCIMAPFetchMessagesOperation.cpp @@ -0,0 +1,120 @@ +// +// IMAPFetchMessagesOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPFetchMessagesOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" +#include "MCIMAPSyncResult.h" + +using namespace mailcore; + +IMAPFetchMessagesOperation::IMAPFetchMessagesOperation() +{ + mFetchByUidEnabled = false; + mIndexes = NULL; + mMessages = NULL; + mVanishedMessages = NULL; + mModSequenceValue = 0; + mExtraHeaders = NULL; +} + +IMAPFetchMessagesOperation::~IMAPFetchMessagesOperation() +{ + MC_SAFE_RELEASE(mIndexes); + MC_SAFE_RELEASE(mMessages); + MC_SAFE_RELEASE(mVanishedMessages); + MC_SAFE_RELEASE(mExtraHeaders); +} + +void IMAPFetchMessagesOperation::setFetchByUidEnabled(bool enabled) +{ + mFetchByUidEnabled = enabled; +} + +bool IMAPFetchMessagesOperation::isFetchByUidEnabled() +{ + return mFetchByUidEnabled; +} + +void IMAPFetchMessagesOperation::setIndexes(IndexSet * indexes) +{ + MC_SAFE_REPLACE_RETAIN(IndexSet, mIndexes, indexes); +} + +IndexSet * IMAPFetchMessagesOperation::indexes() +{ + return mIndexes; +} + +void IMAPFetchMessagesOperation::setModSequenceValue(uint64_t modseq) +{ + mModSequenceValue = modseq; +} + +uint64_t IMAPFetchMessagesOperation::modSequenceValue() +{ + return mModSequenceValue; +} + +void IMAPFetchMessagesOperation::setKind(IMAPMessagesRequestKind kind) +{ + mKind = kind; +} + +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; +} + +IndexSet * IMAPFetchMessagesOperation::vanishedMessages() +{ + return mVanishedMessages; +} + +void IMAPFetchMessagesOperation::main() +{ + ErrorCode error; + if (mFetchByUidEnabled) { + if (mModSequenceValue != 0) { + IMAPSyncResult * syncResult; + + syncResult = session()->session()->syncMessagesByUIDWithExtraHeaders(folder(), mKind, mIndexes, + mModSequenceValue, this, mExtraHeaders, + &error); + if (syncResult != NULL) { + mMessages = syncResult->modifiedOrAddedMessages(); + mVanishedMessages = syncResult->vanishedMessages(); + } + } + else { + mMessages = session()->session()->fetchMessagesByUIDWithExtraHeaders(folder(), mKind, mIndexes, this, + mExtraHeaders, &error); + } + } + else { + mMessages = session()->session()->fetchMessagesByNumberWithExtraHeaders(folder(), mKind, mIndexes, this, + mExtraHeaders, &error); + } + MC_SAFE_RETAIN(mMessages); + MC_SAFE_RETAIN(mVanishedMessages); + setError(error); +} diff --git a/src/async/imap/MCIMAPFetchNamespaceOperation.cc b/src/async/imap/MCIMAPFetchNamespaceOperation.cc deleted file mode 100644 index 6851130d..00000000 --- a/src/async/imap/MCIMAPFetchNamespaceOperation.cc +++ /dev/null @@ -1,38 +0,0 @@ -// -// IMAPFetchNamespaceOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPFetchNamespaceOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPFetchNamespaceOperation::IMAPFetchNamespaceOperation() -{ - mNamespaces = NULL; -} - -IMAPFetchNamespaceOperation::~IMAPFetchNamespaceOperation() -{ - MC_SAFE_RELEASE(mNamespaces); -} - -void IMAPFetchNamespaceOperation::main() -{ - ErrorCode error; - mNamespaces = session()->session()->fetchNamespace(&error); - setError(error); - MC_SAFE_RETAIN(mNamespaces); -} - -HashMap * IMAPFetchNamespaceOperation::namespaces() -{ - return mNamespaces; -} - diff --git a/src/async/imap/MCIMAPFetchNamespaceOperation.cpp b/src/async/imap/MCIMAPFetchNamespaceOperation.cpp new file mode 100644 index 00000000..6851130d --- /dev/null +++ b/src/async/imap/MCIMAPFetchNamespaceOperation.cpp @@ -0,0 +1,38 @@ +// +// IMAPFetchNamespaceOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPFetchNamespaceOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPFetchNamespaceOperation::IMAPFetchNamespaceOperation() +{ + mNamespaces = NULL; +} + +IMAPFetchNamespaceOperation::~IMAPFetchNamespaceOperation() +{ + MC_SAFE_RELEASE(mNamespaces); +} + +void IMAPFetchNamespaceOperation::main() +{ + ErrorCode error; + mNamespaces = session()->session()->fetchNamespace(&error); + setError(error); + MC_SAFE_RETAIN(mNamespaces); +} + +HashMap * IMAPFetchNamespaceOperation::namespaces() +{ + return mNamespaces; +} + diff --git a/src/async/imap/MCIMAPFetchParsedContentOperation.cc b/src/async/imap/MCIMAPFetchParsedContentOperation.cc deleted file mode 100644 index e32112e6..00000000 --- a/src/async/imap/MCIMAPFetchParsedContentOperation.cc +++ /dev/null @@ -1,79 +0,0 @@ -// -// IMAPFetchParsedContentOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPFetchParsedContentOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPFetchParsedContentOperation::IMAPFetchParsedContentOperation() -{ - mUid = 0; - mNumber = 0; - mEncoding = Encoding7Bit; - mParser = NULL; -} - -IMAPFetchParsedContentOperation::~IMAPFetchParsedContentOperation() -{ - MC_SAFE_RELEASE(mParser); -} - -void IMAPFetchParsedContentOperation::setUid(uint32_t uid) -{ - mUid = uid; -} - -uint32_t IMAPFetchParsedContentOperation::uid() -{ - return mUid; -} - -void IMAPFetchParsedContentOperation::setNumber(uint32_t value) -{ - mNumber = value; -} - -uint32_t IMAPFetchParsedContentOperation::number() -{ - return mNumber; -} - -void IMAPFetchParsedContentOperation::setEncoding(Encoding encoding) -{ - mEncoding = encoding; -} - -Encoding IMAPFetchParsedContentOperation::encoding() -{ - return mEncoding; -} - -MessageParser * IMAPFetchParsedContentOperation::parser() -{ - return mParser; -} - -void IMAPFetchParsedContentOperation::main() -{ - ErrorCode error; - Data * data; - if (mUid != 0) { - data = session()->session()->fetchMessageByUID(folder(), mUid, this, &error); - } - else { - data = session()->session()->fetchMessageByNumber(folder(), mNumber, this, &error); - } - if (data) { - mParser = new mailcore::MessageParser(data); - } - setError(error); -} - diff --git a/src/async/imap/MCIMAPFetchParsedContentOperation.cpp b/src/async/imap/MCIMAPFetchParsedContentOperation.cpp new file mode 100644 index 00000000..e32112e6 --- /dev/null +++ b/src/async/imap/MCIMAPFetchParsedContentOperation.cpp @@ -0,0 +1,79 @@ +// +// IMAPFetchParsedContentOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPFetchParsedContentOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPFetchParsedContentOperation::IMAPFetchParsedContentOperation() +{ + mUid = 0; + mNumber = 0; + mEncoding = Encoding7Bit; + mParser = NULL; +} + +IMAPFetchParsedContentOperation::~IMAPFetchParsedContentOperation() +{ + MC_SAFE_RELEASE(mParser); +} + +void IMAPFetchParsedContentOperation::setUid(uint32_t uid) +{ + mUid = uid; +} + +uint32_t IMAPFetchParsedContentOperation::uid() +{ + return mUid; +} + +void IMAPFetchParsedContentOperation::setNumber(uint32_t value) +{ + mNumber = value; +} + +uint32_t IMAPFetchParsedContentOperation::number() +{ + return mNumber; +} + +void IMAPFetchParsedContentOperation::setEncoding(Encoding encoding) +{ + mEncoding = encoding; +} + +Encoding IMAPFetchParsedContentOperation::encoding() +{ + return mEncoding; +} + +MessageParser * IMAPFetchParsedContentOperation::parser() +{ + return mParser; +} + +void IMAPFetchParsedContentOperation::main() +{ + ErrorCode error; + Data * data; + if (mUid != 0) { + data = session()->session()->fetchMessageByUID(folder(), mUid, this, &error); + } + else { + data = session()->session()->fetchMessageByNumber(folder(), mNumber, this, &error); + } + if (data) { + mParser = new mailcore::MessageParser(data); + } + setError(error); +} + diff --git a/src/async/imap/MCIMAPFolderInfoOperation.cc b/src/async/imap/MCIMAPFolderInfoOperation.cc deleted file mode 100644 index 0ea0d005..00000000 --- a/src/async/imap/MCIMAPFolderInfoOperation.cc +++ /dev/null @@ -1,86 +0,0 @@ -// -// MCIMAPFolderInfoOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/13/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPFolderInfoOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPFolderInfoOperation::IMAPFolderInfoOperation() -{ - mUidNext = 0; - mUidValidity = 0; - mMessageCount = 0; - mModSequenceValue = 0; - mFirstUnseenUid = 0; - mAllowsNewPermanentFlags = false; -} - -IMAPFolderInfoOperation::~IMAPFolderInfoOperation() -{ -} - -uint32_t IMAPFolderInfoOperation::uidNext() -{ - return mUidNext; -} - -uint32_t IMAPFolderInfoOperation::uidValidity() -{ - return mUidValidity; -} - -uint64_t IMAPFolderInfoOperation::modSequenceValue() -{ - return mModSequenceValue; -} - -int IMAPFolderInfoOperation::messageCount() -{ - return mMessageCount; -} - -uint32_t IMAPFolderInfoOperation::firstUnseenUid() -{ - return mFirstUnseenUid; -} - -bool IMAPFolderInfoOperation::allowsNewPermanentFlags() -{ - return mAllowsNewPermanentFlags; -} - -void IMAPFolderInfoOperation::main() -{ - ErrorCode error; - - session()->session()->loginIfNeeded(&error); - if (error != ErrorNone) { - setError(error); - return; - } - - session()->session()->select(folder(), &error); - if (error != ErrorNone) { - setError(error); - return; - } - - - mUidNext = session()->session()->uidNext(); - mUidValidity = session()->session()->uidValidity(); - mModSequenceValue = session()->session()->modSequenceValue(); - mMessageCount = session()->session()->lastFolderMessageCount(); - mFirstUnseenUid = session()->session()->firstUnseenUid(); - mAllowsNewPermanentFlags = session()->session()->allowsNewPermanentFlags(); - - setError(error); -} - diff --git a/src/async/imap/MCIMAPFolderInfoOperation.cpp b/src/async/imap/MCIMAPFolderInfoOperation.cpp new file mode 100644 index 00000000..0ea0d005 --- /dev/null +++ b/src/async/imap/MCIMAPFolderInfoOperation.cpp @@ -0,0 +1,86 @@ +// +// MCIMAPFolderInfoOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/13/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPFolderInfoOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPFolderInfoOperation::IMAPFolderInfoOperation() +{ + mUidNext = 0; + mUidValidity = 0; + mMessageCount = 0; + mModSequenceValue = 0; + mFirstUnseenUid = 0; + mAllowsNewPermanentFlags = false; +} + +IMAPFolderInfoOperation::~IMAPFolderInfoOperation() +{ +} + +uint32_t IMAPFolderInfoOperation::uidNext() +{ + return mUidNext; +} + +uint32_t IMAPFolderInfoOperation::uidValidity() +{ + return mUidValidity; +} + +uint64_t IMAPFolderInfoOperation::modSequenceValue() +{ + return mModSequenceValue; +} + +int IMAPFolderInfoOperation::messageCount() +{ + return mMessageCount; +} + +uint32_t IMAPFolderInfoOperation::firstUnseenUid() +{ + return mFirstUnseenUid; +} + +bool IMAPFolderInfoOperation::allowsNewPermanentFlags() +{ + return mAllowsNewPermanentFlags; +} + +void IMAPFolderInfoOperation::main() +{ + ErrorCode error; + + session()->session()->loginIfNeeded(&error); + if (error != ErrorNone) { + setError(error); + return; + } + + session()->session()->select(folder(), &error); + if (error != ErrorNone) { + setError(error); + return; + } + + + mUidNext = session()->session()->uidNext(); + mUidValidity = session()->session()->uidValidity(); + mModSequenceValue = session()->session()->modSequenceValue(); + mMessageCount = session()->session()->lastFolderMessageCount(); + mFirstUnseenUid = session()->session()->firstUnseenUid(); + mAllowsNewPermanentFlags = session()->session()->allowsNewPermanentFlags(); + + setError(error); +} + diff --git a/src/async/imap/MCIMAPFolderStatusOperation.cc b/src/async/imap/MCIMAPFolderStatusOperation.cc deleted file mode 100644 index 22f2797b..00000000 --- a/src/async/imap/MCIMAPFolderStatusOperation.cc +++ /dev/null @@ -1,51 +0,0 @@ -// -// MCIMAPFolderStatusOperation.cc -// mailcore2 -// -// Created by Sebastian on 6/5/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPFolderStatusOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" -#include "MCIMAPFolderStatus.h" - -using namespace mailcore; - -IMAPFolderStatusOperation::IMAPFolderStatusOperation() -{ - mStatus = NULL; -} - -IMAPFolderStatusOperation::~IMAPFolderStatusOperation() -{ - MC_SAFE_RELEASE(mStatus); -} - -void IMAPFolderStatusOperation::main() -{ - ErrorCode error; - - session()->session()->loginIfNeeded(&error); - if (error != ErrorNone) { - setError(error); - return; - } - - IMAPFolderStatus *status = session()->session()->folderStatus(folder(), &error); - if (error != ErrorNone) { - setError(error); - return; - } - - MC_SAFE_REPLACE_RETAIN(IMAPFolderStatus, mStatus, status); - setError(error); -} - -IMAPFolderStatus * IMAPFolderStatusOperation::status() -{ - return mStatus; -} - diff --git a/src/async/imap/MCIMAPFolderStatusOperation.cpp b/src/async/imap/MCIMAPFolderStatusOperation.cpp new file mode 100644 index 00000000..22f2797b --- /dev/null +++ b/src/async/imap/MCIMAPFolderStatusOperation.cpp @@ -0,0 +1,51 @@ +// +// MCIMAPFolderStatusOperation.cc +// mailcore2 +// +// Created by Sebastian on 6/5/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPFolderStatusOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" +#include "MCIMAPFolderStatus.h" + +using namespace mailcore; + +IMAPFolderStatusOperation::IMAPFolderStatusOperation() +{ + mStatus = NULL; +} + +IMAPFolderStatusOperation::~IMAPFolderStatusOperation() +{ + MC_SAFE_RELEASE(mStatus); +} + +void IMAPFolderStatusOperation::main() +{ + ErrorCode error; + + session()->session()->loginIfNeeded(&error); + if (error != ErrorNone) { + setError(error); + return; + } + + IMAPFolderStatus *status = session()->session()->folderStatus(folder(), &error); + if (error != ErrorNone) { + setError(error); + return; + } + + MC_SAFE_REPLACE_RETAIN(IMAPFolderStatus, mStatus, status); + setError(error); +} + +IMAPFolderStatus * IMAPFolderStatusOperation::status() +{ + return mStatus; +} + diff --git a/src/async/imap/MCIMAPIdentityOperation.cc b/src/async/imap/MCIMAPIdentityOperation.cc deleted file mode 100644 index 0dc035e5..00000000 --- a/src/async/imap/MCIMAPIdentityOperation.cc +++ /dev/null @@ -1,51 +0,0 @@ -// -// IMAPIdentityOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPIdentityOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" -#include "MCIMAPIdentity.h" - -using namespace mailcore; - -IMAPIdentityOperation::IMAPIdentityOperation() -{ - mClientIdentity = NULL; - mServerIdentity = NULL; -} - -IMAPIdentityOperation::~IMAPIdentityOperation() -{ - MC_SAFE_RELEASE(mClientIdentity); - MC_SAFE_RELEASE(mServerIdentity); -} - -void IMAPIdentityOperation::setClientIdentity(IMAPIdentity * identity) -{ - MC_SAFE_REPLACE_COPY(IMAPIdentity, mClientIdentity, identity); -} - -IMAPIdentity * IMAPIdentityOperation::clientIdentity() -{ - return mClientIdentity; -} - -IMAPIdentity * IMAPIdentityOperation::serverIdentity() -{ - return mServerIdentity; -} - -void IMAPIdentityOperation::main() -{ - ErrorCode error; - mServerIdentity = session()->session()->identity(mClientIdentity, &error); - MC_SAFE_RETAIN(mServerIdentity); - setError(error); -} - diff --git a/src/async/imap/MCIMAPIdentityOperation.cpp b/src/async/imap/MCIMAPIdentityOperation.cpp new file mode 100644 index 00000000..0dc035e5 --- /dev/null +++ b/src/async/imap/MCIMAPIdentityOperation.cpp @@ -0,0 +1,51 @@ +// +// IMAPIdentityOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPIdentityOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" +#include "MCIMAPIdentity.h" + +using namespace mailcore; + +IMAPIdentityOperation::IMAPIdentityOperation() +{ + mClientIdentity = NULL; + mServerIdentity = NULL; +} + +IMAPIdentityOperation::~IMAPIdentityOperation() +{ + MC_SAFE_RELEASE(mClientIdentity); + MC_SAFE_RELEASE(mServerIdentity); +} + +void IMAPIdentityOperation::setClientIdentity(IMAPIdentity * identity) +{ + MC_SAFE_REPLACE_COPY(IMAPIdentity, mClientIdentity, identity); +} + +IMAPIdentity * IMAPIdentityOperation::clientIdentity() +{ + return mClientIdentity; +} + +IMAPIdentity * IMAPIdentityOperation::serverIdentity() +{ + return mServerIdentity; +} + +void IMAPIdentityOperation::main() +{ + ErrorCode error; + mServerIdentity = session()->session()->identity(mClientIdentity, &error); + MC_SAFE_RETAIN(mServerIdentity); + setError(error); +} + diff --git a/src/async/imap/MCIMAPIdleOperation.cc b/src/async/imap/MCIMAPIdleOperation.cc deleted file mode 100644 index 7154a9f0..00000000 --- a/src/async/imap/MCIMAPIdleOperation.cc +++ /dev/null @@ -1,98 +0,0 @@ -// -// IMAPIdleOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPIdleOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPIdleOperation::IMAPIdleOperation() -{ - mLastKnownUid = 0; - mSetupSuccess = false; - mInterrupted = false; - pthread_mutex_init(&mLock, NULL); -} - -IMAPIdleOperation::~IMAPIdleOperation() -{ - pthread_mutex_destroy(&mLock); -} - -void IMAPIdleOperation::setLastKnownUID(uint32_t uid) -{ - mLastKnownUid = uid; -} - -uint32_t IMAPIdleOperation::lastKnownUID() -{ - return mLastKnownUid; -} - -void IMAPIdleOperation::prepare(void * data) -{ - if (isInterrupted()) { - mSetupSuccess = false; - return; - } - - mSetupSuccess = session()->session()->setupIdle(); -} - -void IMAPIdleOperation::unprepare(void * data) -{ - if (mSetupSuccess) { - session()->session()->unsetupIdle(); - } -} - -bool IMAPIdleOperation::isInterrupted() { - pthread_mutex_lock(&mLock); - bool interrupted = mInterrupted; - pthread_mutex_unlock(&mLock); - - return interrupted; -} - -void IMAPIdleOperation::main() -{ - if (isInterrupted()) { - return; - } - - ErrorCode error; - session()->session()->selectIfNeeded(folder(), &error); - if (error != ErrorNone) { - setError(error); - return; - } - - performMethodOnCallbackThread((Object::Method) &IMAPIdleOperation::prepare, NULL, true); - - if (!mSetupSuccess) { - return; - } - - session()->session()->idle(folder(), mLastKnownUid, &error); - setError(error); - - performMethodOnCallbackThread((Object::Method) &IMAPIdleOperation::unprepare, NULL, true); -} - -void IMAPIdleOperation::interruptIdle() -{ - pthread_mutex_lock(&mLock); - mInterrupted = true; - pthread_mutex_unlock(&mLock); - if (mSetupSuccess) { - session()->session()->interruptIdle(); - } -} - diff --git a/src/async/imap/MCIMAPIdleOperation.cpp b/src/async/imap/MCIMAPIdleOperation.cpp new file mode 100644 index 00000000..7154a9f0 --- /dev/null +++ b/src/async/imap/MCIMAPIdleOperation.cpp @@ -0,0 +1,98 @@ +// +// IMAPIdleOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPIdleOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPIdleOperation::IMAPIdleOperation() +{ + mLastKnownUid = 0; + mSetupSuccess = false; + mInterrupted = false; + pthread_mutex_init(&mLock, NULL); +} + +IMAPIdleOperation::~IMAPIdleOperation() +{ + pthread_mutex_destroy(&mLock); +} + +void IMAPIdleOperation::setLastKnownUID(uint32_t uid) +{ + mLastKnownUid = uid; +} + +uint32_t IMAPIdleOperation::lastKnownUID() +{ + return mLastKnownUid; +} + +void IMAPIdleOperation::prepare(void * data) +{ + if (isInterrupted()) { + mSetupSuccess = false; + return; + } + + mSetupSuccess = session()->session()->setupIdle(); +} + +void IMAPIdleOperation::unprepare(void * data) +{ + if (mSetupSuccess) { + session()->session()->unsetupIdle(); + } +} + +bool IMAPIdleOperation::isInterrupted() { + pthread_mutex_lock(&mLock); + bool interrupted = mInterrupted; + pthread_mutex_unlock(&mLock); + + return interrupted; +} + +void IMAPIdleOperation::main() +{ + if (isInterrupted()) { + return; + } + + ErrorCode error; + session()->session()->selectIfNeeded(folder(), &error); + if (error != ErrorNone) { + setError(error); + return; + } + + performMethodOnCallbackThread((Object::Method) &IMAPIdleOperation::prepare, NULL, true); + + if (!mSetupSuccess) { + return; + } + + session()->session()->idle(folder(), mLastKnownUid, &error); + setError(error); + + performMethodOnCallbackThread((Object::Method) &IMAPIdleOperation::unprepare, NULL, true); +} + +void IMAPIdleOperation::interruptIdle() +{ + pthread_mutex_lock(&mLock); + mInterrupted = true; + pthread_mutex_unlock(&mLock); + if (mSetupSuccess) { + session()->session()->interruptIdle(); + } +} + diff --git a/src/async/imap/MCIMAPMessageRenderingOperation.cc b/src/async/imap/MCIMAPMessageRenderingOperation.cc deleted file mode 100644 index e30bcd67..00000000 --- a/src/async/imap/MCIMAPMessageRenderingOperation.cc +++ /dev/null @@ -1,76 +0,0 @@ -// -// 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(), false, &error); - } - else if (mRenderingType == IMAPMessageRenderingTypePlainTextBodyAndStripWhitespace) { - mResult = session()->session()->plainTextBodyRendering(mMessage, folder(), true, &error); - } - - MC_SAFE_RETAIN(mResult); - setError(error); -} diff --git a/src/async/imap/MCIMAPMessageRenderingOperation.cpp b/src/async/imap/MCIMAPMessageRenderingOperation.cpp new file mode 100644 index 00000000..e30bcd67 --- /dev/null +++ b/src/async/imap/MCIMAPMessageRenderingOperation.cpp @@ -0,0 +1,76 @@ +// +// 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(), false, &error); + } + else if (mRenderingType == IMAPMessageRenderingTypePlainTextBodyAndStripWhitespace) { + mResult = session()->session()->plainTextBodyRendering(mMessage, folder(), true, &error); + } + + MC_SAFE_RETAIN(mResult); + setError(error); +} diff --git a/src/async/imap/MCIMAPMultiDisconnectOperation.cc b/src/async/imap/MCIMAPMultiDisconnectOperation.cc deleted file mode 100644 index f6d0b180..00000000 --- a/src/async/imap/MCIMAPMultiDisconnectOperation.cc +++ /dev/null @@ -1,58 +0,0 @@ -// -// MCIMAPMultiDisconnectOperation.cc -// mailcore2 -// -// Created by Hoa V. DINH on 11/7/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPMultiDisconnectOperation.h" - -using namespace mailcore; - -IMAPMultiDisconnectOperation::IMAPMultiDisconnectOperation() -{ - _count = 0; - _operations = new Array(); -} - -IMAPMultiDisconnectOperation::~IMAPMultiDisconnectOperation() -{ - MC_SAFE_RELEASE(_operations); -} - -void IMAPMultiDisconnectOperation::addOperation(IMAPOperation * op) -{ - _operations->addObject(op); -} - -void IMAPMultiDisconnectOperation::start() -{ - if (_operations->count() == 0) { - if (callback() != NULL) { - callback()->operationFinished(this); - } - return; - } - - retain(); - mc_foreacharray(IMAPOperation, op, _operations) { -#if __APPLE__ - op->setCallbackDispatchQueue(this->callbackDispatchQueue()); -#endif - op->setCallback(this); - op->start(); - } -} - -void IMAPMultiDisconnectOperation::operationFinished(Operation * op) -{ - _count ++; - if (_count == _operations->count()) { - if (callback() != NULL) { - callback()->operationFinished(this); - } - release(); - } -} - diff --git a/src/async/imap/MCIMAPMultiDisconnectOperation.cpp b/src/async/imap/MCIMAPMultiDisconnectOperation.cpp new file mode 100644 index 00000000..f6d0b180 --- /dev/null +++ b/src/async/imap/MCIMAPMultiDisconnectOperation.cpp @@ -0,0 +1,58 @@ +// +// MCIMAPMultiDisconnectOperation.cc +// mailcore2 +// +// Created by Hoa V. DINH on 11/7/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPMultiDisconnectOperation.h" + +using namespace mailcore; + +IMAPMultiDisconnectOperation::IMAPMultiDisconnectOperation() +{ + _count = 0; + _operations = new Array(); +} + +IMAPMultiDisconnectOperation::~IMAPMultiDisconnectOperation() +{ + MC_SAFE_RELEASE(_operations); +} + +void IMAPMultiDisconnectOperation::addOperation(IMAPOperation * op) +{ + _operations->addObject(op); +} + +void IMAPMultiDisconnectOperation::start() +{ + if (_operations->count() == 0) { + if (callback() != NULL) { + callback()->operationFinished(this); + } + return; + } + + retain(); + mc_foreacharray(IMAPOperation, op, _operations) { +#if __APPLE__ + op->setCallbackDispatchQueue(this->callbackDispatchQueue()); +#endif + op->setCallback(this); + op->start(); + } +} + +void IMAPMultiDisconnectOperation::operationFinished(Operation * op) +{ + _count ++; + if (_count == _operations->count()) { + if (callback() != NULL) { + callback()->operationFinished(this); + } + release(); + } +} + diff --git a/src/async/imap/MCIMAPNoopOperation.cc b/src/async/imap/MCIMAPNoopOperation.cc deleted file mode 100644 index 19a82883..00000000 --- a/src/async/imap/MCIMAPNoopOperation.cc +++ /dev/null @@ -1,29 +0,0 @@ -// -// MCIMAPNoopOperation.cpp -// mailcore2 -// -// Created by Robert Widmann on 9/24/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPNoopOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPNoopOperation::IMAPNoopOperation() -{ -} - -IMAPNoopOperation::~IMAPNoopOperation() -{ -} - -void IMAPNoopOperation::main() -{ - ErrorCode error; - session()->session()->noop(&error); - setError(error); -} diff --git a/src/async/imap/MCIMAPNoopOperation.cpp b/src/async/imap/MCIMAPNoopOperation.cpp new file mode 100644 index 00000000..19a82883 --- /dev/null +++ b/src/async/imap/MCIMAPNoopOperation.cpp @@ -0,0 +1,29 @@ +// +// MCIMAPNoopOperation.cpp +// mailcore2 +// +// Created by Robert Widmann on 9/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPNoopOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPNoopOperation::IMAPNoopOperation() +{ +} + +IMAPNoopOperation::~IMAPNoopOperation() +{ +} + +void IMAPNoopOperation::main() +{ + ErrorCode error; + session()->session()->noop(&error); + setError(error); +} diff --git a/src/async/imap/MCIMAPOperation.cc b/src/async/imap/MCIMAPOperation.cc deleted file mode 100644 index 9ab30ab0..00000000 --- a/src/async/imap/MCIMAPOperation.cc +++ /dev/null @@ -1,185 +0,0 @@ -// -// MCIMAPOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPOperation.h" - -#include - -#include "MCIMAPAsyncSession.h" -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" -#include "MCIMAPOperationCallback.h" - -using namespace mailcore; - -IMAPOperation::IMAPOperation() -{ - mSession = NULL; - mMainSession = NULL; - mImapCallback = NULL; - mError = ErrorNone; - mFolder = NULL; - mUrgent = false; -} - -IMAPOperation::~IMAPOperation() -{ - MC_SAFE_RELEASE(mMainSession); - MC_SAFE_RELEASE(mFolder); - MC_SAFE_RELEASE(mSession); -} - -void IMAPOperation::setSession(IMAPAsyncConnection * session) -{ - MC_SAFE_REPLACE_RETAIN(IMAPAsyncConnection, mSession, session); -#if __APPLE__ - dispatch_queue_t queue; - if (session != NULL) { - queue = session->dispatchQueue(); - } - else { - queue = dispatch_get_main_queue(); - } - setCallbackDispatchQueue(queue); -#endif -} - -IMAPAsyncConnection * IMAPOperation::session() -{ - return mSession; -} - -void IMAPOperation::setMainSession(IMAPAsyncSession * session) -{ - MC_SAFE_REPLACE_RETAIN(IMAPAsyncSession, mMainSession, session); -} - -IMAPAsyncSession * IMAPOperation::mainSession() -{ - return mMainSession; -} - -void IMAPOperation::setFolder(String * folder) -{ - MC_SAFE_REPLACE_COPY(String, mFolder, folder); -} - -String * IMAPOperation::folder() -{ - return mFolder; -} - -void IMAPOperation::setUrgent(bool urgent) -{ - mUrgent = urgent; -} - -bool IMAPOperation::isUrgent() -{ - return mUrgent; -} - -void IMAPOperation::setImapCallback(IMAPOperationCallback * callback) -{ - mImapCallback = callback; -} - -IMAPOperationCallback * IMAPOperation::imapCallback() -{ - return mImapCallback; -} - -void IMAPOperation::setError(ErrorCode error) -{ - mError = error; -} - -ErrorCode IMAPOperation::error() -{ - return mError; -} - -void IMAPOperation::start() -{ - if (session() == NULL) { - IMAPAsyncConnection * connection = mMainSession->sessionForFolder(mFolder, mUrgent); - setSession(connection); - } - mSession->runOperation(this); -} - -struct progressContext { - unsigned int current; - unsigned int maximum; -}; - -void IMAPOperation::bodyProgress(IMAPSession * session, unsigned int current, unsigned int maximum) -{ - if (isCancelled()) - return; - - struct progressContext * context = (struct progressContext *) calloc(sizeof(* context), 1); - context->current = current; - context->maximum = maximum; - retain(); - performMethodOnCallbackThread((Object::Method) &IMAPOperation::bodyProgressOnMainThread, context, true); -} - -void IMAPOperation::bodyProgressOnMainThread(void * ctx) -{ - if (isCancelled()) { - release(); - return; - } - - struct progressContext * context = (struct progressContext *) ctx; - if (mImapCallback != NULL) { - mImapCallback->bodyProgress(this, context->current, context->maximum); - } - free(context); - release(); -} - -void IMAPOperation::itemsProgress(IMAPSession * session, unsigned int current, unsigned int maximum) -{ - if (isCancelled()) - return; - - struct progressContext * context = (struct progressContext *) calloc(sizeof(* context), 1); - context->current = current; - context->maximum = maximum; - retain(); - performMethodOnCallbackThread((Object::Method) &IMAPOperation::itemsProgressOnMainThread, context, true); -} - -void IMAPOperation::itemsProgressOnMainThread(void * ctx) -{ - if (isCancelled()) { - release(); - return; - } - - struct progressContext * context = (struct progressContext *) ctx; - if (mImapCallback != NULL) { - mImapCallback->itemProgress(this, context->current, context->maximum); - } - free(context); - release(); -} - -void IMAPOperation::beforeMain() -{ -} - -void IMAPOperation::afterMain() -{ - if (mSession->session()->isAutomaticConfigurationDone()) { - mSession->owner()->automaticConfigurationDone(mSession->session()); - mSession->session()->resetAutomaticConfigurationDone(); - } -} diff --git a/src/async/imap/MCIMAPOperation.cpp b/src/async/imap/MCIMAPOperation.cpp new file mode 100644 index 00000000..9ab30ab0 --- /dev/null +++ b/src/async/imap/MCIMAPOperation.cpp @@ -0,0 +1,185 @@ +// +// MCIMAPOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPOperation.h" + +#include + +#include "MCIMAPAsyncSession.h" +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" +#include "MCIMAPOperationCallback.h" + +using namespace mailcore; + +IMAPOperation::IMAPOperation() +{ + mSession = NULL; + mMainSession = NULL; + mImapCallback = NULL; + mError = ErrorNone; + mFolder = NULL; + mUrgent = false; +} + +IMAPOperation::~IMAPOperation() +{ + MC_SAFE_RELEASE(mMainSession); + MC_SAFE_RELEASE(mFolder); + MC_SAFE_RELEASE(mSession); +} + +void IMAPOperation::setSession(IMAPAsyncConnection * session) +{ + MC_SAFE_REPLACE_RETAIN(IMAPAsyncConnection, mSession, session); +#if __APPLE__ + dispatch_queue_t queue; + if (session != NULL) { + queue = session->dispatchQueue(); + } + else { + queue = dispatch_get_main_queue(); + } + setCallbackDispatchQueue(queue); +#endif +} + +IMAPAsyncConnection * IMAPOperation::session() +{ + return mSession; +} + +void IMAPOperation::setMainSession(IMAPAsyncSession * session) +{ + MC_SAFE_REPLACE_RETAIN(IMAPAsyncSession, mMainSession, session); +} + +IMAPAsyncSession * IMAPOperation::mainSession() +{ + return mMainSession; +} + +void IMAPOperation::setFolder(String * folder) +{ + MC_SAFE_REPLACE_COPY(String, mFolder, folder); +} + +String * IMAPOperation::folder() +{ + return mFolder; +} + +void IMAPOperation::setUrgent(bool urgent) +{ + mUrgent = urgent; +} + +bool IMAPOperation::isUrgent() +{ + return mUrgent; +} + +void IMAPOperation::setImapCallback(IMAPOperationCallback * callback) +{ + mImapCallback = callback; +} + +IMAPOperationCallback * IMAPOperation::imapCallback() +{ + return mImapCallback; +} + +void IMAPOperation::setError(ErrorCode error) +{ + mError = error; +} + +ErrorCode IMAPOperation::error() +{ + return mError; +} + +void IMAPOperation::start() +{ + if (session() == NULL) { + IMAPAsyncConnection * connection = mMainSession->sessionForFolder(mFolder, mUrgent); + setSession(connection); + } + mSession->runOperation(this); +} + +struct progressContext { + unsigned int current; + unsigned int maximum; +}; + +void IMAPOperation::bodyProgress(IMAPSession * session, unsigned int current, unsigned int maximum) +{ + if (isCancelled()) + return; + + struct progressContext * context = (struct progressContext *) calloc(sizeof(* context), 1); + context->current = current; + context->maximum = maximum; + retain(); + performMethodOnCallbackThread((Object::Method) &IMAPOperation::bodyProgressOnMainThread, context, true); +} + +void IMAPOperation::bodyProgressOnMainThread(void * ctx) +{ + if (isCancelled()) { + release(); + return; + } + + struct progressContext * context = (struct progressContext *) ctx; + if (mImapCallback != NULL) { + mImapCallback->bodyProgress(this, context->current, context->maximum); + } + free(context); + release(); +} + +void IMAPOperation::itemsProgress(IMAPSession * session, unsigned int current, unsigned int maximum) +{ + if (isCancelled()) + return; + + struct progressContext * context = (struct progressContext *) calloc(sizeof(* context), 1); + context->current = current; + context->maximum = maximum; + retain(); + performMethodOnCallbackThread((Object::Method) &IMAPOperation::itemsProgressOnMainThread, context, true); +} + +void IMAPOperation::itemsProgressOnMainThread(void * ctx) +{ + if (isCancelled()) { + release(); + return; + } + + struct progressContext * context = (struct progressContext *) ctx; + if (mImapCallback != NULL) { + mImapCallback->itemProgress(this, context->current, context->maximum); + } + free(context); + release(); +} + +void IMAPOperation::beforeMain() +{ +} + +void IMAPOperation::afterMain() +{ + if (mSession->session()->isAutomaticConfigurationDone()) { + mSession->owner()->automaticConfigurationDone(mSession->session()); + mSession->session()->resetAutomaticConfigurationDone(); + } +} diff --git a/src/async/imap/MCIMAPQuotaOperation.cc b/src/async/imap/MCIMAPQuotaOperation.cc deleted file mode 100644 index 2268a384..00000000 --- a/src/async/imap/MCIMAPQuotaOperation.cc +++ /dev/null @@ -1,47 +0,0 @@ -// -// MCIMAPQuotaOperation.cc -// mailcore2 -// -// Created by Petro Korenev on 8/2/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPQuotaOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPQuotaOperation::IMAPQuotaOperation() -{ - mLimit = 0; - mUsage = 0; -} - -IMAPQuotaOperation::~IMAPQuotaOperation() -{ -} - -uint32_t IMAPQuotaOperation::limit() -{ - return mLimit; -} - -uint32_t IMAPQuotaOperation::usage() -{ - return mUsage; -} - -void IMAPQuotaOperation::main() -{ - ErrorCode error; - session()->session()->loginIfNeeded(&error); - if (error != ErrorNone) { - setError(error); - return; - } - - session()->session()->getQuota(&mUsage, &mLimit, &error); - setError(error); -} diff --git a/src/async/imap/MCIMAPQuotaOperation.cpp b/src/async/imap/MCIMAPQuotaOperation.cpp new file mode 100644 index 00000000..2268a384 --- /dev/null +++ b/src/async/imap/MCIMAPQuotaOperation.cpp @@ -0,0 +1,47 @@ +// +// MCIMAPQuotaOperation.cc +// mailcore2 +// +// Created by Petro Korenev on 8/2/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPQuotaOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPQuotaOperation::IMAPQuotaOperation() +{ + mLimit = 0; + mUsage = 0; +} + +IMAPQuotaOperation::~IMAPQuotaOperation() +{ +} + +uint32_t IMAPQuotaOperation::limit() +{ + return mLimit; +} + +uint32_t IMAPQuotaOperation::usage() +{ + return mUsage; +} + +void IMAPQuotaOperation::main() +{ + ErrorCode error; + session()->session()->loginIfNeeded(&error); + if (error != ErrorNone) { + setError(error); + return; + } + + session()->session()->getQuota(&mUsage, &mLimit, &error); + setError(error); +} diff --git a/src/async/imap/MCIMAPRenameFolderOperation.cc b/src/async/imap/MCIMAPRenameFolderOperation.cc deleted file mode 100644 index 338e02a5..00000000 --- a/src/async/imap/MCIMAPRenameFolderOperation.cc +++ /dev/null @@ -1,42 +0,0 @@ -// -// MCIMAPRenameFolderOperation.cpp -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPRenameFolderOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPRenameFolderOperation::IMAPRenameFolderOperation() -{ - mOtherName = NULL; -} - -IMAPRenameFolderOperation::~IMAPRenameFolderOperation() -{ - MC_SAFE_RELEASE(mOtherName); -} - -void IMAPRenameFolderOperation::setOtherName(String * otherName) -{ - MC_SAFE_REPLACE_COPY(String, mOtherName, otherName); -} - -String * IMAPRenameFolderOperation::otherName() -{ - return mOtherName; -} - -void IMAPRenameFolderOperation::main() -{ - ErrorCode error; - session()->session()->renameFolder(folder(), mOtherName, &error); - setError(error); -} - diff --git a/src/async/imap/MCIMAPRenameFolderOperation.cpp b/src/async/imap/MCIMAPRenameFolderOperation.cpp new file mode 100644 index 00000000..338e02a5 --- /dev/null +++ b/src/async/imap/MCIMAPRenameFolderOperation.cpp @@ -0,0 +1,42 @@ +// +// MCIMAPRenameFolderOperation.cpp +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPRenameFolderOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPRenameFolderOperation::IMAPRenameFolderOperation() +{ + mOtherName = NULL; +} + +IMAPRenameFolderOperation::~IMAPRenameFolderOperation() +{ + MC_SAFE_RELEASE(mOtherName); +} + +void IMAPRenameFolderOperation::setOtherName(String * otherName) +{ + MC_SAFE_REPLACE_COPY(String, mOtherName, otherName); +} + +String * IMAPRenameFolderOperation::otherName() +{ + return mOtherName; +} + +void IMAPRenameFolderOperation::main() +{ + ErrorCode error; + session()->session()->renameFolder(folder(), mOtherName, &error); + setError(error); +} + diff --git a/src/async/imap/MCIMAPSearchOperation.cc b/src/async/imap/MCIMAPSearchOperation.cc deleted file mode 100644 index 6db73f8c..00000000 --- a/src/async/imap/MCIMAPSearchOperation.cc +++ /dev/null @@ -1,79 +0,0 @@ -// -// IMAPSearchOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPSearchOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" -#include "MCIMAPSearchExpression.h" - -using namespace mailcore; - -IMAPSearchOperation::IMAPSearchOperation() -{ - mKind = IMAPSearchKindNone; - mSearchString = NULL; - mExpression = NULL; - mUids = NULL; -} - -IMAPSearchOperation::~IMAPSearchOperation() -{ - MC_SAFE_RELEASE(mSearchString); - MC_SAFE_RELEASE(mExpression); - MC_SAFE_RELEASE(mUids); -} - -void IMAPSearchOperation::setSearchKind(IMAPSearchKind kind) -{ - mKind = kind; -} - -IMAPSearchKind IMAPSearchOperation::searchKind() -{ - return mKind; -} - -void IMAPSearchOperation::setSearchString(String * searchString) -{ - MC_SAFE_REPLACE_COPY(String, mSearchString, searchString); -} - -String * IMAPSearchOperation::searchString() -{ - return mSearchString; -} - -void IMAPSearchOperation::setSearchExpression(IMAPSearchExpression * expression) -{ - MC_SAFE_REPLACE_RETAIN(IMAPSearchExpression, mExpression, expression); -} - -IMAPSearchExpression * IMAPSearchOperation::searchExpression() -{ - return mExpression; -} - -IndexSet * IMAPSearchOperation::uids() -{ - return mUids; -} - -void IMAPSearchOperation::main() -{ - ErrorCode error; - if (mExpression != NULL) { - mUids = session()->session()->search(folder(), mExpression, &error); - } - else { - mUids = session()->session()->search(folder(), mKind, mSearchString, &error); - } - MC_SAFE_RETAIN(mUids); - setError(error); -} - diff --git a/src/async/imap/MCIMAPSearchOperation.cpp b/src/async/imap/MCIMAPSearchOperation.cpp new file mode 100644 index 00000000..6db73f8c --- /dev/null +++ b/src/async/imap/MCIMAPSearchOperation.cpp @@ -0,0 +1,79 @@ +// +// IMAPSearchOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPSearchOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" +#include "MCIMAPSearchExpression.h" + +using namespace mailcore; + +IMAPSearchOperation::IMAPSearchOperation() +{ + mKind = IMAPSearchKindNone; + mSearchString = NULL; + mExpression = NULL; + mUids = NULL; +} + +IMAPSearchOperation::~IMAPSearchOperation() +{ + MC_SAFE_RELEASE(mSearchString); + MC_SAFE_RELEASE(mExpression); + MC_SAFE_RELEASE(mUids); +} + +void IMAPSearchOperation::setSearchKind(IMAPSearchKind kind) +{ + mKind = kind; +} + +IMAPSearchKind IMAPSearchOperation::searchKind() +{ + return mKind; +} + +void IMAPSearchOperation::setSearchString(String * searchString) +{ + MC_SAFE_REPLACE_COPY(String, mSearchString, searchString); +} + +String * IMAPSearchOperation::searchString() +{ + return mSearchString; +} + +void IMAPSearchOperation::setSearchExpression(IMAPSearchExpression * expression) +{ + MC_SAFE_REPLACE_RETAIN(IMAPSearchExpression, mExpression, expression); +} + +IMAPSearchExpression * IMAPSearchOperation::searchExpression() +{ + return mExpression; +} + +IndexSet * IMAPSearchOperation::uids() +{ + return mUids; +} + +void IMAPSearchOperation::main() +{ + ErrorCode error; + if (mExpression != NULL) { + mUids = session()->session()->search(folder(), mExpression, &error); + } + else { + mUids = session()->session()->search(folder(), mKind, mSearchString, &error); + } + MC_SAFE_RETAIN(mUids); + setError(error); +} + diff --git a/src/async/imap/MCIMAPStoreFlagsOperation.cc b/src/async/imap/MCIMAPStoreFlagsOperation.cc deleted file mode 100644 index a049333e..00000000 --- a/src/async/imap/MCIMAPStoreFlagsOperation.cc +++ /dev/null @@ -1,92 +0,0 @@ -// -// MCIMAPStoreFlagsOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPStoreFlagsOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPStoreFlagsOperation::IMAPStoreFlagsOperation() -{ - mUids = NULL; - mNumbers = NULL; - mKind = IMAPStoreFlagsRequestKindAdd; - mFlags = MessageFlagNone; - mCustomFlags = NULL; -} - -IMAPStoreFlagsOperation::~IMAPStoreFlagsOperation() -{ - MC_SAFE_RELEASE(mNumbers); - MC_SAFE_RELEASE(mUids); - MC_SAFE_RELEASE(mCustomFlags); -} - -void IMAPStoreFlagsOperation::setUids(IndexSet * uids) -{ - MC_SAFE_REPLACE_RETAIN(IndexSet, mUids, uids); -} - -IndexSet * IMAPStoreFlagsOperation::uids() -{ - return mUids; -} - -void IMAPStoreFlagsOperation::setNumbers(IndexSet * numbers) -{ - MC_SAFE_REPLACE_RETAIN(IndexSet, mNumbers, numbers); -} - -IndexSet * IMAPStoreFlagsOperation::numbers() -{ - return mNumbers; -} - -void IMAPStoreFlagsOperation::setKind(IMAPStoreFlagsRequestKind kind) -{ - mKind = kind; -} - -IMAPStoreFlagsRequestKind IMAPStoreFlagsOperation::kind() -{ - return mKind; -} - -void IMAPStoreFlagsOperation::setFlags(MessageFlag flags) -{ - mFlags = flags; -} - -MessageFlag IMAPStoreFlagsOperation::flags() -{ - return mFlags; -} - -void IMAPStoreFlagsOperation::setCustomFlags(Array * customFlags) -{ - MC_SAFE_REPLACE_RETAIN(Array, mCustomFlags, customFlags); -} - -Array * IMAPStoreFlagsOperation::customFlags() -{ - return mCustomFlags; -} - -void IMAPStoreFlagsOperation::main() -{ - ErrorCode error; - if (mUids != NULL) { - session()->session()->storeFlagsAndCustomFlagsByUID(folder(), mUids, mKind, mFlags, mCustomFlags, &error); - } - else { - session()->session()->storeFlagsAndCustomFlagsByNumber(folder(), mNumbers, mKind, mFlags, mCustomFlags, &error); - } - setError(error); -} diff --git a/src/async/imap/MCIMAPStoreFlagsOperation.cpp b/src/async/imap/MCIMAPStoreFlagsOperation.cpp new file mode 100644 index 00000000..a049333e --- /dev/null +++ b/src/async/imap/MCIMAPStoreFlagsOperation.cpp @@ -0,0 +1,92 @@ +// +// MCIMAPStoreFlagsOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPStoreFlagsOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPStoreFlagsOperation::IMAPStoreFlagsOperation() +{ + mUids = NULL; + mNumbers = NULL; + mKind = IMAPStoreFlagsRequestKindAdd; + mFlags = MessageFlagNone; + mCustomFlags = NULL; +} + +IMAPStoreFlagsOperation::~IMAPStoreFlagsOperation() +{ + MC_SAFE_RELEASE(mNumbers); + MC_SAFE_RELEASE(mUids); + MC_SAFE_RELEASE(mCustomFlags); +} + +void IMAPStoreFlagsOperation::setUids(IndexSet * uids) +{ + MC_SAFE_REPLACE_RETAIN(IndexSet, mUids, uids); +} + +IndexSet * IMAPStoreFlagsOperation::uids() +{ + return mUids; +} + +void IMAPStoreFlagsOperation::setNumbers(IndexSet * numbers) +{ + MC_SAFE_REPLACE_RETAIN(IndexSet, mNumbers, numbers); +} + +IndexSet * IMAPStoreFlagsOperation::numbers() +{ + return mNumbers; +} + +void IMAPStoreFlagsOperation::setKind(IMAPStoreFlagsRequestKind kind) +{ + mKind = kind; +} + +IMAPStoreFlagsRequestKind IMAPStoreFlagsOperation::kind() +{ + return mKind; +} + +void IMAPStoreFlagsOperation::setFlags(MessageFlag flags) +{ + mFlags = flags; +} + +MessageFlag IMAPStoreFlagsOperation::flags() +{ + return mFlags; +} + +void IMAPStoreFlagsOperation::setCustomFlags(Array * customFlags) +{ + MC_SAFE_REPLACE_RETAIN(Array, mCustomFlags, customFlags); +} + +Array * IMAPStoreFlagsOperation::customFlags() +{ + return mCustomFlags; +} + +void IMAPStoreFlagsOperation::main() +{ + ErrorCode error; + if (mUids != NULL) { + session()->session()->storeFlagsAndCustomFlagsByUID(folder(), mUids, mKind, mFlags, mCustomFlags, &error); + } + else { + session()->session()->storeFlagsAndCustomFlagsByNumber(folder(), mNumbers, mKind, mFlags, mCustomFlags, &error); + } + setError(error); +} diff --git a/src/async/imap/MCIMAPStoreLabelsOperation.cc b/src/async/imap/MCIMAPStoreLabelsOperation.cc deleted file mode 100644 index 3ad2212a..00000000 --- a/src/async/imap/MCIMAPStoreLabelsOperation.cc +++ /dev/null @@ -1,82 +0,0 @@ -// -// MCIMAPStoreLabelsOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPStoreLabelsOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPStoreLabelsOperation::IMAPStoreLabelsOperation() -{ - mUids = NULL; - mNumbers = NULL; - mKind = IMAPStoreFlagsRequestKindAdd; - mLabels = NULL; -} - -IMAPStoreLabelsOperation::~IMAPStoreLabelsOperation() -{ - MC_SAFE_RELEASE(mNumbers); - MC_SAFE_RELEASE(mUids); - MC_SAFE_RELEASE(mLabels); -} - -void IMAPStoreLabelsOperation::setUids(IndexSet * uids) -{ - MC_SAFE_REPLACE_RETAIN(IndexSet, mUids, uids); -} - -IndexSet * IMAPStoreLabelsOperation::uids() -{ - return mUids; -} - -void IMAPStoreLabelsOperation::setNumbers(IndexSet * numbers) -{ - MC_SAFE_REPLACE_RETAIN(IndexSet, mNumbers, numbers); -} - -IndexSet * IMAPStoreLabelsOperation::numbers() -{ - return mNumbers; -} - -void IMAPStoreLabelsOperation::setKind(IMAPStoreFlagsRequestKind kind) -{ - mKind = kind; -} - -IMAPStoreFlagsRequestKind IMAPStoreLabelsOperation::kind() -{ - return mKind; -} - -void IMAPStoreLabelsOperation::setLabels(Array * labels) -{ - MC_SAFE_REPLACE_RETAIN(Array, mLabels, labels); -} - -Array * IMAPStoreLabelsOperation::labels() -{ - return mLabels; -} - -void IMAPStoreLabelsOperation::main() -{ - ErrorCode error; - if (mUids != NULL) { - session()->session()->storeLabelsByUID(folder(), mUids, mKind, mLabels, &error); - } - else { - session()->session()->storeLabelsByNumber(folder(), mUids, mKind, mLabels, &error); - } - setError(error); -} - diff --git a/src/async/imap/MCIMAPStoreLabelsOperation.cpp b/src/async/imap/MCIMAPStoreLabelsOperation.cpp new file mode 100644 index 00000000..3ad2212a --- /dev/null +++ b/src/async/imap/MCIMAPStoreLabelsOperation.cpp @@ -0,0 +1,82 @@ +// +// MCIMAPStoreLabelsOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPStoreLabelsOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPStoreLabelsOperation::IMAPStoreLabelsOperation() +{ + mUids = NULL; + mNumbers = NULL; + mKind = IMAPStoreFlagsRequestKindAdd; + mLabels = NULL; +} + +IMAPStoreLabelsOperation::~IMAPStoreLabelsOperation() +{ + MC_SAFE_RELEASE(mNumbers); + MC_SAFE_RELEASE(mUids); + MC_SAFE_RELEASE(mLabels); +} + +void IMAPStoreLabelsOperation::setUids(IndexSet * uids) +{ + MC_SAFE_REPLACE_RETAIN(IndexSet, mUids, uids); +} + +IndexSet * IMAPStoreLabelsOperation::uids() +{ + return mUids; +} + +void IMAPStoreLabelsOperation::setNumbers(IndexSet * numbers) +{ + MC_SAFE_REPLACE_RETAIN(IndexSet, mNumbers, numbers); +} + +IndexSet * IMAPStoreLabelsOperation::numbers() +{ + return mNumbers; +} + +void IMAPStoreLabelsOperation::setKind(IMAPStoreFlagsRequestKind kind) +{ + mKind = kind; +} + +IMAPStoreFlagsRequestKind IMAPStoreLabelsOperation::kind() +{ + return mKind; +} + +void IMAPStoreLabelsOperation::setLabels(Array * labels) +{ + MC_SAFE_REPLACE_RETAIN(Array, mLabels, labels); +} + +Array * IMAPStoreLabelsOperation::labels() +{ + return mLabels; +} + +void IMAPStoreLabelsOperation::main() +{ + ErrorCode error; + if (mUids != NULL) { + session()->session()->storeLabelsByUID(folder(), mUids, mKind, mLabels, &error); + } + else { + session()->session()->storeLabelsByNumber(folder(), mUids, mKind, mLabels, &error); + } + setError(error); +} + diff --git a/src/async/imap/MCIMAPSubscribeFolderOperation.cc b/src/async/imap/MCIMAPSubscribeFolderOperation.cc deleted file mode 100644 index 1eedad29..00000000 --- a/src/async/imap/MCIMAPSubscribeFolderOperation.cc +++ /dev/null @@ -1,45 +0,0 @@ -// -// MCIMAPSubscribeFolderOperation.cpp -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCIMAPSubscribeFolderOperation.h" - -#include "MCIMAPSession.h" -#include "MCIMAPAsyncConnection.h" - -using namespace mailcore; - -IMAPSubscribeFolderOperation::IMAPSubscribeFolderOperation() -{ - mUnsubscribeEnabled = false; -} - -IMAPSubscribeFolderOperation::~IMAPSubscribeFolderOperation() -{ -} - -void IMAPSubscribeFolderOperation::setUnsubscribeEnabled(bool enabled) -{ - mUnsubscribeEnabled = enabled; -} - -bool IMAPSubscribeFolderOperation::isUnsubscribeEnabled() -{ - return mUnsubscribeEnabled; -} - -void IMAPSubscribeFolderOperation::main() -{ - ErrorCode error; - if (mUnsubscribeEnabled) { - session()->session()->unsubscribeFolder(folder(), &error); - } - else { - session()->session()->subscribeFolder(folder(), &error); - } - setError(error); -} diff --git a/src/async/imap/MCIMAPSubscribeFolderOperation.cpp b/src/async/imap/MCIMAPSubscribeFolderOperation.cpp new file mode 100644 index 00000000..1eedad29 --- /dev/null +++ b/src/async/imap/MCIMAPSubscribeFolderOperation.cpp @@ -0,0 +1,45 @@ +// +// MCIMAPSubscribeFolderOperation.cpp +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPSubscribeFolderOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPSubscribeFolderOperation::IMAPSubscribeFolderOperation() +{ + mUnsubscribeEnabled = false; +} + +IMAPSubscribeFolderOperation::~IMAPSubscribeFolderOperation() +{ +} + +void IMAPSubscribeFolderOperation::setUnsubscribeEnabled(bool enabled) +{ + mUnsubscribeEnabled = enabled; +} + +bool IMAPSubscribeFolderOperation::isUnsubscribeEnabled() +{ + return mUnsubscribeEnabled; +} + +void IMAPSubscribeFolderOperation::main() +{ + ErrorCode error; + if (mUnsubscribeEnabled) { + session()->session()->unsubscribeFolder(folder(), &error); + } + else { + session()->session()->subscribeFolder(folder(), &error); + } + setError(error); +} diff --git a/src/async/nntp/MCNNTPAsyncSession.cc b/src/async/nntp/MCNNTPAsyncSession.cc deleted file mode 100644 index a78a70b4..00000000 --- a/src/async/nntp/MCNNTPAsyncSession.cc +++ /dev/null @@ -1,302 +0,0 @@ -// -// MCNNTPAsyncSession.cpp -// mailcore2 -// -// Created by Robert Widmann on 8/13/14. -// Copyright (c) 2014 MailCore. All rights reserved. -// - -#include "MCNNTPAsyncSession.h" - -#include "MCNNTP.h" -#include "MCNNTPFetchHeaderOperation.h" -#include "MCNNTPFetchArticleOperation.h" -#include "MCNNTPFetchAllArticlesOperation.h" -#include "MCNNTPListNewsgroupsOperation.h" -#include "MCNNTPFetchOverviewOperation.h" -#include "MCNNTPCheckAccountOperation.h" -#include "MCNNTPFetchServerTimeOperation.h" -#include "MCNNTPDisconnectOperation.h" -#include "MCOperationQueueCallback.h" -#include "MCConnectionLogger.h" - -using namespace mailcore; - -namespace mailcore { - class NNTPOperationQueueCallback : public Object, public OperationQueueCallback { - public: - NNTPOperationQueueCallback(NNTPAsyncSession * session) { - mSession = session; - } - - virtual ~NNTPOperationQueueCallback() { - } - - virtual void queueStartRunning() { - mSession->retain(); - } - - virtual void queueStoppedRunning() { - mSession->release(); - } - - private: - NNTPAsyncSession * mSession; - }; - - class NNTPConnectionLogger : public Object, public ConnectionLogger { - public: - NNTPConnectionLogger(NNTPAsyncSession * session) { - mSession = session; - } - - virtual ~NNTPConnectionLogger() { - } - - virtual void log(void * sender, ConnectionLogType logType, Data * buffer) - { - mSession->logConnection(logType, buffer); - } - - private: - NNTPAsyncSession * mSession; - }; - -} - -NNTPAsyncSession::NNTPAsyncSession() -{ - mSession = new NNTPSession(); - mQueue = new OperationQueue(); - mQueueCallback = new NNTPOperationQueueCallback(this); - mQueue->setCallback(mQueueCallback); - mConnectionLogger = NULL; - pthread_mutex_init(&mConnectionLoggerLock, NULL); - mInternalLogger = new NNTPConnectionLogger(this); - mSession->setConnectionLogger(mInternalLogger); -} - -NNTPAsyncSession::~NNTPAsyncSession() -{ - MC_SAFE_RELEASE(mInternalLogger); - pthread_mutex_destroy(&mConnectionLoggerLock); - MC_SAFE_RELEASE(mQueueCallback); - MC_SAFE_RELEASE(mSession); - MC_SAFE_RELEASE(mQueue); -} - -void NNTPAsyncSession::setHostname(String * hostname) -{ - mSession->setHostname(hostname); -} - -String * NNTPAsyncSession::hostname() -{ - return mSession->hostname(); -} - -void NNTPAsyncSession::setPort(unsigned int port) -{ - mSession->setPort(port); -} - -unsigned int NNTPAsyncSession::port() -{ - return mSession->port(); -} - -void NNTPAsyncSession::setUsername(String * username) -{ - mSession->setUsername(username); -} - -String * NNTPAsyncSession::username() -{ - return mSession->username(); -} - -void NNTPAsyncSession::setPassword(String * password) -{ - mSession->setPassword(password); -} - -String * NNTPAsyncSession::password() -{ - return mSession->password(); -} - -void NNTPAsyncSession::setConnectionType(ConnectionType connectionType) -{ - mSession->setConnectionType(connectionType); -} - -ConnectionType NNTPAsyncSession::connectionType() -{ - return mSession->connectionType(); -} - -void NNTPAsyncSession::setTimeout(time_t timeout) -{ - mSession->setTimeout(timeout); -} - -time_t NNTPAsyncSession::timeout() -{ - return mSession->timeout(); -} - -void NNTPAsyncSession::setCheckCertificateEnabled(bool enabled) -{ - mSession->setCheckCertificateEnabled(enabled); -} - -bool NNTPAsyncSession::isCheckCertificateEnabled() -{ - return mSession->isCheckCertificateEnabled(); -} - -NNTPFetchAllArticlesOperation * NNTPAsyncSession::fetchAllArticlesOperation(String * group) -{ - NNTPFetchAllArticlesOperation * op = new NNTPFetchAllArticlesOperation(); - op->setSession(this); - op->setGroupName(group); - op->autorelease(); - return op; -} - -NNTPFetchHeaderOperation * NNTPAsyncSession::fetchHeaderOperation(String * groupName, unsigned int index) -{ - NNTPFetchHeaderOperation * op = new NNTPFetchHeaderOperation(); - op->setSession(this); - op->setGroupName(groupName); - op->setMessageIndex(index); - op->autorelease(); - return op; -} - -NNTPFetchArticleOperation * NNTPAsyncSession::fetchArticleOperation(String * groupName, unsigned int index) -{ - NNTPFetchArticleOperation * op = new NNTPFetchArticleOperation(); - op->setSession(this); - op->setGroupName(groupName); - op->setMessageIndex(index); - op->autorelease(); - return op; -} - -NNTPFetchArticleOperation * NNTPAsyncSession::fetchArticleByMessageIDOperation(String *groupName, String *messageID) -{ - NNTPFetchArticleOperation * op = new NNTPFetchArticleOperation(); - op->setSession(this); - op->setGroupName(groupName); - op->setMessageID(messageID); - op->autorelease(); - return op; -} - -NNTPFetchOverviewOperation * NNTPAsyncSession::fetchOverviewOperationWithIndexes(String * groupName, IndexSet * indexes) -{ - NNTPFetchOverviewOperation * op = new NNTPFetchOverviewOperation(); - op->setSession(this); - op->setGroupName(groupName); - op->setIndexes(indexes); - op->autorelease(); - return op; -} - -NNTPFetchServerTimeOperation * NNTPAsyncSession::fetchServerDateOperation() -{ - NNTPFetchServerTimeOperation * op = new NNTPFetchServerTimeOperation(); - op->setSession(this); - op->autorelease(); - return op; -} - -NNTPListNewsgroupsOperation * NNTPAsyncSession::listAllNewsgroupsOperation() -{ - NNTPListNewsgroupsOperation * op = new NNTPListNewsgroupsOperation(); - op->setSession(this); - op->setListsSubscribed(false); - op->autorelease(); - return op; -} - -NNTPListNewsgroupsOperation * NNTPAsyncSession::listDefaultNewsgroupsOperation() -{ - NNTPListNewsgroupsOperation * op = new NNTPListNewsgroupsOperation(); - op->setSession(this); - op->setListsSubscribed(true); - op->autorelease(); - return op; -} - -NNTPOperation * NNTPAsyncSession::disconnectOperation() -{ - NNTPDisconnectOperation * op = new NNTPDisconnectOperation(); - op->setSession(this); - op->autorelease(); - return op; -} - -NNTPOperation * NNTPAsyncSession::checkAccountOperation() -{ - NNTPCheckAccountOperation * op = new NNTPCheckAccountOperation(); - op->setSession(this); - op->autorelease(); - return op; -} - -NNTPSession * NNTPAsyncSession::session() -{ - return mSession; -} - -void NNTPAsyncSession::runOperation(NNTPOperation * operation) -{ - mQueue->addOperation(operation); -} - -void NNTPAsyncSession::setConnectionLogger(ConnectionLogger * logger) -{ - pthread_mutex_lock(&mConnectionLoggerLock); - mConnectionLogger = logger; - if (mConnectionLogger != NULL) { - mSession->setConnectionLogger(mInternalLogger); - } - else { - mSession->setConnectionLogger(NULL); - } - pthread_mutex_unlock(&mConnectionLoggerLock); -} - -ConnectionLogger * NNTPAsyncSession::connectionLogger() -{ - ConnectionLogger * result; - - pthread_mutex_lock(&mConnectionLoggerLock); - result = mConnectionLogger; - pthread_mutex_unlock(&mConnectionLoggerLock); - - return result; -} - -void NNTPAsyncSession::logConnection(ConnectionLogType logType, Data * buffer) -{ - pthread_mutex_lock(&mConnectionLoggerLock); - if (mConnectionLogger != NULL) { - mConnectionLogger->log(this, logType, buffer); - } - pthread_mutex_unlock(&mConnectionLoggerLock); -} - -#if __APPLE__ -void NNTPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue) -{ - mQueue->setDispatchQueue(dispatchQueue); -} - -dispatch_queue_t NNTPAsyncSession::dispatchQueue() -{ - return mQueue->dispatchQueue(); -} -#endif diff --git a/src/async/nntp/MCNNTPAsyncSession.cpp b/src/async/nntp/MCNNTPAsyncSession.cpp new file mode 100644 index 00000000..a78a70b4 --- /dev/null +++ b/src/async/nntp/MCNNTPAsyncSession.cpp @@ -0,0 +1,302 @@ +// +// MCNNTPAsyncSession.cpp +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCNNTPAsyncSession.h" + +#include "MCNNTP.h" +#include "MCNNTPFetchHeaderOperation.h" +#include "MCNNTPFetchArticleOperation.h" +#include "MCNNTPFetchAllArticlesOperation.h" +#include "MCNNTPListNewsgroupsOperation.h" +#include "MCNNTPFetchOverviewOperation.h" +#include "MCNNTPCheckAccountOperation.h" +#include "MCNNTPFetchServerTimeOperation.h" +#include "MCNNTPDisconnectOperation.h" +#include "MCOperationQueueCallback.h" +#include "MCConnectionLogger.h" + +using namespace mailcore; + +namespace mailcore { + class NNTPOperationQueueCallback : public Object, public OperationQueueCallback { + public: + NNTPOperationQueueCallback(NNTPAsyncSession * session) { + mSession = session; + } + + virtual ~NNTPOperationQueueCallback() { + } + + virtual void queueStartRunning() { + mSession->retain(); + } + + virtual void queueStoppedRunning() { + mSession->release(); + } + + private: + NNTPAsyncSession * mSession; + }; + + class NNTPConnectionLogger : public Object, public ConnectionLogger { + public: + NNTPConnectionLogger(NNTPAsyncSession * session) { + mSession = session; + } + + virtual ~NNTPConnectionLogger() { + } + + virtual void log(void * sender, ConnectionLogType logType, Data * buffer) + { + mSession->logConnection(logType, buffer); + } + + private: + NNTPAsyncSession * mSession; + }; + +} + +NNTPAsyncSession::NNTPAsyncSession() +{ + mSession = new NNTPSession(); + mQueue = new OperationQueue(); + mQueueCallback = new NNTPOperationQueueCallback(this); + mQueue->setCallback(mQueueCallback); + mConnectionLogger = NULL; + pthread_mutex_init(&mConnectionLoggerLock, NULL); + mInternalLogger = new NNTPConnectionLogger(this); + mSession->setConnectionLogger(mInternalLogger); +} + +NNTPAsyncSession::~NNTPAsyncSession() +{ + MC_SAFE_RELEASE(mInternalLogger); + pthread_mutex_destroy(&mConnectionLoggerLock); + MC_SAFE_RELEASE(mQueueCallback); + MC_SAFE_RELEASE(mSession); + MC_SAFE_RELEASE(mQueue); +} + +void NNTPAsyncSession::setHostname(String * hostname) +{ + mSession->setHostname(hostname); +} + +String * NNTPAsyncSession::hostname() +{ + return mSession->hostname(); +} + +void NNTPAsyncSession::setPort(unsigned int port) +{ + mSession->setPort(port); +} + +unsigned int NNTPAsyncSession::port() +{ + return mSession->port(); +} + +void NNTPAsyncSession::setUsername(String * username) +{ + mSession->setUsername(username); +} + +String * NNTPAsyncSession::username() +{ + return mSession->username(); +} + +void NNTPAsyncSession::setPassword(String * password) +{ + mSession->setPassword(password); +} + +String * NNTPAsyncSession::password() +{ + return mSession->password(); +} + +void NNTPAsyncSession::setConnectionType(ConnectionType connectionType) +{ + mSession->setConnectionType(connectionType); +} + +ConnectionType NNTPAsyncSession::connectionType() +{ + return mSession->connectionType(); +} + +void NNTPAsyncSession::setTimeout(time_t timeout) +{ + mSession->setTimeout(timeout); +} + +time_t NNTPAsyncSession::timeout() +{ + return mSession->timeout(); +} + +void NNTPAsyncSession::setCheckCertificateEnabled(bool enabled) +{ + mSession->setCheckCertificateEnabled(enabled); +} + +bool NNTPAsyncSession::isCheckCertificateEnabled() +{ + return mSession->isCheckCertificateEnabled(); +} + +NNTPFetchAllArticlesOperation * NNTPAsyncSession::fetchAllArticlesOperation(String * group) +{ + NNTPFetchAllArticlesOperation * op = new NNTPFetchAllArticlesOperation(); + op->setSession(this); + op->setGroupName(group); + op->autorelease(); + return op; +} + +NNTPFetchHeaderOperation * NNTPAsyncSession::fetchHeaderOperation(String * groupName, unsigned int index) +{ + NNTPFetchHeaderOperation * op = new NNTPFetchHeaderOperation(); + op->setSession(this); + op->setGroupName(groupName); + op->setMessageIndex(index); + op->autorelease(); + return op; +} + +NNTPFetchArticleOperation * NNTPAsyncSession::fetchArticleOperation(String * groupName, unsigned int index) +{ + NNTPFetchArticleOperation * op = new NNTPFetchArticleOperation(); + op->setSession(this); + op->setGroupName(groupName); + op->setMessageIndex(index); + op->autorelease(); + return op; +} + +NNTPFetchArticleOperation * NNTPAsyncSession::fetchArticleByMessageIDOperation(String *groupName, String *messageID) +{ + NNTPFetchArticleOperation * op = new NNTPFetchArticleOperation(); + op->setSession(this); + op->setGroupName(groupName); + op->setMessageID(messageID); + op->autorelease(); + return op; +} + +NNTPFetchOverviewOperation * NNTPAsyncSession::fetchOverviewOperationWithIndexes(String * groupName, IndexSet * indexes) +{ + NNTPFetchOverviewOperation * op = new NNTPFetchOverviewOperation(); + op->setSession(this); + op->setGroupName(groupName); + op->setIndexes(indexes); + op->autorelease(); + return op; +} + +NNTPFetchServerTimeOperation * NNTPAsyncSession::fetchServerDateOperation() +{ + NNTPFetchServerTimeOperation * op = new NNTPFetchServerTimeOperation(); + op->setSession(this); + op->autorelease(); + return op; +} + +NNTPListNewsgroupsOperation * NNTPAsyncSession::listAllNewsgroupsOperation() +{ + NNTPListNewsgroupsOperation * op = new NNTPListNewsgroupsOperation(); + op->setSession(this); + op->setListsSubscribed(false); + op->autorelease(); + return op; +} + +NNTPListNewsgroupsOperation * NNTPAsyncSession::listDefaultNewsgroupsOperation() +{ + NNTPListNewsgroupsOperation * op = new NNTPListNewsgroupsOperation(); + op->setSession(this); + op->setListsSubscribed(true); + op->autorelease(); + return op; +} + +NNTPOperation * NNTPAsyncSession::disconnectOperation() +{ + NNTPDisconnectOperation * op = new NNTPDisconnectOperation(); + op->setSession(this); + op->autorelease(); + return op; +} + +NNTPOperation * NNTPAsyncSession::checkAccountOperation() +{ + NNTPCheckAccountOperation * op = new NNTPCheckAccountOperation(); + op->setSession(this); + op->autorelease(); + return op; +} + +NNTPSession * NNTPAsyncSession::session() +{ + return mSession; +} + +void NNTPAsyncSession::runOperation(NNTPOperation * operation) +{ + mQueue->addOperation(operation); +} + +void NNTPAsyncSession::setConnectionLogger(ConnectionLogger * logger) +{ + pthread_mutex_lock(&mConnectionLoggerLock); + mConnectionLogger = logger; + if (mConnectionLogger != NULL) { + mSession->setConnectionLogger(mInternalLogger); + } + else { + mSession->setConnectionLogger(NULL); + } + pthread_mutex_unlock(&mConnectionLoggerLock); +} + +ConnectionLogger * NNTPAsyncSession::connectionLogger() +{ + ConnectionLogger * result; + + pthread_mutex_lock(&mConnectionLoggerLock); + result = mConnectionLogger; + pthread_mutex_unlock(&mConnectionLoggerLock); + + return result; +} + +void NNTPAsyncSession::logConnection(ConnectionLogType logType, Data * buffer) +{ + pthread_mutex_lock(&mConnectionLoggerLock); + if (mConnectionLogger != NULL) { + mConnectionLogger->log(this, logType, buffer); + } + pthread_mutex_unlock(&mConnectionLoggerLock); +} + +#if __APPLE__ +void NNTPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue) +{ + mQueue->setDispatchQueue(dispatchQueue); +} + +dispatch_queue_t NNTPAsyncSession::dispatchQueue() +{ + return mQueue->dispatchQueue(); +} +#endif diff --git a/src/async/nntp/MCNNTPCheckAccountOperation.cc b/src/async/nntp/MCNNTPCheckAccountOperation.cc deleted file mode 100644 index 29b050f0..00000000 --- a/src/async/nntp/MCNNTPCheckAccountOperation.cc +++ /dev/null @@ -1,30 +0,0 @@ -// -// MCNNTPCheckAccountOperation.cpp -// mailcore2 -// -// Created by Robert Widmann on 8/13/14. -// Copyright (c) 2014 MailCore. All rights reserved. -// - -#include "MCNNTPCheckAccountOperation.h" - -#include "MCNNTPAsyncSession.h" -#include "MCNNTPSession.h" - -using namespace mailcore; - -NNTPCheckAccountOperation::NNTPCheckAccountOperation() -{ -} - -NNTPCheckAccountOperation::~NNTPCheckAccountOperation() -{ -} - -void NNTPCheckAccountOperation::main() -{ - ErrorCode error; - - session()->session()->checkAccount(&error); - setError(error); -} diff --git a/src/async/nntp/MCNNTPCheckAccountOperation.cpp b/src/async/nntp/MCNNTPCheckAccountOperation.cpp new file mode 100644 index 00000000..29b050f0 --- /dev/null +++ b/src/async/nntp/MCNNTPCheckAccountOperation.cpp @@ -0,0 +1,30 @@ +// +// MCNNTPCheckAccountOperation.cpp +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCNNTPCheckAccountOperation.h" + +#include "MCNNTPAsyncSession.h" +#include "MCNNTPSession.h" + +using namespace mailcore; + +NNTPCheckAccountOperation::NNTPCheckAccountOperation() +{ +} + +NNTPCheckAccountOperation::~NNTPCheckAccountOperation() +{ +} + +void NNTPCheckAccountOperation::main() +{ + ErrorCode error; + + session()->session()->checkAccount(&error); + setError(error); +} diff --git a/src/async/nntp/MCNNTPDisconnectOperation.cc b/src/async/nntp/MCNNTPDisconnectOperation.cc deleted file mode 100644 index d269904a..00000000 --- a/src/async/nntp/MCNNTPDisconnectOperation.cc +++ /dev/null @@ -1,30 +0,0 @@ -// -// MCNNTPDisconnectOperation.cpp -// mailcore2 -// -// Created by Robert Widmann on 8/13/14. -// Copyright (c) 2014 MailCore. All rights reserved. -// - -#include "MCNNTPDisconnectOperation.h" - -#include "MCNNTPAsyncSession.h" -#include "MCNNTPSession.h" - -using namespace mailcore; - -NNTPDisconnectOperation::NNTPDisconnectOperation() -{ -} - -NNTPDisconnectOperation::~NNTPDisconnectOperation() -{ -} - -void NNTPDisconnectOperation::main() -{ - ErrorCode error; - - session()->session()->checkAccount(&error); - setError(error); -} diff --git a/src/async/nntp/MCNNTPDisconnectOperation.cpp b/src/async/nntp/MCNNTPDisconnectOperation.cpp new file mode 100644 index 00000000..d269904a --- /dev/null +++ b/src/async/nntp/MCNNTPDisconnectOperation.cpp @@ -0,0 +1,30 @@ +// +// MCNNTPDisconnectOperation.cpp +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCNNTPDisconnectOperation.h" + +#include "MCNNTPAsyncSession.h" +#include "MCNNTPSession.h" + +using namespace mailcore; + +NNTPDisconnectOperation::NNTPDisconnectOperation() +{ +} + +NNTPDisconnectOperation::~NNTPDisconnectOperation() +{ +} + +void NNTPDisconnectOperation::main() +{ + ErrorCode error; + + session()->session()->checkAccount(&error); + setError(error); +} diff --git a/src/async/nntp/MCNNTPFetchAllArticlesOperation.cc b/src/async/nntp/MCNNTPFetchAllArticlesOperation.cc deleted file mode 100644 index 044e9e5e..00000000 --- a/src/async/nntp/MCNNTPFetchAllArticlesOperation.cc +++ /dev/null @@ -1,49 +0,0 @@ -// -// MCNNTPFetchAllArticlesOperation.cpp -// mailcore2 -// -// Created by Robert Widmann on 8/13/14. -// Copyright (c) 2014 MailCore. All rights reserved. -// - -#include "MCNNTPFetchAllArticlesOperation.h" - -#include "MCNNTPAsyncSession.h" -#include "MCNNTPSession.h" - -using namespace mailcore; - -NNTPFetchAllArticlesOperation::NNTPFetchAllArticlesOperation() -{ - mGroupName = NULL; - mArticles = NULL; -} - -NNTPFetchAllArticlesOperation::~NNTPFetchAllArticlesOperation() -{ - MC_SAFE_RELEASE(mGroupName); - MC_SAFE_RELEASE(mArticles); -} - -void NNTPFetchAllArticlesOperation::setGroupName(String * groupname) -{ - MC_SAFE_REPLACE_COPY(String, mGroupName, groupname); -} - -String * NNTPFetchAllArticlesOperation::groupName() -{ - return mGroupName; -} - -IndexSet * NNTPFetchAllArticlesOperation::articles() -{ - return mArticles; -} - -void NNTPFetchAllArticlesOperation::main() -{ - ErrorCode error; - mArticles = session()->session()->fetchAllArticles(mGroupName, &error); - setError(error); - MC_SAFE_RETAIN(mArticles); -} diff --git a/src/async/nntp/MCNNTPFetchAllArticlesOperation.cpp b/src/async/nntp/MCNNTPFetchAllArticlesOperation.cpp new file mode 100644 index 00000000..044e9e5e --- /dev/null +++ b/src/async/nntp/MCNNTPFetchAllArticlesOperation.cpp @@ -0,0 +1,49 @@ +// +// MCNNTPFetchAllArticlesOperation.cpp +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCNNTPFetchAllArticlesOperation.h" + +#include "MCNNTPAsyncSession.h" +#include "MCNNTPSession.h" + +using namespace mailcore; + +NNTPFetchAllArticlesOperation::NNTPFetchAllArticlesOperation() +{ + mGroupName = NULL; + mArticles = NULL; +} + +NNTPFetchAllArticlesOperation::~NNTPFetchAllArticlesOperation() +{ + MC_SAFE_RELEASE(mGroupName); + MC_SAFE_RELEASE(mArticles); +} + +void NNTPFetchAllArticlesOperation::setGroupName(String * groupname) +{ + MC_SAFE_REPLACE_COPY(String, mGroupName, groupname); +} + +String * NNTPFetchAllArticlesOperation::groupName() +{ + return mGroupName; +} + +IndexSet * NNTPFetchAllArticlesOperation::articles() +{ + return mArticles; +} + +void NNTPFetchAllArticlesOperation::main() +{ + ErrorCode error; + mArticles = session()->session()->fetchAllArticles(mGroupName, &error); + setError(error); + MC_SAFE_RETAIN(mArticles); +} diff --git a/src/async/nntp/MCNNTPFetchArticleOperation.cc b/src/async/nntp/MCNNTPFetchArticleOperation.cc deleted file mode 100644 index 1df0dc33..00000000 --- a/src/async/nntp/MCNNTPFetchArticleOperation.cc +++ /dev/null @@ -1,69 +0,0 @@ -// -// MCNNTPFetchArticleOperation.cpp -// mailcore2 -// -// Created by Robert Widmann on 8/13/14. -// Copyright (c) 2014 MailCore. All rights reserved. -// - -#include "MCNNTPFetchArticleOperation.h" - -#include "MCNNTPAsyncSession.h" -#include "MCNNTPSession.h" - -using namespace mailcore; - -NNTPFetchArticleOperation::NNTPFetchArticleOperation() -{ - mMessageIndex = 0; - mData = NULL; -} - -NNTPFetchArticleOperation::~NNTPFetchArticleOperation() -{ - MC_SAFE_RELEASE(mData); -} - -void NNTPFetchArticleOperation::setGroupName(String * groupName) { - MC_SAFE_REPLACE_COPY(String, mGroupName, groupName); -} - -String * NNTPFetchArticleOperation::groupName() { - return mGroupName; -} - -void NNTPFetchArticleOperation::setMessageID(String * groupName) { - MC_SAFE_REPLACE_COPY(String, mMessageID, groupName); -} - -String * NNTPFetchArticleOperation::messageID() { - return mMessageID; -} - -void NNTPFetchArticleOperation::setMessageIndex(unsigned int messageIndex) -{ - mMessageIndex = messageIndex; -} - -unsigned int NNTPFetchArticleOperation::messageIndex() -{ - return mMessageIndex; -} - -Data * NNTPFetchArticleOperation::data() -{ - return mData; -} - -void NNTPFetchArticleOperation::main() -{ - ErrorCode error; - if (mMessageID == NULL) { - mData = session()->session()->fetchArticle(mGroupName, mMessageIndex, this, &error); - } else { - mData = session()->session()->fetchArticleByMessageID(mGroupName, mMessageID, &error); - } - MC_SAFE_RETAIN(mData); - setError(error); -} - diff --git a/src/async/nntp/MCNNTPFetchArticleOperation.cpp b/src/async/nntp/MCNNTPFetchArticleOperation.cpp new file mode 100644 index 00000000..1df0dc33 --- /dev/null +++ b/src/async/nntp/MCNNTPFetchArticleOperation.cpp @@ -0,0 +1,69 @@ +// +// MCNNTPFetchArticleOperation.cpp +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCNNTPFetchArticleOperation.h" + +#include "MCNNTPAsyncSession.h" +#include "MCNNTPSession.h" + +using namespace mailcore; + +NNTPFetchArticleOperation::NNTPFetchArticleOperation() +{ + mMessageIndex = 0; + mData = NULL; +} + +NNTPFetchArticleOperation::~NNTPFetchArticleOperation() +{ + MC_SAFE_RELEASE(mData); +} + +void NNTPFetchArticleOperation::setGroupName(String * groupName) { + MC_SAFE_REPLACE_COPY(String, mGroupName, groupName); +} + +String * NNTPFetchArticleOperation::groupName() { + return mGroupName; +} + +void NNTPFetchArticleOperation::setMessageID(String * groupName) { + MC_SAFE_REPLACE_COPY(String, mMessageID, groupName); +} + +String * NNTPFetchArticleOperation::messageID() { + return mMessageID; +} + +void NNTPFetchArticleOperation::setMessageIndex(unsigned int messageIndex) +{ + mMessageIndex = messageIndex; +} + +unsigned int NNTPFetchArticleOperation::messageIndex() +{ + return mMessageIndex; +} + +Data * NNTPFetchArticleOperation::data() +{ + return mData; +} + +void NNTPFetchArticleOperation::main() +{ + ErrorCode error; + if (mMessageID == NULL) { + mData = session()->session()->fetchArticle(mGroupName, mMessageIndex, this, &error); + } else { + mData = session()->session()->fetchArticleByMessageID(mGroupName, mMessageID, &error); + } + MC_SAFE_RETAIN(mData); + setError(error); +} + diff --git a/src/async/nntp/MCNNTPFetchHeaderOperation.cc b/src/async/nntp/MCNNTPFetchHeaderOperation.cc deleted file mode 100644 index 386dc142..00000000 --- a/src/async/nntp/MCNNTPFetchHeaderOperation.cc +++ /dev/null @@ -1,59 +0,0 @@ -// -// MCNNTPFetchHeaderOperation.cpp -// mailcore2 -// -// Created by Robert Widmann on 8/13/14. -// Copyright (c) 2014 MailCore. All rights reserved. -// - -#include "MCNNTPFetchHeaderOperation.h" - -#include "MCNNTPAsyncSession.h" -#include "MCNNTPSession.h" -#include "MCMessageHeader.h" - -using namespace mailcore; - -NNTPFetchHeaderOperation::NNTPFetchHeaderOperation() -{ - mMessageIndex = 0; - mHeader = NULL; -} - -NNTPFetchHeaderOperation::~NNTPFetchHeaderOperation() -{ - MC_SAFE_RELEASE(mHeader); -} - -void NNTPFetchHeaderOperation::setGroupName(String * groupName) { - MC_SAFE_REPLACE_COPY(String, mGroupName, groupName); -} - -String * NNTPFetchHeaderOperation::groupName() { - return mGroupName; -} - -void NNTPFetchHeaderOperation::setMessageIndex(unsigned int messageIndex) -{ - mMessageIndex = messageIndex; -} - -unsigned int NNTPFetchHeaderOperation::messageIndex() -{ - return mMessageIndex; -} - -MessageHeader * NNTPFetchHeaderOperation::header() -{ - return mHeader; -} - -void NNTPFetchHeaderOperation::main() -{ - ErrorCode error; - mHeader = session()->session()->fetchHeader(mGroupName, mMessageIndex, &error); - if (mHeader != NULL) { - mHeader->retain(); - } - setError(error); -} diff --git a/src/async/nntp/MCNNTPFetchHeaderOperation.cpp b/src/async/nntp/MCNNTPFetchHeaderOperation.cpp new file mode 100644 index 00000000..386dc142 --- /dev/null +++ b/src/async/nntp/MCNNTPFetchHeaderOperation.cpp @@ -0,0 +1,59 @@ +// +// MCNNTPFetchHeaderOperation.cpp +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCNNTPFetchHeaderOperation.h" + +#include "MCNNTPAsyncSession.h" +#include "MCNNTPSession.h" +#include "MCMessageHeader.h" + +using namespace mailcore; + +NNTPFetchHeaderOperation::NNTPFetchHeaderOperation() +{ + mMessageIndex = 0; + mHeader = NULL; +} + +NNTPFetchHeaderOperation::~NNTPFetchHeaderOperation() +{ + MC_SAFE_RELEASE(mHeader); +} + +void NNTPFetchHeaderOperation::setGroupName(String * groupName) { + MC_SAFE_REPLACE_COPY(String, mGroupName, groupName); +} + +String * NNTPFetchHeaderOperation::groupName() { + return mGroupName; +} + +void NNTPFetchHeaderOperation::setMessageIndex(unsigned int messageIndex) +{ + mMessageIndex = messageIndex; +} + +unsigned int NNTPFetchHeaderOperation::messageIndex() +{ + return mMessageIndex; +} + +MessageHeader * NNTPFetchHeaderOperation::header() +{ + return mHeader; +} + +void NNTPFetchHeaderOperation::main() +{ + ErrorCode error; + mHeader = session()->session()->fetchHeader(mGroupName, mMessageIndex, &error); + if (mHeader != NULL) { + mHeader->retain(); + } + setError(error); +} diff --git a/src/async/nntp/MCNNTPFetchOverviewOperation.cc b/src/async/nntp/MCNNTPFetchOverviewOperation.cc deleted file mode 100644 index b05b29e6..00000000 --- a/src/async/nntp/MCNNTPFetchOverviewOperation.cc +++ /dev/null @@ -1,68 +0,0 @@ -// -// NNTPFetchOverviewOperation.cpp -// mailcore2 -// -// Created by Robert Widmann on 10/21/14. -// Copyright (c) 2014 MailCore. All rights reserved. -// - -#include "MCNNTPFetchOverviewOperation.h" - -#include "MCNNTPAsyncSession.h" -#include "MCNNTPSession.h" - -using namespace mailcore; - -NNTPFetchOverviewOperation::NNTPFetchOverviewOperation() -{ - mArticles = NULL; - mIndexes = NULL; - mGroupName = NULL; -} - -NNTPFetchOverviewOperation::~NNTPFetchOverviewOperation() -{ - MC_SAFE_RELEASE(mIndexes); - MC_SAFE_RELEASE(mGroupName); -} - -void NNTPFetchOverviewOperation::setIndexes(IndexSet * indexes) -{ - MC_SAFE_REPLACE_RETAIN(IndexSet, mIndexes, indexes); -} - -IndexSet * NNTPFetchOverviewOperation::indexes() -{ - return mIndexes; -} - -void NNTPFetchOverviewOperation::setGroupName(String * groupname) -{ - MC_SAFE_REPLACE_COPY(String, mGroupName, groupname); -} - -String * NNTPFetchOverviewOperation::groupName() -{ - return mGroupName; -} - -Array * NNTPFetchOverviewOperation::articles() { - return mArticles; -} - -void NNTPFetchOverviewOperation::main() -{ - ErrorCode error; - mArticles = Array::array(); - for(unsigned int i = 0 ; i < mIndexes->rangesCount() ; i ++) { - Range range = mIndexes->allRanges()[i]; - Array * articles = session()->session()->fetchOverArticlesInRange(range, mGroupName, &error); - if (error != ErrorNone) { - setError(error); - return; - } - mArticles->addObjectsFromArray(articles); - } - - setError(error); -} diff --git a/src/async/nntp/MCNNTPFetchOverviewOperation.cpp b/src/async/nntp/MCNNTPFetchOverviewOperation.cpp new file mode 100644 index 00000000..b05b29e6 --- /dev/null +++ b/src/async/nntp/MCNNTPFetchOverviewOperation.cpp @@ -0,0 +1,68 @@ +// +// NNTPFetchOverviewOperation.cpp +// mailcore2 +// +// Created by Robert Widmann on 10/21/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCNNTPFetchOverviewOperation.h" + +#include "MCNNTPAsyncSession.h" +#include "MCNNTPSession.h" + +using namespace mailcore; + +NNTPFetchOverviewOperation::NNTPFetchOverviewOperation() +{ + mArticles = NULL; + mIndexes = NULL; + mGroupName = NULL; +} + +NNTPFetchOverviewOperation::~NNTPFetchOverviewOperation() +{ + MC_SAFE_RELEASE(mIndexes); + MC_SAFE_RELEASE(mGroupName); +} + +void NNTPFetchOverviewOperation::setIndexes(IndexSet * indexes) +{ + MC_SAFE_REPLACE_RETAIN(IndexSet, mIndexes, indexes); +} + +IndexSet * NNTPFetchOverviewOperation::indexes() +{ + return mIndexes; +} + +void NNTPFetchOverviewOperation::setGroupName(String * groupname) +{ + MC_SAFE_REPLACE_COPY(String, mGroupName, groupname); +} + +String * NNTPFetchOverviewOperation::groupName() +{ + return mGroupName; +} + +Array * NNTPFetchOverviewOperation::articles() { + return mArticles; +} + +void NNTPFetchOverviewOperation::main() +{ + ErrorCode error; + mArticles = Array::array(); + for(unsigned int i = 0 ; i < mIndexes->rangesCount() ; i ++) { + Range range = mIndexes->allRanges()[i]; + Array * articles = session()->session()->fetchOverArticlesInRange(range, mGroupName, &error); + if (error != ErrorNone) { + setError(error); + return; + } + mArticles->addObjectsFromArray(articles); + } + + setError(error); +} diff --git a/src/async/nntp/MCNNTPFetchServerTimeOperation.cc b/src/async/nntp/MCNNTPFetchServerTimeOperation.cc deleted file mode 100644 index 86800733..00000000 --- a/src/async/nntp/MCNNTPFetchServerTimeOperation.cc +++ /dev/null @@ -1,34 +0,0 @@ -// -// MCNNTPFetchServerTimeOperation.cpp -// mailcore2 -// -// Created by Robert Widmann on 10/21/14. -// Copyright (c) 2014 MailCore. All rights reserved. -// - -#include "MCNNTPFetchServerTimeOperation.h" - -#include "MCNNTPAsyncSession.h" -#include "MCNNTPSession.h" - -using namespace mailcore; - -NNTPFetchServerTimeOperation::NNTPFetchServerTimeOperation() -{ -} - -NNTPFetchServerTimeOperation::~NNTPFetchServerTimeOperation() -{ -} - -time_t NNTPFetchServerTimeOperation::time() -{ - return mTime; -} - -void NNTPFetchServerTimeOperation::main() -{ - ErrorCode error; - mTime = session()->session()->fetchServerDate(&error); - setError(error); -} diff --git a/src/async/nntp/MCNNTPFetchServerTimeOperation.cpp b/src/async/nntp/MCNNTPFetchServerTimeOperation.cpp new file mode 100644 index 00000000..86800733 --- /dev/null +++ b/src/async/nntp/MCNNTPFetchServerTimeOperation.cpp @@ -0,0 +1,34 @@ +// +// MCNNTPFetchServerTimeOperation.cpp +// mailcore2 +// +// Created by Robert Widmann on 10/21/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCNNTPFetchServerTimeOperation.h" + +#include "MCNNTPAsyncSession.h" +#include "MCNNTPSession.h" + +using namespace mailcore; + +NNTPFetchServerTimeOperation::NNTPFetchServerTimeOperation() +{ +} + +NNTPFetchServerTimeOperation::~NNTPFetchServerTimeOperation() +{ +} + +time_t NNTPFetchServerTimeOperation::time() +{ + return mTime; +} + +void NNTPFetchServerTimeOperation::main() +{ + ErrorCode error; + mTime = session()->session()->fetchServerDate(&error); + setError(error); +} diff --git a/src/async/nntp/MCNNTPListNewsgroupsOperation.cc b/src/async/nntp/MCNNTPListNewsgroupsOperation.cc deleted file mode 100644 index 3747bacf..00000000 --- a/src/async/nntp/MCNNTPListNewsgroupsOperation.cc +++ /dev/null @@ -1,48 +0,0 @@ -// -// MCNNTPListNewsgroupsMessagesOperation.cpp -// mailcore2 -// -// Created by Robert Widmann on 8/13/14. -// Copyright (c) 2014 MailCore. All rights reserved. -// - -#include "MCNNTPListNewsgroupsOperation.h" - -#include "MCNNTPAsyncSession.h" -#include "MCNNTPSession.h" - -using namespace mailcore; - -NNTPListNewsgroupsOperation::NNTPListNewsgroupsOperation() -{ -} - -NNTPListNewsgroupsOperation::~NNTPListNewsgroupsOperation() -{ -} - -void NNTPListNewsgroupsOperation::setListsSubscribed(bool listsSubscribed) -{ - mListsSuscribed = listsSubscribed; -} - -bool NNTPListNewsgroupsOperation::listsSubscribed() -{ - return mListsSuscribed; -} - -Array * NNTPListNewsgroupsOperation::groups() { - return mGroups; -} - -void NNTPListNewsgroupsOperation::main() -{ - ErrorCode error; - - if (mListsSuscribed) { - mGroups = session()->session()->listDefaultNewsgroups(&error); - } else { - mGroups = session()->session()->listAllNewsgroups(&error); - } - setError(error); -} diff --git a/src/async/nntp/MCNNTPListNewsgroupsOperation.cpp b/src/async/nntp/MCNNTPListNewsgroupsOperation.cpp new file mode 100644 index 00000000..3747bacf --- /dev/null +++ b/src/async/nntp/MCNNTPListNewsgroupsOperation.cpp @@ -0,0 +1,48 @@ +// +// MCNNTPListNewsgroupsMessagesOperation.cpp +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCNNTPListNewsgroupsOperation.h" + +#include "MCNNTPAsyncSession.h" +#include "MCNNTPSession.h" + +using namespace mailcore; + +NNTPListNewsgroupsOperation::NNTPListNewsgroupsOperation() +{ +} + +NNTPListNewsgroupsOperation::~NNTPListNewsgroupsOperation() +{ +} + +void NNTPListNewsgroupsOperation::setListsSubscribed(bool listsSubscribed) +{ + mListsSuscribed = listsSubscribed; +} + +bool NNTPListNewsgroupsOperation::listsSubscribed() +{ + return mListsSuscribed; +} + +Array * NNTPListNewsgroupsOperation::groups() { + return mGroups; +} + +void NNTPListNewsgroupsOperation::main() +{ + ErrorCode error; + + if (mListsSuscribed) { + mGroups = session()->session()->listDefaultNewsgroups(&error); + } else { + mGroups = session()->session()->listAllNewsgroups(&error); + } + setError(error); +} diff --git a/src/async/nntp/MCNNTPOperation.cc b/src/async/nntp/MCNNTPOperation.cc deleted file mode 100644 index 3368ba0e..00000000 --- a/src/async/nntp/MCNNTPOperation.cc +++ /dev/null @@ -1,104 +0,0 @@ -// -// MCNNTPOperation.cpp -// mailcore2 -// -// Created by Robert Widmann on 8/13/14. -// Copyright (c) 2014 MailCore. All rights reserved. -// - -#include "MCNNTPOperation.h" - -#include - -#include "MCNNTPSession.h" -#include "MCNNTPAsyncSession.h" -#include "MCNNTPOperationCallback.h" - -using namespace mailcore; - -NNTPOperation::NNTPOperation() -{ - mSession = NULL; - mPopCallback = NULL; - mError = ErrorNone; -} - -NNTPOperation::~NNTPOperation() -{ - MC_SAFE_RELEASE(mSession); -} - -void NNTPOperation::setSession(NNTPAsyncSession * session) -{ - MC_SAFE_REPLACE_RETAIN(NNTPAsyncSession, mSession, session); -#if __APPLE__ - dispatch_queue_t queue; - if (session != NULL) { - queue = session->dispatchQueue(); - } - else { - queue = dispatch_get_main_queue(); - } - setCallbackDispatchQueue(queue); -#endif -} - -NNTPAsyncSession * NNTPOperation::session() -{ - return mSession; -} - -void NNTPOperation::setNNTPCallback(NNTPOperationCallback * callback) -{ - mPopCallback = callback; -} - -NNTPOperationCallback * NNTPOperation::nntpCallback() -{ - return mPopCallback; -} - -void NNTPOperation::setError(ErrorCode error) -{ - mError = error; -} - -ErrorCode NNTPOperation::error() -{ - return mError; -} - -void NNTPOperation::start() -{ - mSession->runOperation(this); -} - -struct progressContext { - unsigned int current; - unsigned int maximum; -}; - -void NNTPOperation::bodyProgress(NNTPSession * session, unsigned int current, unsigned int maximum) -{ - struct progressContext * context = (struct progressContext *) calloc(sizeof(* context), 1); - context->current = current; - context->maximum = maximum; - - retain(); - performMethodOnCallbackThread((Object::Method) &NNTPOperation::bodyProgressOnMainThread, context); -} - -void NNTPOperation::bodyProgressOnMainThread(void * ctx) -{ - if (isCancelled()) { - release(); - return; - } - - struct progressContext * context = (struct progressContext *) ctx; - if (mPopCallback != NULL) { - mPopCallback->bodyProgress(this, context->current, context->maximum); - } - free(context); - release(); -} diff --git a/src/async/nntp/MCNNTPOperation.cpp b/src/async/nntp/MCNNTPOperation.cpp new file mode 100644 index 00000000..3368ba0e --- /dev/null +++ b/src/async/nntp/MCNNTPOperation.cpp @@ -0,0 +1,104 @@ +// +// MCNNTPOperation.cpp +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCNNTPOperation.h" + +#include + +#include "MCNNTPSession.h" +#include "MCNNTPAsyncSession.h" +#include "MCNNTPOperationCallback.h" + +using namespace mailcore; + +NNTPOperation::NNTPOperation() +{ + mSession = NULL; + mPopCallback = NULL; + mError = ErrorNone; +} + +NNTPOperation::~NNTPOperation() +{ + MC_SAFE_RELEASE(mSession); +} + +void NNTPOperation::setSession(NNTPAsyncSession * session) +{ + MC_SAFE_REPLACE_RETAIN(NNTPAsyncSession, mSession, session); +#if __APPLE__ + dispatch_queue_t queue; + if (session != NULL) { + queue = session->dispatchQueue(); + } + else { + queue = dispatch_get_main_queue(); + } + setCallbackDispatchQueue(queue); +#endif +} + +NNTPAsyncSession * NNTPOperation::session() +{ + return mSession; +} + +void NNTPOperation::setNNTPCallback(NNTPOperationCallback * callback) +{ + mPopCallback = callback; +} + +NNTPOperationCallback * NNTPOperation::nntpCallback() +{ + return mPopCallback; +} + +void NNTPOperation::setError(ErrorCode error) +{ + mError = error; +} + +ErrorCode NNTPOperation::error() +{ + return mError; +} + +void NNTPOperation::start() +{ + mSession->runOperation(this); +} + +struct progressContext { + unsigned int current; + unsigned int maximum; +}; + +void NNTPOperation::bodyProgress(NNTPSession * session, unsigned int current, unsigned int maximum) +{ + struct progressContext * context = (struct progressContext *) calloc(sizeof(* context), 1); + context->current = current; + context->maximum = maximum; + + retain(); + performMethodOnCallbackThread((Object::Method) &NNTPOperation::bodyProgressOnMainThread, context); +} + +void NNTPOperation::bodyProgressOnMainThread(void * ctx) +{ + if (isCancelled()) { + release(); + return; + } + + struct progressContext * context = (struct progressContext *) ctx; + if (mPopCallback != NULL) { + mPopCallback->bodyProgress(this, context->current, context->maximum); + } + free(context); + release(); +} diff --git a/src/async/pop/MCPOPAsyncSession.cc b/src/async/pop/MCPOPAsyncSession.cc deleted file mode 100644 index 2a6bd3b0..00000000 --- a/src/async/pop/MCPOPAsyncSession.cc +++ /dev/null @@ -1,275 +0,0 @@ -// -// MCPopAsyncSession.cpp -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/16/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCPOPAsyncSession.h" - -#include "MCPOP.h" -#include "MCPOPFetchHeaderOperation.h" -#include "MCPOPFetchMessageOperation.h" -#include "MCPOPDeleteMessagesOperation.h" -#include "MCPOPFetchMessagesOperation.h" -#include "MCPOPCheckAccountOperation.h" -#include "MCPOPNoopOperation.h" -#include "MCOperationQueueCallback.h" -#include "MCConnectionLogger.h" - -using namespace mailcore; - -namespace mailcore { - class POPOperationQueueCallback : public Object, public OperationQueueCallback { - public: - POPOperationQueueCallback(POPAsyncSession * session) { - mSession = session; - } - - virtual ~POPOperationQueueCallback() { - } - - virtual void queueStartRunning() { - mSession->retain(); - } - - virtual void queueStoppedRunning() { - mSession->release(); - } - - private: - POPAsyncSession * mSession; - }; - - class POPConnectionLogger : public Object, public ConnectionLogger { - public: - POPConnectionLogger(POPAsyncSession * session) { - mSession = session; - } - - virtual ~POPConnectionLogger() { - } - - virtual void log(void * sender, ConnectionLogType logType, Data * buffer) - { - mSession->logConnection(logType, buffer); - } - - private: - POPAsyncSession * mSession; - }; - -} - -POPAsyncSession::POPAsyncSession() -{ - mSession = new POPSession(); - mQueue = new OperationQueue(); - mQueueCallback = new POPOperationQueueCallback(this); - mQueue->setCallback(mQueueCallback); - mConnectionLogger = NULL; - pthread_mutex_init(&mConnectionLoggerLock, NULL); - mInternalLogger = new POPConnectionLogger(this); - mSession->setConnectionLogger(mInternalLogger); -} - -POPAsyncSession::~POPAsyncSession() -{ - MC_SAFE_RELEASE(mInternalLogger); - pthread_mutex_destroy(&mConnectionLoggerLock); - MC_SAFE_RELEASE(mQueueCallback); - MC_SAFE_RELEASE(mSession); - MC_SAFE_RELEASE(mQueue); -} - -void POPAsyncSession::setHostname(String * hostname) -{ - mSession->setHostname(hostname); -} - -String * POPAsyncSession::hostname() -{ - return mSession->hostname(); -} - -void POPAsyncSession::setPort(unsigned int port) -{ - mSession->setPort(port); -} - -unsigned int POPAsyncSession::port() -{ - return mSession->port(); -} - -void POPAsyncSession::setUsername(String * username) -{ - mSession->setUsername(username); -} - -String * POPAsyncSession::username() -{ - return mSession->username(); -} - -void POPAsyncSession::setPassword(String * password) -{ - mSession->setPassword(password); -} - -String * POPAsyncSession::password() -{ - return mSession->password(); -} - -void POPAsyncSession::setAuthType(AuthType authType) -{ - mSession->setAuthType(authType); -} - -AuthType POPAsyncSession::authType() -{ - return mSession->authType(); -} - -void POPAsyncSession::setConnectionType(ConnectionType connectionType) -{ - mSession->setConnectionType(connectionType); -} - -ConnectionType POPAsyncSession::connectionType() -{ - return mSession->connectionType(); -} - -void POPAsyncSession::setTimeout(time_t timeout) -{ - mSession->setTimeout(timeout); -} - -time_t POPAsyncSession::timeout() -{ - return mSession->timeout(); -} - -void POPAsyncSession::setCheckCertificateEnabled(bool enabled) -{ - mSession->setCheckCertificateEnabled(enabled); -} - -bool POPAsyncSession::isCheckCertificateEnabled() -{ - return mSession->isCheckCertificateEnabled(); -} - -POPFetchMessagesOperation * POPAsyncSession::fetchMessagesOperation() -{ - POPFetchMessagesOperation * op = new POPFetchMessagesOperation(); - op->setSession(this); - op->autorelease(); - return op; -} - -POPFetchHeaderOperation * POPAsyncSession::fetchHeaderOperation(unsigned int index) -{ - POPFetchHeaderOperation * op = new POPFetchHeaderOperation(); - op->setSession(this); - op->setMessageIndex(index); - op->autorelease(); - return op; -} - -POPFetchMessageOperation * POPAsyncSession::fetchMessageOperation(unsigned int index) -{ - POPFetchMessageOperation * op = new POPFetchMessageOperation(); - op->setSession(this); - op->setMessageIndex(index); - op->autorelease(); - return op; -} - -POPOperation * POPAsyncSession::deleteMessagesOperation(IndexSet * indexes) -{ - POPDeleteMessagesOperation * op = new POPDeleteMessagesOperation(); - op->setSession(this); - op->setMessageIndexes(indexes); - op->autorelease(); - return op; -} - -POPOperation * POPAsyncSession::disconnectOperation() -{ - return deleteMessagesOperation(IndexSet::indexSet()); -} - -POPOperation * POPAsyncSession::checkAccountOperation() -{ - POPCheckAccountOperation * op = new POPCheckAccountOperation(); - op->setSession(this); - op->autorelease(); - return op; -} - -POPOperation * POPAsyncSession::noopOperation() -{ - POPNoopOperation * op = new POPNoopOperation(); - op->setSession(this); - op->autorelease(); - return op; -} - -POPSession * POPAsyncSession::session() -{ - return mSession; -} - -void POPAsyncSession::runOperation(POPOperation * operation) -{ - mQueue->addOperation(operation); -} - -void POPAsyncSession::setConnectionLogger(ConnectionLogger * logger) -{ - pthread_mutex_lock(&mConnectionLoggerLock); - mConnectionLogger = logger; - if (mConnectionLogger != NULL) { - mSession->setConnectionLogger(mInternalLogger); - } - else { - mSession->setConnectionLogger(NULL); - } - pthread_mutex_unlock(&mConnectionLoggerLock); -} - -ConnectionLogger * POPAsyncSession::connectionLogger() -{ - ConnectionLogger * result; - - pthread_mutex_lock(&mConnectionLoggerLock); - result = mConnectionLogger; - pthread_mutex_unlock(&mConnectionLoggerLock); - - return result; -} - -void POPAsyncSession::logConnection(ConnectionLogType logType, Data * buffer) -{ - pthread_mutex_lock(&mConnectionLoggerLock); - if (mConnectionLogger != NULL) { - mConnectionLogger->log(this, logType, buffer); - } - pthread_mutex_unlock(&mConnectionLoggerLock); -} - -#if __APPLE__ -void POPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue) -{ - mQueue->setDispatchQueue(dispatchQueue); -} - -dispatch_queue_t POPAsyncSession::dispatchQueue() -{ - return mQueue->dispatchQueue(); -} -#endif diff --git a/src/async/pop/MCPOPAsyncSession.cpp b/src/async/pop/MCPOPAsyncSession.cpp new file mode 100644 index 00000000..2a6bd3b0 --- /dev/null +++ b/src/async/pop/MCPOPAsyncSession.cpp @@ -0,0 +1,275 @@ +// +// MCPopAsyncSession.cpp +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCPOPAsyncSession.h" + +#include "MCPOP.h" +#include "MCPOPFetchHeaderOperation.h" +#include "MCPOPFetchMessageOperation.h" +#include "MCPOPDeleteMessagesOperation.h" +#include "MCPOPFetchMessagesOperation.h" +#include "MCPOPCheckAccountOperation.h" +#include "MCPOPNoopOperation.h" +#include "MCOperationQueueCallback.h" +#include "MCConnectionLogger.h" + +using namespace mailcore; + +namespace mailcore { + class POPOperationQueueCallback : public Object, public OperationQueueCallback { + public: + POPOperationQueueCallback(POPAsyncSession * session) { + mSession = session; + } + + virtual ~POPOperationQueueCallback() { + } + + virtual void queueStartRunning() { + mSession->retain(); + } + + virtual void queueStoppedRunning() { + mSession->release(); + } + + private: + POPAsyncSession * mSession; + }; + + class POPConnectionLogger : public Object, public ConnectionLogger { + public: + POPConnectionLogger(POPAsyncSession * session) { + mSession = session; + } + + virtual ~POPConnectionLogger() { + } + + virtual void log(void * sender, ConnectionLogType logType, Data * buffer) + { + mSession->logConnection(logType, buffer); + } + + private: + POPAsyncSession * mSession; + }; + +} + +POPAsyncSession::POPAsyncSession() +{ + mSession = new POPSession(); + mQueue = new OperationQueue(); + mQueueCallback = new POPOperationQueueCallback(this); + mQueue->setCallback(mQueueCallback); + mConnectionLogger = NULL; + pthread_mutex_init(&mConnectionLoggerLock, NULL); + mInternalLogger = new POPConnectionLogger(this); + mSession->setConnectionLogger(mInternalLogger); +} + +POPAsyncSession::~POPAsyncSession() +{ + MC_SAFE_RELEASE(mInternalLogger); + pthread_mutex_destroy(&mConnectionLoggerLock); + MC_SAFE_RELEASE(mQueueCallback); + MC_SAFE_RELEASE(mSession); + MC_SAFE_RELEASE(mQueue); +} + +void POPAsyncSession::setHostname(String * hostname) +{ + mSession->setHostname(hostname); +} + +String * POPAsyncSession::hostname() +{ + return mSession->hostname(); +} + +void POPAsyncSession::setPort(unsigned int port) +{ + mSession->setPort(port); +} + +unsigned int POPAsyncSession::port() +{ + return mSession->port(); +} + +void POPAsyncSession::setUsername(String * username) +{ + mSession->setUsername(username); +} + +String * POPAsyncSession::username() +{ + return mSession->username(); +} + +void POPAsyncSession::setPassword(String * password) +{ + mSession->setPassword(password); +} + +String * POPAsyncSession::password() +{ + return mSession->password(); +} + +void POPAsyncSession::setAuthType(AuthType authType) +{ + mSession->setAuthType(authType); +} + +AuthType POPAsyncSession::authType() +{ + return mSession->authType(); +} + +void POPAsyncSession::setConnectionType(ConnectionType connectionType) +{ + mSession->setConnectionType(connectionType); +} + +ConnectionType POPAsyncSession::connectionType() +{ + return mSession->connectionType(); +} + +void POPAsyncSession::setTimeout(time_t timeout) +{ + mSession->setTimeout(timeout); +} + +time_t POPAsyncSession::timeout() +{ + return mSession->timeout(); +} + +void POPAsyncSession::setCheckCertificateEnabled(bool enabled) +{ + mSession->setCheckCertificateEnabled(enabled); +} + +bool POPAsyncSession::isCheckCertificateEnabled() +{ + return mSession->isCheckCertificateEnabled(); +} + +POPFetchMessagesOperation * POPAsyncSession::fetchMessagesOperation() +{ + POPFetchMessagesOperation * op = new POPFetchMessagesOperation(); + op->setSession(this); + op->autorelease(); + return op; +} + +POPFetchHeaderOperation * POPAsyncSession::fetchHeaderOperation(unsigned int index) +{ + POPFetchHeaderOperation * op = new POPFetchHeaderOperation(); + op->setSession(this); + op->setMessageIndex(index); + op->autorelease(); + return op; +} + +POPFetchMessageOperation * POPAsyncSession::fetchMessageOperation(unsigned int index) +{ + POPFetchMessageOperation * op = new POPFetchMessageOperation(); + op->setSession(this); + op->setMessageIndex(index); + op->autorelease(); + return op; +} + +POPOperation * POPAsyncSession::deleteMessagesOperation(IndexSet * indexes) +{ + POPDeleteMessagesOperation * op = new POPDeleteMessagesOperation(); + op->setSession(this); + op->setMessageIndexes(indexes); + op->autorelease(); + return op; +} + +POPOperation * POPAsyncSession::disconnectOperation() +{ + return deleteMessagesOperation(IndexSet::indexSet()); +} + +POPOperation * POPAsyncSession::checkAccountOperation() +{ + POPCheckAccountOperation * op = new POPCheckAccountOperation(); + op->setSession(this); + op->autorelease(); + return op; +} + +POPOperation * POPAsyncSession::noopOperation() +{ + POPNoopOperation * op = new POPNoopOperation(); + op->setSession(this); + op->autorelease(); + return op; +} + +POPSession * POPAsyncSession::session() +{ + return mSession; +} + +void POPAsyncSession::runOperation(POPOperation * operation) +{ + mQueue->addOperation(operation); +} + +void POPAsyncSession::setConnectionLogger(ConnectionLogger * logger) +{ + pthread_mutex_lock(&mConnectionLoggerLock); + mConnectionLogger = logger; + if (mConnectionLogger != NULL) { + mSession->setConnectionLogger(mInternalLogger); + } + else { + mSession->setConnectionLogger(NULL); + } + pthread_mutex_unlock(&mConnectionLoggerLock); +} + +ConnectionLogger * POPAsyncSession::connectionLogger() +{ + ConnectionLogger * result; + + pthread_mutex_lock(&mConnectionLoggerLock); + result = mConnectionLogger; + pthread_mutex_unlock(&mConnectionLoggerLock); + + return result; +} + +void POPAsyncSession::logConnection(ConnectionLogType logType, Data * buffer) +{ + pthread_mutex_lock(&mConnectionLoggerLock); + if (mConnectionLogger != NULL) { + mConnectionLogger->log(this, logType, buffer); + } + pthread_mutex_unlock(&mConnectionLoggerLock); +} + +#if __APPLE__ +void POPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue) +{ + mQueue->setDispatchQueue(dispatchQueue); +} + +dispatch_queue_t POPAsyncSession::dispatchQueue() +{ + return mQueue->dispatchQueue(); +} +#endif diff --git a/src/async/pop/MCPOPCheckAccountOperation.cc b/src/async/pop/MCPOPCheckAccountOperation.cc deleted file mode 100644 index f83cd740..00000000 --- a/src/async/pop/MCPOPCheckAccountOperation.cc +++ /dev/null @@ -1,30 +0,0 @@ -// -// MCPOPCheckAccountOperation.cpp -// mailcore2 -// -// Created by DINH Viêt Hoà on 4/6/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCPOPCheckAccountOperation.h" - -#include "MCPOPAsyncSession.h" -#include "MCPOPSession.h" - -using namespace mailcore; - -POPCheckAccountOperation::POPCheckAccountOperation() -{ -} - -POPCheckAccountOperation::~POPCheckAccountOperation() -{ -} - -void POPCheckAccountOperation::main() -{ - ErrorCode error; - - session()->session()->checkAccount(&error); - setError(error); -} diff --git a/src/async/pop/MCPOPCheckAccountOperation.cpp b/src/async/pop/MCPOPCheckAccountOperation.cpp new file mode 100644 index 00000000..f83cd740 --- /dev/null +++ b/src/async/pop/MCPOPCheckAccountOperation.cpp @@ -0,0 +1,30 @@ +// +// MCPOPCheckAccountOperation.cpp +// mailcore2 +// +// Created by DINH Viêt Hoà on 4/6/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCPOPCheckAccountOperation.h" + +#include "MCPOPAsyncSession.h" +#include "MCPOPSession.h" + +using namespace mailcore; + +POPCheckAccountOperation::POPCheckAccountOperation() +{ +} + +POPCheckAccountOperation::~POPCheckAccountOperation() +{ +} + +void POPCheckAccountOperation::main() +{ + ErrorCode error; + + session()->session()->checkAccount(&error); + setError(error); +} diff --git a/src/async/pop/MCPOPDeleteMessagesOperation.cc b/src/async/pop/MCPOPDeleteMessagesOperation.cc deleted file mode 100644 index 40cf11f6..00000000 --- a/src/async/pop/MCPOPDeleteMessagesOperation.cc +++ /dev/null @@ -1,63 +0,0 @@ -// -// MCPOPDeleteMessagesOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/16/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCPOPDeleteMessagesOperation.h" - -#include "MCPOPAsyncSession.h" -#include "MCPOPSession.h" - -using namespace mailcore; - -POPDeleteMessagesOperation::POPDeleteMessagesOperation() -{ - mMessageIndexes = NULL; -} - -POPDeleteMessagesOperation::~POPDeleteMessagesOperation() -{ - MC_SAFE_RELEASE(mMessageIndexes); -} - -void POPDeleteMessagesOperation::setMessageIndexes(IndexSet * indexes) -{ - MC_SAFE_REPLACE_RETAIN(IndexSet, mMessageIndexes, indexes); -} - -IndexSet * POPDeleteMessagesOperation::messageIndexes() -{ - return mMessageIndexes; -} - -void POPDeleteMessagesOperation::main() -{ - if (mMessageIndexes == NULL) - return; - - ErrorCode error; -#if 0 - for(unsigned int i = 0 ; i < mMessageIndexes->rangesCount() ; i ++) { - Range range = mMessageIndexes->allRanges()[i]; - for(unsigned int k = 0 ; k <= range.length ; k ++) { - session()->session()->deleteMessage((unsigned int) (range.location + k), &error); - if (error != ErrorNone) { - setError(error); - return; - } - } - } -#endif - mc_foreachindexset(index, mMessageIndexes) { - session()->session()->deleteMessage((unsigned int) index, &error); - if (error != ErrorNone) { - setError(error); - return; - } - } - session()->session()->disconnect(); -} - diff --git a/src/async/pop/MCPOPDeleteMessagesOperation.cpp b/src/async/pop/MCPOPDeleteMessagesOperation.cpp new file mode 100644 index 00000000..40cf11f6 --- /dev/null +++ b/src/async/pop/MCPOPDeleteMessagesOperation.cpp @@ -0,0 +1,63 @@ +// +// MCPOPDeleteMessagesOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCPOPDeleteMessagesOperation.h" + +#include "MCPOPAsyncSession.h" +#include "MCPOPSession.h" + +using namespace mailcore; + +POPDeleteMessagesOperation::POPDeleteMessagesOperation() +{ + mMessageIndexes = NULL; +} + +POPDeleteMessagesOperation::~POPDeleteMessagesOperation() +{ + MC_SAFE_RELEASE(mMessageIndexes); +} + +void POPDeleteMessagesOperation::setMessageIndexes(IndexSet * indexes) +{ + MC_SAFE_REPLACE_RETAIN(IndexSet, mMessageIndexes, indexes); +} + +IndexSet * POPDeleteMessagesOperation::messageIndexes() +{ + return mMessageIndexes; +} + +void POPDeleteMessagesOperation::main() +{ + if (mMessageIndexes == NULL) + return; + + ErrorCode error; +#if 0 + for(unsigned int i = 0 ; i < mMessageIndexes->rangesCount() ; i ++) { + Range range = mMessageIndexes->allRanges()[i]; + for(unsigned int k = 0 ; k <= range.length ; k ++) { + session()->session()->deleteMessage((unsigned int) (range.location + k), &error); + if (error != ErrorNone) { + setError(error); + return; + } + } + } +#endif + mc_foreachindexset(index, mMessageIndexes) { + session()->session()->deleteMessage((unsigned int) index, &error); + if (error != ErrorNone) { + setError(error); + return; + } + } + session()->session()->disconnect(); +} + diff --git a/src/async/pop/MCPOPFetchHeaderOperation.cc b/src/async/pop/MCPOPFetchHeaderOperation.cc deleted file mode 100644 index 60a0e8a6..00000000 --- a/src/async/pop/MCPOPFetchHeaderOperation.cc +++ /dev/null @@ -1,51 +0,0 @@ -// -// MCPOPFetchHeaderOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/16/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCPOPFetchHeaderOperation.h" - -#include "MCPOPAsyncSession.h" -#include "MCPOPSession.h" -#include "MCMessageHeader.h" - -using namespace mailcore; - -POPFetchHeaderOperation::POPFetchHeaderOperation() -{ - mMessageIndex = 0; - mHeader = NULL; -} - -POPFetchHeaderOperation::~POPFetchHeaderOperation() -{ - MC_SAFE_RELEASE(mHeader); -} - -void POPFetchHeaderOperation::setMessageIndex(unsigned int messageIndex) -{ - mMessageIndex = messageIndex; -} - -unsigned int POPFetchHeaderOperation::messageIndex() -{ - return mMessageIndex; -} - -MessageHeader * POPFetchHeaderOperation::header() -{ - return mHeader; -} - -void POPFetchHeaderOperation::main() -{ - ErrorCode error; - mHeader = session()->session()->fetchHeader(mMessageIndex, &error); - if (mHeader != NULL) { - mHeader->retain(); - } - setError(error); -} diff --git a/src/async/pop/MCPOPFetchHeaderOperation.cpp b/src/async/pop/MCPOPFetchHeaderOperation.cpp new file mode 100644 index 00000000..60a0e8a6 --- /dev/null +++ b/src/async/pop/MCPOPFetchHeaderOperation.cpp @@ -0,0 +1,51 @@ +// +// MCPOPFetchHeaderOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCPOPFetchHeaderOperation.h" + +#include "MCPOPAsyncSession.h" +#include "MCPOPSession.h" +#include "MCMessageHeader.h" + +using namespace mailcore; + +POPFetchHeaderOperation::POPFetchHeaderOperation() +{ + mMessageIndex = 0; + mHeader = NULL; +} + +POPFetchHeaderOperation::~POPFetchHeaderOperation() +{ + MC_SAFE_RELEASE(mHeader); +} + +void POPFetchHeaderOperation::setMessageIndex(unsigned int messageIndex) +{ + mMessageIndex = messageIndex; +} + +unsigned int POPFetchHeaderOperation::messageIndex() +{ + return mMessageIndex; +} + +MessageHeader * POPFetchHeaderOperation::header() +{ + return mHeader; +} + +void POPFetchHeaderOperation::main() +{ + ErrorCode error; + mHeader = session()->session()->fetchHeader(mMessageIndex, &error); + if (mHeader != NULL) { + mHeader->retain(); + } + setError(error); +} diff --git a/src/async/pop/MCPOPFetchMessageOperation.cc b/src/async/pop/MCPOPFetchMessageOperation.cc deleted file mode 100644 index ca822a9e..00000000 --- a/src/async/pop/MCPOPFetchMessageOperation.cc +++ /dev/null @@ -1,49 +0,0 @@ -// -// MCPOPFetchMessageOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/16/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCPOPFetchMessageOperation.h" - -#include "MCPOPAsyncSession.h" -#include "MCPOPSession.h" - -using namespace mailcore; - -POPFetchMessageOperation::POPFetchMessageOperation() -{ - mMessageIndex = 0; - mData = NULL; -} - -POPFetchMessageOperation::~POPFetchMessageOperation() -{ - MC_SAFE_RELEASE(mData); -} - -void POPFetchMessageOperation::setMessageIndex(unsigned int messageIndex) -{ - mMessageIndex = messageIndex; -} - -unsigned int POPFetchMessageOperation::messageIndex() -{ - return mMessageIndex; -} - -Data * POPFetchMessageOperation::data() -{ - return mData; -} - -void POPFetchMessageOperation::main() -{ - ErrorCode error; - mData = session()->session()->fetchMessage(mMessageIndex, this, &error); - MC_SAFE_RETAIN(mData); - setError(error); -} - diff --git a/src/async/pop/MCPOPFetchMessageOperation.cpp b/src/async/pop/MCPOPFetchMessageOperation.cpp new file mode 100644 index 00000000..ca822a9e --- /dev/null +++ b/src/async/pop/MCPOPFetchMessageOperation.cpp @@ -0,0 +1,49 @@ +// +// MCPOPFetchMessageOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCPOPFetchMessageOperation.h" + +#include "MCPOPAsyncSession.h" +#include "MCPOPSession.h" + +using namespace mailcore; + +POPFetchMessageOperation::POPFetchMessageOperation() +{ + mMessageIndex = 0; + mData = NULL; +} + +POPFetchMessageOperation::~POPFetchMessageOperation() +{ + MC_SAFE_RELEASE(mData); +} + +void POPFetchMessageOperation::setMessageIndex(unsigned int messageIndex) +{ + mMessageIndex = messageIndex; +} + +unsigned int POPFetchMessageOperation::messageIndex() +{ + return mMessageIndex; +} + +Data * POPFetchMessageOperation::data() +{ + return mData; +} + +void POPFetchMessageOperation::main() +{ + ErrorCode error; + mData = session()->session()->fetchMessage(mMessageIndex, this, &error); + MC_SAFE_RETAIN(mData); + setError(error); +} + diff --git a/src/async/pop/MCPOPFetchMessagesOperation.cc b/src/async/pop/MCPOPFetchMessagesOperation.cc deleted file mode 100644 index 9b7627fa..00000000 --- a/src/async/pop/MCPOPFetchMessagesOperation.cc +++ /dev/null @@ -1,37 +0,0 @@ -// -// MCPOPFetchMessagesOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/16/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCPOPFetchMessagesOperation.h" - -#include "MCPOPAsyncSession.h" -#include "MCPOPSession.h" - -using namespace mailcore; - -POPFetchMessagesOperation::POPFetchMessagesOperation() -{ - mMessages = NULL; -} - -POPFetchMessagesOperation::~POPFetchMessagesOperation() -{ - MC_SAFE_RELEASE(mMessages); -} - -Array * POPFetchMessagesOperation::messages() -{ - return mMessages; -} - -void POPFetchMessagesOperation::main() -{ - ErrorCode error; - mMessages = session()->session()->fetchMessages(&error); - setError(error); - MC_SAFE_RETAIN(mMessages); -} diff --git a/src/async/pop/MCPOPFetchMessagesOperation.cpp b/src/async/pop/MCPOPFetchMessagesOperation.cpp new file mode 100644 index 00000000..9b7627fa --- /dev/null +++ b/src/async/pop/MCPOPFetchMessagesOperation.cpp @@ -0,0 +1,37 @@ +// +// MCPOPFetchMessagesOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCPOPFetchMessagesOperation.h" + +#include "MCPOPAsyncSession.h" +#include "MCPOPSession.h" + +using namespace mailcore; + +POPFetchMessagesOperation::POPFetchMessagesOperation() +{ + mMessages = NULL; +} + +POPFetchMessagesOperation::~POPFetchMessagesOperation() +{ + MC_SAFE_RELEASE(mMessages); +} + +Array * POPFetchMessagesOperation::messages() +{ + return mMessages; +} + +void POPFetchMessagesOperation::main() +{ + ErrorCode error; + mMessages = session()->session()->fetchMessages(&error); + setError(error); + MC_SAFE_RETAIN(mMessages); +} diff --git a/src/async/pop/MCPOPNoopOperation.cc b/src/async/pop/MCPOPNoopOperation.cc deleted file mode 100644 index 034b1fa8..00000000 --- a/src/async/pop/MCPOPNoopOperation.cc +++ /dev/null @@ -1,30 +0,0 @@ -// -// MCPOPNoopOperation.cpp -// mailcore2 -// -// Created by Robert Widmann on 9/24/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCPOPNoopOperation.h" - -#include "MCPOPAsyncSession.h" -#include "MCPOPSession.h" - -using namespace mailcore; - -POPNoopOperation::POPNoopOperation() -{ -} - -POPNoopOperation::~POPNoopOperation() -{ -} - -void POPNoopOperation::main() -{ - ErrorCode error; - - session()->session()->noop(&error); - setError(error); -} diff --git a/src/async/pop/MCPOPNoopOperation.cpp b/src/async/pop/MCPOPNoopOperation.cpp new file mode 100644 index 00000000..034b1fa8 --- /dev/null +++ b/src/async/pop/MCPOPNoopOperation.cpp @@ -0,0 +1,30 @@ +// +// MCPOPNoopOperation.cpp +// mailcore2 +// +// Created by Robert Widmann on 9/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCPOPNoopOperation.h" + +#include "MCPOPAsyncSession.h" +#include "MCPOPSession.h" + +using namespace mailcore; + +POPNoopOperation::POPNoopOperation() +{ +} + +POPNoopOperation::~POPNoopOperation() +{ +} + +void POPNoopOperation::main() +{ + ErrorCode error; + + session()->session()->noop(&error); + setError(error); +} diff --git a/src/async/pop/MCPOPOperation.cc b/src/async/pop/MCPOPOperation.cc deleted file mode 100644 index 479876b6..00000000 --- a/src/async/pop/MCPOPOperation.cc +++ /dev/null @@ -1,104 +0,0 @@ -// -// MCPOPOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/16/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCPOPOperation.h" - -#include - -#include "MCPOPSession.h" -#include "MCPOPAsyncSession.h" -#include "MCPOPOperationCallback.h" - -using namespace mailcore; - -POPOperation::POPOperation() -{ - mSession = NULL; - mPopCallback = NULL; - mError = ErrorNone; -} - -POPOperation::~POPOperation() -{ - MC_SAFE_RELEASE(mSession); -} - -void POPOperation::setSession(POPAsyncSession * session) -{ - MC_SAFE_REPLACE_RETAIN(POPAsyncSession, mSession, session); -#if __APPLE__ - dispatch_queue_t queue; - if (session != NULL) { - queue = session->dispatchQueue(); - } - else { - queue = dispatch_get_main_queue(); - } - setCallbackDispatchQueue(queue); -#endif -} - -POPAsyncSession * POPOperation::session() -{ - return mSession; -} - -void POPOperation::setPopCallback(POPOperationCallback * callback) -{ - mPopCallback = callback; -} - -POPOperationCallback * POPOperation::popCallback() -{ - return mPopCallback; -} - -void POPOperation::setError(ErrorCode error) -{ - mError = error; -} - -ErrorCode POPOperation::error() -{ - return mError; -} - -void POPOperation::start() -{ - mSession->runOperation(this); -} - -struct progressContext { - unsigned int current; - unsigned int maximum; -}; - -void POPOperation::bodyProgress(POPSession * session, unsigned int current, unsigned int maximum) -{ - struct progressContext * context = (struct progressContext *) calloc(sizeof(* context), 1); - context->current = current; - context->maximum = maximum; - - retain(); - performMethodOnCallbackThread((Object::Method) &POPOperation::bodyProgressOnMainThread, context); -} - -void POPOperation::bodyProgressOnMainThread(void * ctx) -{ - if (isCancelled()) { - release(); - return; - } - - struct progressContext * context = (struct progressContext *) ctx; - if (mPopCallback != NULL) { - mPopCallback->bodyProgress(this, context->current, context->maximum); - } - free(context); - release(); -} diff --git a/src/async/pop/MCPOPOperation.cpp b/src/async/pop/MCPOPOperation.cpp new file mode 100644 index 00000000..479876b6 --- /dev/null +++ b/src/async/pop/MCPOPOperation.cpp @@ -0,0 +1,104 @@ +// +// MCPOPOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCPOPOperation.h" + +#include + +#include "MCPOPSession.h" +#include "MCPOPAsyncSession.h" +#include "MCPOPOperationCallback.h" + +using namespace mailcore; + +POPOperation::POPOperation() +{ + mSession = NULL; + mPopCallback = NULL; + mError = ErrorNone; +} + +POPOperation::~POPOperation() +{ + MC_SAFE_RELEASE(mSession); +} + +void POPOperation::setSession(POPAsyncSession * session) +{ + MC_SAFE_REPLACE_RETAIN(POPAsyncSession, mSession, session); +#if __APPLE__ + dispatch_queue_t queue; + if (session != NULL) { + queue = session->dispatchQueue(); + } + else { + queue = dispatch_get_main_queue(); + } + setCallbackDispatchQueue(queue); +#endif +} + +POPAsyncSession * POPOperation::session() +{ + return mSession; +} + +void POPOperation::setPopCallback(POPOperationCallback * callback) +{ + mPopCallback = callback; +} + +POPOperationCallback * POPOperation::popCallback() +{ + return mPopCallback; +} + +void POPOperation::setError(ErrorCode error) +{ + mError = error; +} + +ErrorCode POPOperation::error() +{ + return mError; +} + +void POPOperation::start() +{ + mSession->runOperation(this); +} + +struct progressContext { + unsigned int current; + unsigned int maximum; +}; + +void POPOperation::bodyProgress(POPSession * session, unsigned int current, unsigned int maximum) +{ + struct progressContext * context = (struct progressContext *) calloc(sizeof(* context), 1); + context->current = current; + context->maximum = maximum; + + retain(); + performMethodOnCallbackThread((Object::Method) &POPOperation::bodyProgressOnMainThread, context); +} + +void POPOperation::bodyProgressOnMainThread(void * ctx) +{ + if (isCancelled()) { + release(); + return; + } + + struct progressContext * context = (struct progressContext *) ctx; + if (mPopCallback != NULL) { + mPopCallback->bodyProgress(this, context->current, context->maximum); + } + free(context); + release(); +} diff --git a/src/async/smtp/MCSMTPAsyncSession.cc b/src/async/smtp/MCSMTPAsyncSession.cc deleted file mode 100644 index 8acfc9c5..00000000 --- a/src/async/smtp/MCSMTPAsyncSession.cc +++ /dev/null @@ -1,294 +0,0 @@ -#include "MCSMTPAsyncSession.h" - -#include "MCSMTPSession.h" -#include "MCSMTPLoginOperation.h" -#include "MCSMTPSendWithDataOperation.h" -#include "MCSMTPCheckAccountOperation.h" -#include "MCSMTPDisconnectOperation.h" -#include "MCSMTPNoopOperation.h" -#include "MCSMTPOperation.h" -#include "MCOperationQueueCallback.h" - -using namespace mailcore; - -namespace mailcore { - - class SMTPOperationQueueCallback : public Object, public OperationQueueCallback { - public: - SMTPOperationQueueCallback(SMTPAsyncSession * session) { - mSession = session; - } - - virtual ~SMTPOperationQueueCallback() { - } - - virtual void queueStartRunning() { - mSession->retain(); - } - - virtual void queueStoppedRunning() { - mSession->tryAutomaticDisconnect(); - mSession->release(); - } - - private: - SMTPAsyncSession * mSession; - }; - - class SMTPConnectionLogger : public Object, public ConnectionLogger { - public: - SMTPConnectionLogger(SMTPAsyncSession * session) { - mSession = session; - } - - virtual ~SMTPConnectionLogger() { - } - - virtual void log(void * sender, ConnectionLogType logType, Data * buffer) - { - mSession->logConnection(logType, buffer); - } - - private: - SMTPAsyncSession * mSession; - }; - -} - -SMTPAsyncSession::SMTPAsyncSession() -{ - mSession = new SMTPSession(); - mQueue = new OperationQueue(); - mQueueCallback = new SMTPOperationQueueCallback(this); - mQueue->setCallback(mQueueCallback); - mConnectionLogger = NULL; - pthread_mutex_init(&mConnectionLoggerLock, NULL); - mInternalLogger = new SMTPConnectionLogger(this); - mSession->setConnectionLogger(mInternalLogger); -} - -SMTPAsyncSession::~SMTPAsyncSession() -{ - MC_SAFE_RELEASE(mInternalLogger); - pthread_mutex_destroy(&mConnectionLoggerLock); - cancelDelayedPerformMethod((Object::Method) &SMTPAsyncSession::tryAutomaticDisconnectAfterDelay, NULL); - MC_SAFE_RELEASE(mQueueCallback); - MC_SAFE_RELEASE(mQueue); - MC_SAFE_RELEASE(mSession); -} - -void SMTPAsyncSession::setHostname(String * hostname) -{ - mSession->setHostname(hostname); -} - -String * SMTPAsyncSession::hostname() -{ - return mSession->hostname(); -} - -void SMTPAsyncSession::setPort(unsigned int port) -{ - mSession->setPort(port); -} - -unsigned int SMTPAsyncSession::port() -{ - return mSession->port(); -} - -void SMTPAsyncSession::setUsername(String * username) -{ - return mSession->setUsername(username); -} - -String * SMTPAsyncSession::username() -{ - return mSession->username(); -} - -void SMTPAsyncSession::setPassword(String * password) -{ - mSession->setPassword(password); -} - -String * SMTPAsyncSession::password() -{ - return mSession->password(); -} - -void SMTPAsyncSession::setOAuth2Token(String * token) -{ - mSession->setOAuth2Token(token); -} - -String * SMTPAsyncSession::OAuth2Token() -{ - return mSession->OAuth2Token(); -} - -void SMTPAsyncSession::setAuthType(AuthType authType) -{ - mSession->setAuthType(authType); -} - -AuthType SMTPAsyncSession::authType() -{ - return mSession->authType(); -} - -void SMTPAsyncSession::setConnectionType(ConnectionType connectionType) -{ - mSession->setConnectionType(connectionType); -} - -ConnectionType SMTPAsyncSession::connectionType() -{ - return mSession->connectionType(); -} - -void SMTPAsyncSession::setTimeout(time_t timeout) -{ - return mSession->setTimeout(timeout); -} - -time_t SMTPAsyncSession::timeout() -{ - return mSession->timeout(); -} - -void SMTPAsyncSession::setCheckCertificateEnabled(bool enabled) -{ - return mSession->setCheckCertificateEnabled(enabled); -} - -bool SMTPAsyncSession::isCheckCertificateEnabled() -{ - return mSession->isCheckCertificateEnabled(); -} - -void SMTPAsyncSession::setUseHeloIPEnabled(bool enabled) -{ - mSession->setUseHeloIPEnabled(enabled); -} - -bool SMTPAsyncSession::useHeloIPEnabled() -{ - return mSession->useHeloIPEnabled(); -} - -void SMTPAsyncSession::runOperation(SMTPOperation * operation) -{ - cancelDelayedPerformMethod((Object::Method) &SMTPAsyncSession::tryAutomaticDisconnectAfterDelay, NULL); - mQueue->addOperation(operation); -} - -SMTPSession * SMTPAsyncSession::session() -{ - return mSession; -} - -void SMTPAsyncSession::tryAutomaticDisconnect() -{ - // It's safe since no thread is running when this function is called. - if (mSession->isDisconnected()) { - return; - } - - cancelDelayedPerformMethod((Object::Method) &SMTPAsyncSession::tryAutomaticDisconnectAfterDelay, NULL); - performMethodAfterDelay((Object::Method) &SMTPAsyncSession::tryAutomaticDisconnectAfterDelay, NULL, 30); -} - -void SMTPAsyncSession::tryAutomaticDisconnectAfterDelay(void * context) -{ - SMTPDisconnectOperation * op = new SMTPDisconnectOperation(); - op->setSession(this); - op->autorelease(); - op->start(); -} - -SMTPOperation * SMTPAsyncSession::loginOperation() -{ - SMTPLoginOperation * op = new SMTPLoginOperation(); - op->setSession(this); - return (SMTPOperation *) op->autorelease(); -} - -SMTPOperation * SMTPAsyncSession::sendMessageOperation(Data * messageData) -{ - SMTPSendWithDataOperation * op = new SMTPSendWithDataOperation(); - op->setSession(this); - op->setMessageData(messageData); - return (SMTPOperation *) op->autorelease(); -} - -SMTPOperation * SMTPAsyncSession::sendMessageOperation(Address * from, Array * recipients, - Data * messageData) -{ - SMTPSendWithDataOperation * op = new SMTPSendWithDataOperation(); - op->setSession(this); - op->setMessageData(messageData); - op->setFrom(from); - op->setRecipients(recipients); - return (SMTPOperation *) op->autorelease(); -} - -SMTPOperation * SMTPAsyncSession::checkAccountOperation(Address * from) -{ - SMTPCheckAccountOperation * op = new SMTPCheckAccountOperation(); - op->setFrom(from); - op->setSession(this); - return (SMTPOperation *) op->autorelease(); -} - -SMTPOperation * SMTPAsyncSession::noopOperation() -{ - SMTPNoopOperation * op = new SMTPNoopOperation(); - op->setSession(this); - return (SMTPOperation *) op->autorelease(); -} - -void SMTPAsyncSession::setConnectionLogger(ConnectionLogger * logger) -{ - pthread_mutex_lock(&mConnectionLoggerLock); - mConnectionLogger = logger; - if (mConnectionLogger != NULL) { - mSession->setConnectionLogger(mInternalLogger); - } - else { - mSession->setConnectionLogger(NULL); - } - pthread_mutex_unlock(&mConnectionLoggerLock); -} - -ConnectionLogger * SMTPAsyncSession::connectionLogger() -{ - ConnectionLogger * result; - - pthread_mutex_lock(&mConnectionLoggerLock); - result = mConnectionLogger; - pthread_mutex_unlock(&mConnectionLoggerLock); - - return result; -} - -void SMTPAsyncSession::logConnection(ConnectionLogType logType, Data * buffer) -{ - pthread_mutex_lock(&mConnectionLoggerLock); - if (mConnectionLogger != NULL) { - mConnectionLogger->log(this, logType, buffer); - } - pthread_mutex_unlock(&mConnectionLoggerLock); -} - -#if __APPLE__ -void SMTPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue) -{ - mQueue->setDispatchQueue(dispatchQueue); -} - -dispatch_queue_t SMTPAsyncSession::dispatchQueue() -{ - return mQueue->dispatchQueue(); -} -#endif diff --git a/src/async/smtp/MCSMTPAsyncSession.cpp b/src/async/smtp/MCSMTPAsyncSession.cpp new file mode 100644 index 00000000..8acfc9c5 --- /dev/null +++ b/src/async/smtp/MCSMTPAsyncSession.cpp @@ -0,0 +1,294 @@ +#include "MCSMTPAsyncSession.h" + +#include "MCSMTPSession.h" +#include "MCSMTPLoginOperation.h" +#include "MCSMTPSendWithDataOperation.h" +#include "MCSMTPCheckAccountOperation.h" +#include "MCSMTPDisconnectOperation.h" +#include "MCSMTPNoopOperation.h" +#include "MCSMTPOperation.h" +#include "MCOperationQueueCallback.h" + +using namespace mailcore; + +namespace mailcore { + + class SMTPOperationQueueCallback : public Object, public OperationQueueCallback { + public: + SMTPOperationQueueCallback(SMTPAsyncSession * session) { + mSession = session; + } + + virtual ~SMTPOperationQueueCallback() { + } + + virtual void queueStartRunning() { + mSession->retain(); + } + + virtual void queueStoppedRunning() { + mSession->tryAutomaticDisconnect(); + mSession->release(); + } + + private: + SMTPAsyncSession * mSession; + }; + + class SMTPConnectionLogger : public Object, public ConnectionLogger { + public: + SMTPConnectionLogger(SMTPAsyncSession * session) { + mSession = session; + } + + virtual ~SMTPConnectionLogger() { + } + + virtual void log(void * sender, ConnectionLogType logType, Data * buffer) + { + mSession->logConnection(logType, buffer); + } + + private: + SMTPAsyncSession * mSession; + }; + +} + +SMTPAsyncSession::SMTPAsyncSession() +{ + mSession = new SMTPSession(); + mQueue = new OperationQueue(); + mQueueCallback = new SMTPOperationQueueCallback(this); + mQueue->setCallback(mQueueCallback); + mConnectionLogger = NULL; + pthread_mutex_init(&mConnectionLoggerLock, NULL); + mInternalLogger = new SMTPConnectionLogger(this); + mSession->setConnectionLogger(mInternalLogger); +} + +SMTPAsyncSession::~SMTPAsyncSession() +{ + MC_SAFE_RELEASE(mInternalLogger); + pthread_mutex_destroy(&mConnectionLoggerLock); + cancelDelayedPerformMethod((Object::Method) &SMTPAsyncSession::tryAutomaticDisconnectAfterDelay, NULL); + MC_SAFE_RELEASE(mQueueCallback); + MC_SAFE_RELEASE(mQueue); + MC_SAFE_RELEASE(mSession); +} + +void SMTPAsyncSession::setHostname(String * hostname) +{ + mSession->setHostname(hostname); +} + +String * SMTPAsyncSession::hostname() +{ + return mSession->hostname(); +} + +void SMTPAsyncSession::setPort(unsigned int port) +{ + mSession->setPort(port); +} + +unsigned int SMTPAsyncSession::port() +{ + return mSession->port(); +} + +void SMTPAsyncSession::setUsername(String * username) +{ + return mSession->setUsername(username); +} + +String * SMTPAsyncSession::username() +{ + return mSession->username(); +} + +void SMTPAsyncSession::setPassword(String * password) +{ + mSession->setPassword(password); +} + +String * SMTPAsyncSession::password() +{ + return mSession->password(); +} + +void SMTPAsyncSession::setOAuth2Token(String * token) +{ + mSession->setOAuth2Token(token); +} + +String * SMTPAsyncSession::OAuth2Token() +{ + return mSession->OAuth2Token(); +} + +void SMTPAsyncSession::setAuthType(AuthType authType) +{ + mSession->setAuthType(authType); +} + +AuthType SMTPAsyncSession::authType() +{ + return mSession->authType(); +} + +void SMTPAsyncSession::setConnectionType(ConnectionType connectionType) +{ + mSession->setConnectionType(connectionType); +} + +ConnectionType SMTPAsyncSession::connectionType() +{ + return mSession->connectionType(); +} + +void SMTPAsyncSession::setTimeout(time_t timeout) +{ + return mSession->setTimeout(timeout); +} + +time_t SMTPAsyncSession::timeout() +{ + return mSession->timeout(); +} + +void SMTPAsyncSession::setCheckCertificateEnabled(bool enabled) +{ + return mSession->setCheckCertificateEnabled(enabled); +} + +bool SMTPAsyncSession::isCheckCertificateEnabled() +{ + return mSession->isCheckCertificateEnabled(); +} + +void SMTPAsyncSession::setUseHeloIPEnabled(bool enabled) +{ + mSession->setUseHeloIPEnabled(enabled); +} + +bool SMTPAsyncSession::useHeloIPEnabled() +{ + return mSession->useHeloIPEnabled(); +} + +void SMTPAsyncSession::runOperation(SMTPOperation * operation) +{ + cancelDelayedPerformMethod((Object::Method) &SMTPAsyncSession::tryAutomaticDisconnectAfterDelay, NULL); + mQueue->addOperation(operation); +} + +SMTPSession * SMTPAsyncSession::session() +{ + return mSession; +} + +void SMTPAsyncSession::tryAutomaticDisconnect() +{ + // It's safe since no thread is running when this function is called. + if (mSession->isDisconnected()) { + return; + } + + cancelDelayedPerformMethod((Object::Method) &SMTPAsyncSession::tryAutomaticDisconnectAfterDelay, NULL); + performMethodAfterDelay((Object::Method) &SMTPAsyncSession::tryAutomaticDisconnectAfterDelay, NULL, 30); +} + +void SMTPAsyncSession::tryAutomaticDisconnectAfterDelay(void * context) +{ + SMTPDisconnectOperation * op = new SMTPDisconnectOperation(); + op->setSession(this); + op->autorelease(); + op->start(); +} + +SMTPOperation * SMTPAsyncSession::loginOperation() +{ + SMTPLoginOperation * op = new SMTPLoginOperation(); + op->setSession(this); + return (SMTPOperation *) op->autorelease(); +} + +SMTPOperation * SMTPAsyncSession::sendMessageOperation(Data * messageData) +{ + SMTPSendWithDataOperation * op = new SMTPSendWithDataOperation(); + op->setSession(this); + op->setMessageData(messageData); + return (SMTPOperation *) op->autorelease(); +} + +SMTPOperation * SMTPAsyncSession::sendMessageOperation(Address * from, Array * recipients, + Data * messageData) +{ + SMTPSendWithDataOperation * op = new SMTPSendWithDataOperation(); + op->setSession(this); + op->setMessageData(messageData); + op->setFrom(from); + op->setRecipients(recipients); + return (SMTPOperation *) op->autorelease(); +} + +SMTPOperation * SMTPAsyncSession::checkAccountOperation(Address * from) +{ + SMTPCheckAccountOperation * op = new SMTPCheckAccountOperation(); + op->setFrom(from); + op->setSession(this); + return (SMTPOperation *) op->autorelease(); +} + +SMTPOperation * SMTPAsyncSession::noopOperation() +{ + SMTPNoopOperation * op = new SMTPNoopOperation(); + op->setSession(this); + return (SMTPOperation *) op->autorelease(); +} + +void SMTPAsyncSession::setConnectionLogger(ConnectionLogger * logger) +{ + pthread_mutex_lock(&mConnectionLoggerLock); + mConnectionLogger = logger; + if (mConnectionLogger != NULL) { + mSession->setConnectionLogger(mInternalLogger); + } + else { + mSession->setConnectionLogger(NULL); + } + pthread_mutex_unlock(&mConnectionLoggerLock); +} + +ConnectionLogger * SMTPAsyncSession::connectionLogger() +{ + ConnectionLogger * result; + + pthread_mutex_lock(&mConnectionLoggerLock); + result = mConnectionLogger; + pthread_mutex_unlock(&mConnectionLoggerLock); + + return result; +} + +void SMTPAsyncSession::logConnection(ConnectionLogType logType, Data * buffer) +{ + pthread_mutex_lock(&mConnectionLoggerLock); + if (mConnectionLogger != NULL) { + mConnectionLogger->log(this, logType, buffer); + } + pthread_mutex_unlock(&mConnectionLoggerLock); +} + +#if __APPLE__ +void SMTPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue) +{ + mQueue->setDispatchQueue(dispatchQueue); +} + +dispatch_queue_t SMTPAsyncSession::dispatchQueue() +{ + return mQueue->dispatchQueue(); +} +#endif diff --git a/src/async/smtp/MCSMTPCheckAccountOperation.cc b/src/async/smtp/MCSMTPCheckAccountOperation.cc deleted file mode 100644 index f711c6ec..00000000 --- a/src/async/smtp/MCSMTPCheckAccountOperation.cc +++ /dev/null @@ -1,42 +0,0 @@ -// -// MCSMTPCheckAccountOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/12/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCSMTPCheckAccountOperation.h" - -#include "MCSMTPAsyncSession.h" -#include "MCSMTPSession.h" - -using namespace mailcore; - -SMTPCheckAccountOperation::SMTPCheckAccountOperation() -{ - mFrom = NULL; -} - -SMTPCheckAccountOperation::~SMTPCheckAccountOperation() -{ - MC_SAFE_RELEASE(mFrom); -} - -void SMTPCheckAccountOperation::setFrom(Address * from) -{ - MC_SAFE_REPLACE_RETAIN(Address, mFrom, from); -} - -Address * SMTPCheckAccountOperation::from() -{ - return mFrom; -} - -void SMTPCheckAccountOperation::main() -{ - ErrorCode error; - - session()->session()->checkAccount(mFrom, &error); - setError(error); -} diff --git a/src/async/smtp/MCSMTPCheckAccountOperation.cpp b/src/async/smtp/MCSMTPCheckAccountOperation.cpp new file mode 100644 index 00000000..f711c6ec --- /dev/null +++ b/src/async/smtp/MCSMTPCheckAccountOperation.cpp @@ -0,0 +1,42 @@ +// +// MCSMTPCheckAccountOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCSMTPCheckAccountOperation.h" + +#include "MCSMTPAsyncSession.h" +#include "MCSMTPSession.h" + +using namespace mailcore; + +SMTPCheckAccountOperation::SMTPCheckAccountOperation() +{ + mFrom = NULL; +} + +SMTPCheckAccountOperation::~SMTPCheckAccountOperation() +{ + MC_SAFE_RELEASE(mFrom); +} + +void SMTPCheckAccountOperation::setFrom(Address * from) +{ + MC_SAFE_REPLACE_RETAIN(Address, mFrom, from); +} + +Address * SMTPCheckAccountOperation::from() +{ + return mFrom; +} + +void SMTPCheckAccountOperation::main() +{ + ErrorCode error; + + session()->session()->checkAccount(mFrom, &error); + setError(error); +} diff --git a/src/async/smtp/MCSMTPDisconnectOperation.cc b/src/async/smtp/MCSMTPDisconnectOperation.cc deleted file mode 100644 index ba20567b..00000000 --- a/src/async/smtp/MCSMTPDisconnectOperation.cc +++ /dev/null @@ -1,28 +0,0 @@ -// -// SMTPDisconnectOperation.cpp -// mailcore2 -// -// Created by DINH Viêt Hoà on 6/22/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCSMTPDisconnectOperation.h" - -#include "MCSMTPAsyncSession.h" -#include "MCSMTPSession.h" - -using namespace mailcore; - -SMTPDisconnectOperation::SMTPDisconnectOperation() -{ -} - -SMTPDisconnectOperation::~SMTPDisconnectOperation() -{ -} - -void SMTPDisconnectOperation::main() -{ - session()->session()->disconnect(); - setError(ErrorNone); -} diff --git a/src/async/smtp/MCSMTPDisconnectOperation.cpp b/src/async/smtp/MCSMTPDisconnectOperation.cpp new file mode 100644 index 00000000..ba20567b --- /dev/null +++ b/src/async/smtp/MCSMTPDisconnectOperation.cpp @@ -0,0 +1,28 @@ +// +// SMTPDisconnectOperation.cpp +// mailcore2 +// +// Created by DINH Viêt Hoà on 6/22/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCSMTPDisconnectOperation.h" + +#include "MCSMTPAsyncSession.h" +#include "MCSMTPSession.h" + +using namespace mailcore; + +SMTPDisconnectOperation::SMTPDisconnectOperation() +{ +} + +SMTPDisconnectOperation::~SMTPDisconnectOperation() +{ +} + +void SMTPDisconnectOperation::main() +{ + session()->session()->disconnect(); + setError(ErrorNone); +} diff --git a/src/async/smtp/MCSMTPLoginOperation.cc b/src/async/smtp/MCSMTPLoginOperation.cc deleted file mode 100644 index 58866df9..00000000 --- a/src/async/smtp/MCSMTPLoginOperation.cc +++ /dev/null @@ -1,29 +0,0 @@ -// -// MCSMTPLoginOperation.cc -// mailcore2 -// -// Created by Hironori Yoshida on 10/29/14. -// Copyright (c) 2014 MailCore. All rights reserved. -// - -#include "MCSMTPLoginOperation.h" - -#include "MCSMTPAsyncSession.h" -#include "MCSMTPSession.h" - -using namespace mailcore; - -SMTPLoginOperation::SMTPLoginOperation() -{ -} - -SMTPLoginOperation::~SMTPLoginOperation() -{ -} - -void SMTPLoginOperation::main() -{ - ErrorCode error; - session()->session()->loginIfNeeded(&error); - setError(error); -} diff --git a/src/async/smtp/MCSMTPLoginOperation.cpp b/src/async/smtp/MCSMTPLoginOperation.cpp new file mode 100644 index 00000000..58866df9 --- /dev/null +++ b/src/async/smtp/MCSMTPLoginOperation.cpp @@ -0,0 +1,29 @@ +// +// MCSMTPLoginOperation.cc +// mailcore2 +// +// Created by Hironori Yoshida on 10/29/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCSMTPLoginOperation.h" + +#include "MCSMTPAsyncSession.h" +#include "MCSMTPSession.h" + +using namespace mailcore; + +SMTPLoginOperation::SMTPLoginOperation() +{ +} + +SMTPLoginOperation::~SMTPLoginOperation() +{ +} + +void SMTPLoginOperation::main() +{ + ErrorCode error; + session()->session()->loginIfNeeded(&error); + setError(error); +} diff --git a/src/async/smtp/MCSMTPNoopOperation.cc b/src/async/smtp/MCSMTPNoopOperation.cc deleted file mode 100644 index 310ccb8e..00000000 --- a/src/async/smtp/MCSMTPNoopOperation.cc +++ /dev/null @@ -1,29 +0,0 @@ -// -// MCSMTPNoopOperation.cc -// mailcore2 -// -// Created by Robert Widmann on 9/24/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCSMTPNoopOperation.h" - -#include "MCSMTPAsyncSession.h" -#include "MCSMTPSession.h" - -using namespace mailcore; - -SMTPNoopOperation::SMTPNoopOperation() -{ -} - -SMTPNoopOperation::~SMTPNoopOperation() -{ -} - -void SMTPNoopOperation::main() -{ - ErrorCode error; - session()->session()->noop(&error); - setError(error); -} diff --git a/src/async/smtp/MCSMTPNoopOperation.cpp b/src/async/smtp/MCSMTPNoopOperation.cpp new file mode 100644 index 00000000..310ccb8e --- /dev/null +++ b/src/async/smtp/MCSMTPNoopOperation.cpp @@ -0,0 +1,29 @@ +// +// MCSMTPNoopOperation.cc +// mailcore2 +// +// Created by Robert Widmann on 9/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCSMTPNoopOperation.h" + +#include "MCSMTPAsyncSession.h" +#include "MCSMTPSession.h" + +using namespace mailcore; + +SMTPNoopOperation::SMTPNoopOperation() +{ +} + +SMTPNoopOperation::~SMTPNoopOperation() +{ +} + +void SMTPNoopOperation::main() +{ + ErrorCode error; + session()->session()->noop(&error); + setError(error); +} diff --git a/src/async/smtp/MCSMTPOperation.cc b/src/async/smtp/MCSMTPOperation.cc deleted file mode 100644 index 9ddcede2..00000000 --- a/src/async/smtp/MCSMTPOperation.cc +++ /dev/null @@ -1,102 +0,0 @@ -// -// MCSMTPOperation.cpp -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/11/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCSMTPOperation.h" - -#include - -#include "MCSMTPAsyncSession.h" -#include "MCSMTPOperationCallback.h" - -using namespace mailcore; - -SMTPOperation::SMTPOperation() -{ - mSession = NULL; - mError = ErrorNone; -} - -SMTPOperation::~SMTPOperation() -{ - MC_SAFE_RELEASE(mSession); -} - -void SMTPOperation::setSession(SMTPAsyncSession * session) -{ - MC_SAFE_REPLACE_RETAIN(SMTPAsyncSession, mSession, session); -#if __APPLE__ - dispatch_queue_t queue; - if (session != NULL) { - queue = session->dispatchQueue(); - } - else { - queue = dispatch_get_main_queue(); - } - setCallbackDispatchQueue(queue); -#endif -} - -SMTPAsyncSession * SMTPOperation::session() -{ - return mSession; -} - -void SMTPOperation::start() -{ - mSession->runOperation(this); -} - -void SMTPOperation::setSmtpCallback(SMTPOperationCallback * callback) -{ - mSmtpCallback = callback; -} - -SMTPOperationCallback * SMTPOperation::smtpCallback() -{ - return mSmtpCallback; -} - -void SMTPOperation::setError(ErrorCode error) -{ - mError = error; -} - -ErrorCode SMTPOperation::error() -{ - return mError; -} - -struct progressContext { - unsigned int current; - unsigned int maximum; -}; - -void SMTPOperation::bodyProgress(SMTPSession * session, unsigned int current, unsigned int maximum) -{ - struct progressContext * context = (struct progressContext *) calloc(sizeof(* context), 1); - context->current = current; - context->maximum = maximum; - - retain(); - performMethodOnCallbackThread((Object::Method) &SMTPOperation::bodyProgressOnMainThread, context); -} - -void SMTPOperation::bodyProgressOnMainThread(void * ctx) -{ - if (isCancelled()) { - release(); - return; - } - - struct progressContext * context = (struct progressContext *) ctx; - if (mSmtpCallback != NULL) { - mSmtpCallback->bodyProgress(this, context->current, context->maximum); - } - free(context); - release(); -} diff --git a/src/async/smtp/MCSMTPOperation.cpp b/src/async/smtp/MCSMTPOperation.cpp new file mode 100644 index 00000000..9ddcede2 --- /dev/null +++ b/src/async/smtp/MCSMTPOperation.cpp @@ -0,0 +1,102 @@ +// +// MCSMTPOperation.cpp +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/11/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCSMTPOperation.h" + +#include + +#include "MCSMTPAsyncSession.h" +#include "MCSMTPOperationCallback.h" + +using namespace mailcore; + +SMTPOperation::SMTPOperation() +{ + mSession = NULL; + mError = ErrorNone; +} + +SMTPOperation::~SMTPOperation() +{ + MC_SAFE_RELEASE(mSession); +} + +void SMTPOperation::setSession(SMTPAsyncSession * session) +{ + MC_SAFE_REPLACE_RETAIN(SMTPAsyncSession, mSession, session); +#if __APPLE__ + dispatch_queue_t queue; + if (session != NULL) { + queue = session->dispatchQueue(); + } + else { + queue = dispatch_get_main_queue(); + } + setCallbackDispatchQueue(queue); +#endif +} + +SMTPAsyncSession * SMTPOperation::session() +{ + return mSession; +} + +void SMTPOperation::start() +{ + mSession->runOperation(this); +} + +void SMTPOperation::setSmtpCallback(SMTPOperationCallback * callback) +{ + mSmtpCallback = callback; +} + +SMTPOperationCallback * SMTPOperation::smtpCallback() +{ + return mSmtpCallback; +} + +void SMTPOperation::setError(ErrorCode error) +{ + mError = error; +} + +ErrorCode SMTPOperation::error() +{ + return mError; +} + +struct progressContext { + unsigned int current; + unsigned int maximum; +}; + +void SMTPOperation::bodyProgress(SMTPSession * session, unsigned int current, unsigned int maximum) +{ + struct progressContext * context = (struct progressContext *) calloc(sizeof(* context), 1); + context->current = current; + context->maximum = maximum; + + retain(); + performMethodOnCallbackThread((Object::Method) &SMTPOperation::bodyProgressOnMainThread, context); +} + +void SMTPOperation::bodyProgressOnMainThread(void * ctx) +{ + if (isCancelled()) { + release(); + return; + } + + struct progressContext * context = (struct progressContext *) ctx; + if (mSmtpCallback != NULL) { + mSmtpCallback->bodyProgress(this, context->current, context->maximum); + } + free(context); + release(); +} diff --git a/src/async/smtp/MCSMTPSendWithDataOperation.cc b/src/async/smtp/MCSMTPSendWithDataOperation.cc deleted file mode 100644 index 03f6a530..00000000 --- a/src/async/smtp/MCSMTPSendWithDataOperation.cc +++ /dev/null @@ -1,70 +0,0 @@ -// -// SMTPSendWithDataOperation.cc -// mailcore2 -// -// Created by DINH Viêt Hoà on 1/10/13. -// Copyright (c) 2013 MailCore. All rights reserved. -// - -#include "MCSMTPSendWithDataOperation.h" - -#include "MCSMTPAsyncSession.h" -#include "MCSMTPSession.h" - -using namespace mailcore; - -SMTPSendWithDataOperation::SMTPSendWithDataOperation() -{ - mMessageData = NULL; - mFrom = NULL; - mRecipients = NULL; -} - -SMTPSendWithDataOperation::~SMTPSendWithDataOperation() -{ - MC_SAFE_RELEASE(mFrom); - MC_SAFE_RELEASE(mRecipients); - MC_SAFE_RELEASE(mMessageData); -} - -void SMTPSendWithDataOperation::setMessageData(Data * data) -{ - MC_SAFE_REPLACE_RETAIN(Data, mMessageData, data); -} - -Data * SMTPSendWithDataOperation::messageData() -{ - return mMessageData; -} - -void SMTPSendWithDataOperation::setFrom(Address * from) -{ - MC_SAFE_REPLACE_COPY(Address, mFrom, from); -} - -Address * SMTPSendWithDataOperation::from() -{ - return mFrom; -} - -void SMTPSendWithDataOperation::setRecipients(Array * recipients) -{ - MC_SAFE_REPLACE_COPY(Array, mRecipients, recipients); -} - -Array * SMTPSendWithDataOperation::recipients() -{ - return mRecipients; -} - -void SMTPSendWithDataOperation::main() -{ - ErrorCode error; - if ((mFrom != NULL) && (mRecipients != NULL)) { - session()->session()->sendMessage(mFrom, mRecipients, mMessageData, this, &error); - } - else { - session()->session()->sendMessage(mMessageData, this, &error); - } - setError(error); -} diff --git a/src/async/smtp/MCSMTPSendWithDataOperation.cpp b/src/async/smtp/MCSMTPSendWithDataOperation.cpp new file mode 100644 index 00000000..03f6a530 --- /dev/null +++ b/src/async/smtp/MCSMTPSendWithDataOperation.cpp @@ -0,0 +1,70 @@ +// +// SMTPSendWithDataOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCSMTPSendWithDataOperation.h" + +#include "MCSMTPAsyncSession.h" +#include "MCSMTPSession.h" + +using namespace mailcore; + +SMTPSendWithDataOperation::SMTPSendWithDataOperation() +{ + mMessageData = NULL; + mFrom = NULL; + mRecipients = NULL; +} + +SMTPSendWithDataOperation::~SMTPSendWithDataOperation() +{ + MC_SAFE_RELEASE(mFrom); + MC_SAFE_RELEASE(mRecipients); + MC_SAFE_RELEASE(mMessageData); +} + +void SMTPSendWithDataOperation::setMessageData(Data * data) +{ + MC_SAFE_REPLACE_RETAIN(Data, mMessageData, data); +} + +Data * SMTPSendWithDataOperation::messageData() +{ + return mMessageData; +} + +void SMTPSendWithDataOperation::setFrom(Address * from) +{ + MC_SAFE_REPLACE_COPY(Address, mFrom, from); +} + +Address * SMTPSendWithDataOperation::from() +{ + return mFrom; +} + +void SMTPSendWithDataOperation::setRecipients(Array * recipients) +{ + MC_SAFE_REPLACE_COPY(Array, mRecipients, recipients); +} + +Array * SMTPSendWithDataOperation::recipients() +{ + return mRecipients; +} + +void SMTPSendWithDataOperation::main() +{ + ErrorCode error; + if ((mFrom != NULL) && (mRecipients != NULL)) { + session()->session()->sendMessage(mFrom, mRecipients, mMessageData, this, &error); + } + else { + session()->session()->sendMessage(mMessageData, this, &error); + } + setError(error); +} -- cgit v1.2.3