diff options
author | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2014-11-19 00:48:34 -0800 |
---|---|---|
committer | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2014-11-19 00:48:34 -0800 |
commit | e3c45123799d84b0ff85035db606cc36b8379427 (patch) | |
tree | 17b16bd16f57d097eae1458e8fa10943fb75e54c /src/async/smtp/MCSMTPOperation.cpp | |
parent | b030d6139ba3f0eb39818ce6f9852e48db079feb (diff) |
Renamed .cc files to .cpp (fixed #983)
Diffstat (limited to 'src/async/smtp/MCSMTPOperation.cpp')
-rw-r--r-- | src/async/smtp/MCSMTPOperation.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
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 <stdlib.h> + +#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(); +} |