diff -r 6385c4c93049 -r 8e6fa1719340 pushmtm/MtmUtilInc/PushAsyncOpRunner.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pushmtm/MtmUtilInc/PushAsyncOpRunner.h Wed Sep 01 12:31:04 2010 +0100 @@ -0,0 +1,172 @@ +/* +* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This file contains the class definition of CPushAsyncOpRunner. +* +* +*/ + + + +#ifndef PUSHASYNCOPRUNNER_H +#define PUSHASYNCOPRUNNER_H + +// INCLUDES + +#include "PushMtmOperation.h" +#include +#include + +// FORWARD DECLARATIONS + +class CMsvSession; +class CMsvOperation; + +// CLASS DECLARATION + +/** +* This class is intended as a base class of asynchronous ui operations. +* It provides the syntax, and the semantics should be implemented by derived classes: +* default implementations are provided, and derived classes may override this. +* The main goal was to make those Push Mtm Ui's functions asynchronous, that are +* really asynchronous, and avoid making them synchronous with using +* CActiveScheduler::Start() and CActiveScheduler::Stop(). This makes the +* design clearer and may prevent some problems raised by the usage of Start()'s and +* Stop()'s. +*/ +class CPushAsyncOpRunner : public CPushMtmOperation + { + public: // Functions from base classes + + /** + * Start or restart the operation. OnStartupL is called. See OnStartupL. + * @return None. + */ + IMPORT_C void StartL(); + + /** + * Get progress information. + * @return A package buffer (of type TPushMtmProgressBuf), containing + * progress information. + */ + IMPORT_C const TDesC8& ProgressL(); + + protected: // Constructors and destructor + + /** + * Constructor. CActiveScheduler::Add( this ) is called. Derived + * classes shouldn't call CActiveScheduler::Add( this ) in their constructor. + * @param aSession Msv session to use. + * @param aEntryId Id of the context to operate on. + * @param aObserverStatus Observer status. + * @return None. + */ + IMPORT_C CPushAsyncOpRunner( CMsvSession& aSession, + const TMsvId aEntryId, + TRequestStatus& aObserverStatus ); + + /** + * Destructor. + */ + IMPORT_C virtual ~CPushAsyncOpRunner(); + + protected: // New functions + + /** + * This method is called from StartL. Default implementation returns ETrue + * and sets aIsObserving to EFalse. + * @param aIsObserving Used only if the function returns EFalse. + * In this case + * indicate in this variable if this operation observes + * an other one. If so, then it is set to active, but + * not completed - this will be made by the observed + * operation. + * Derived classes may override this. + * @return Return ETrue if the operation has completed. Return EFalse + * if the operation has not completed yet. In the latter case + * parameter aIsObserving is also used. + */ + IMPORT_C virtual TBool OnStartupL( TBool& aIsObserving ); + + /** + * This method is called from RunL. Default implementation returns ETrue + * and sets aIsObserving to EFalse. + * @param aIsObserving Used only if the function returns EFalse. + * In this case + * indicate in this variable if this operation observes + * an other one. If so, then it is set to active, but + * not completed - this will be made by the observed + * operation. + * Derived classes may override this. + * @return Return ETrue if the operation has completed. Return EFalse + * if the operation has not completed yet. In the latter case + * parameter aIsObserving is also used. + */ + IMPORT_C virtual TBool OnRunLActionL( TBool& aIsObserving ); + + /** + * Set observed operation and take ownership. + * @param aOp The operation. + * @return None. + */ + IMPORT_C void SetOperation( CMsvOperation* aOp ); + + /** + * Delete the observed operation. + * @return None. + */ + IMPORT_C void DeleteOperation(); + + /** + * Return the observed operation. + * @return The operation. + */ + IMPORT_C CMsvOperation& Operation(); + + protected: // Functions from base classes + + /** + * RunL protocol implementation. See OnRunLActionL. + * @return None. + */ + IMPORT_C void RunL(); + + /** + * Default implementation cancels the observed operation, and + * completes the observer with KErrCancel. + * Derived classes may override this. + * @return None. + */ + IMPORT_C void DoCancel(); + + /** + * Default implementation cancels the observed operation, + * completes the observer with aError and forwards the + * error to the scheduler. + * Derived classes may override this. + * @param aError Leave code. + * @return aError. + */ + IMPORT_C TInt RunError( TInt aError ); + + private: // Data members + + TBool iReady; ///< ETrue, if the operation is ready. + CMsvOperation* iOperation; ///< The observed operation. Has. + TBufC8<1> iDummyProgressBuf; ///< Dummy progress buffer. Ignored. + }; + +#endif // PUSHASYNCOPRUNNER_H + +// End of file.