diff options
Diffstat (limited to 'src/async/pop/MCPOPOperation.cc')
-rw-r--r-- | src/async/pop/MCPOPOperation.cc | 86 |
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); +} |