aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/async/smtp/MCSMTPOperation.cc
diff options
context:
space:
mode:
authorGravatar DINH Viet Hoa <hoa@sprw.me>2013-01-12 00:41:23 -0800
committerGravatar DINH Viet Hoa <hoa@sprw.me>2013-01-12 00:41:23 -0800
commit70f53398659fb9305f6bf88e33c84327c61829d5 (patch)
tree8c3c5678a9934eac75c1a167e48e6a010e3a0d4e /src/async/smtp/MCSMTPOperation.cc
parent7b04566d191b27d8018fd486570a12b6f1049a16 (diff)
added check SMTP account
Diffstat (limited to 'src/async/smtp/MCSMTPOperation.cc')
-rw-r--r--src/async/smtp/MCSMTPOperation.cc85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/async/smtp/MCSMTPOperation.cc b/src/async/smtp/MCSMTPOperation.cc
new file mode 100644
index 00000000..532c6ab4
--- /dev/null
+++ b/src/async/smtp/MCSMTPOperation.cc
@@ -0,0 +1,85 @@
+//
+// 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);
+}
+
+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;
+ performMethodOnMainThread((Object::Method) &SMTPOperation::bodyProgressOnMainThread, context);
+}
+
+void SMTPOperation::bodyProgressOnMainThread(void * ctx)
+{
+ struct progressContext * context = (struct progressContext *) ctx;
+ if (mSmtpCallback != NULL) {
+ mSmtpCallback->bodyProgress(this, context->current, context->maximum);
+ }
+ free(context);
+}
+