aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/basetypes/MCOperation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/basetypes/MCOperation.cpp')
-rw-r--r--src/core/basetypes/MCOperation.cpp107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/core/basetypes/MCOperation.cpp b/src/core/basetypes/MCOperation.cpp
new file mode 100644
index 00000000..51497cba
--- /dev/null
+++ b/src/core/basetypes/MCOperation.cpp
@@ -0,0 +1,107 @@
+#include "MCOperation.h"
+
+using namespace mailcore;
+
+Operation::Operation()
+{
+ mCallback = NULL;
+ mCancelled = false;
+ mShouldRunWhenCancelled = false;
+ pthread_mutex_init(&mLock, NULL);
+#if __APPLE__
+ mCallbackDispatchQueue = dispatch_get_main_queue();
+#endif
+}
+
+Operation::~Operation()
+{
+#if __APPLE__
+ if (mCallbackDispatchQueue != NULL) {
+ dispatch_release(mCallbackDispatchQueue);
+ }
+#endif
+ pthread_mutex_destroy(&mLock);
+}
+
+void Operation::setCallback(OperationCallback * callback)
+{
+ mCallback = callback;
+}
+
+OperationCallback * Operation::callback()
+{
+ return mCallback;
+}
+
+void Operation::cancel()
+{
+ pthread_mutex_lock(&mLock);
+ mCancelled = true;
+ pthread_mutex_unlock(&mLock);
+}
+
+bool Operation::isCancelled()
+{
+ pthread_mutex_lock(&mLock);
+ bool value = mCancelled;
+ pthread_mutex_unlock(&mLock);
+
+ return value;
+}
+
+bool Operation::shouldRunWhenCancelled()
+{
+ return mShouldRunWhenCancelled;
+}
+
+void Operation::setShouldRunWhenCancelled(bool shouldRunWhenCancelled)
+{
+ mShouldRunWhenCancelled = shouldRunWhenCancelled;
+}
+
+void Operation::beforeMain()
+{
+}
+
+void Operation::main()
+{
+}
+
+void Operation::afterMain()
+{
+}
+
+void Operation::start()
+{
+}
+
+#if __APPLE__
+void Operation::setCallbackDispatchQueue(dispatch_queue_t callbackDispatchQueue)
+{
+ if (mCallbackDispatchQueue != NULL) {
+ dispatch_release(mCallbackDispatchQueue);
+ }
+ mCallbackDispatchQueue = callbackDispatchQueue;
+ if (mCallbackDispatchQueue != NULL) {
+ dispatch_retain(mCallbackDispatchQueue);
+ }
+}
+
+dispatch_queue_t Operation::callbackDispatchQueue()
+{
+ return mCallbackDispatchQueue;
+}
+#endif
+
+void Operation::performMethodOnCallbackThread(Method method, void * context, bool waitUntilDone)
+{
+#if __APPLE__
+ dispatch_queue_t queue = mCallbackDispatchQueue;
+ if (queue == NULL) {
+ queue = dispatch_get_main_queue();
+ }
+ performMethodOnDispatchQueue(method, context, queue, waitUntilDone);
+#else
+ performMethodOnMainThread(method, context, waitUntilDone);
+#endif
+}