aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/async/pop/MCPOPOperation.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/async/pop/MCPOPOperation.cc')
-rw-r--r--src/async/pop/MCPOPOperation.cc86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/async/pop/MCPOPOperation.cc b/src/async/pop/MCPOPOperation.cc
new file mode 100644
index 00000000..7fb279d6
--- /dev/null
+++ b/src/async/pop/MCPOPOperation.cc
@@ -0,0 +1,86 @@
+//
+// MCPOPOperation.cc
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 1/16/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#include "MCPOPOperation.h"
+
+#include <stdlib.h>
+
+#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);
+}
+
+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;
+ performMethodOnMainThread((Object::Method) &POPOperation::bodyProgressOnMainThread, context);
+}
+
+void POPOperation::bodyProgressOnMainThread(void * ctx)
+{
+ struct progressContext * context = (struct progressContext *) ctx;
+ if (mPopCallback != NULL) {
+ mPopCallback->bodyProgress(this, context->current, context->maximum);
+ }
+ free(context);
+}