diff options
-rw-r--r-- | src/core/basetypes/MCOperation.cc | 30 | ||||
-rw-r--r-- | src/core/basetypes/MCOperation.h | 42 | ||||
-rw-r--r-- | src/objc/utils/MCOOperation.h | 11 | ||||
-rw-r--r-- | src/objc/utils/MCOOperation.mm | 2 |
4 files changed, 46 insertions, 39 deletions
diff --git a/src/core/basetypes/MCOperation.cc b/src/core/basetypes/MCOperation.cc index 5829d739..0995340b 100644 --- a/src/core/basetypes/MCOperation.cc +++ b/src/core/basetypes/MCOperation.cc @@ -4,11 +4,11 @@ using namespace mailcore; Operation::Operation() { - mCallback = NULL; - mCancelled = false; - pthread_mutex_init(&mLock, NULL); + mCallback = NULL; + mCancelled = false; + pthread_mutex_init(&mLock, NULL); #if __APPLE__ - mCallbackDispatchQueue = dispatch_get_current_queue(); + mCallbackDispatchQueue = dispatch_get_main_queue(); #else mCallbackDispatchQueue = NULL; #endif @@ -16,33 +16,33 @@ Operation::Operation() Operation::~Operation() { - pthread_mutex_destroy(&mLock); + pthread_mutex_destroy(&mLock); } void Operation::setCallback(OperationCallback * callback) { - mCallback = callback; + mCallback = callback; } OperationCallback * Operation::callback() { - return mCallback; + return mCallback; } void Operation::cancel() { - pthread_mutex_lock(&mLock); - mCancelled = true; - pthread_mutex_unlock(&mLock); + 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; + pthread_mutex_lock(&mLock); + bool value = mCancelled; + pthread_mutex_unlock(&mLock); + + return value; } void Operation::beforeMain() diff --git a/src/core/basetypes/MCOperation.h b/src/core/basetypes/MCOperation.h index db0e5b35..bd61e073 100644 --- a/src/core/basetypes/MCOperation.h +++ b/src/core/basetypes/MCOperation.h @@ -13,23 +13,23 @@ namespace mailcore { - class OperationCallback; - - class Operation : public Object { - public: - Operation(); - virtual ~Operation(); - - virtual void setCallback(OperationCallback * callback); - virtual OperationCallback * callback(); + class OperationCallback; + + class Operation : public Object { + public: + Operation(); + virtual ~Operation(); + + virtual void setCallback(OperationCallback * callback); + virtual OperationCallback * callback(); + + virtual void cancel(); + virtual bool isCancelled(); - virtual void cancel(); - virtual bool isCancelled(); - // Will be called on main thread. virtual void beforeMain(); - virtual void main(); + virtual void main(); // Will be called on main thread. virtual void afterMain(); @@ -40,17 +40,17 @@ namespace mailcore { virtual void setCallbackDispatchQueue(dispatch_queue_t callbackDispatchQueue); virtual dispatch_queue_t callbackDispatchQueue(); #endif - - private: - OperationCallback * mCallback; - bool mCancelled; - pthread_mutex_t mLock; + + private: + OperationCallback * mCallback; + bool mCancelled; + pthread_mutex_t mLock; #ifdef __APPLE__ dispatch_queue_t mCallbackDispatchQueue; #endif - - }; - + + }; + } #endif diff --git a/src/objc/utils/MCOOperation.h b/src/objc/utils/MCOOperation.h index 3f6b42c5..08e74d84 100644 --- a/src/objc/utils/MCOOperation.h +++ b/src/objc/utils/MCOOperation.h @@ -14,15 +14,20 @@ @interface MCOOperation : NSObject +/** Returns whether the operation is cancelled.*/ @property (readonly) BOOL isCancelled; -// This methods is called on the main thread when the asynchronous operation is finished. -// Needs to be overriden by subclasses. +/** The queue this operation dispatches the callback on. Defaults to the main queue.*/ +@property (nonatomic, assign) dispatch_queue_t callbackDispatchQueue; + +/** This methods is called on the main thread when the asynchronous operation is finished. + Needs to be overriden by subclasses.*/ - (void) operationCompleted; -// Cancel the operation. +/** Cancel the operation.*/ - (void) cancel; + @end #endif diff --git a/src/objc/utils/MCOOperation.mm b/src/objc/utils/MCOOperation.mm index 37146b39..7502afae 100644 --- a/src/objc/utils/MCOOperation.mm +++ b/src/objc/utils/MCOOperation.mm @@ -81,6 +81,8 @@ public: return MCO_NATIVE_INSTANCE->isCancelled(); } +MCO_OBJC_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setCallbackDispatchQueue, callbackDispatchQueue); + - (void) cancel { if (_started) { |