diff -r 6385c4c93049 -r 8e6fa1719340 pushmtm/MtmUiInc/PushLoadServiceOp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pushmtm/MtmUiInc/PushLoadServiceOp.h Wed Sep 01 12:31:04 2010 +0100 @@ -0,0 +1,165 @@ +/* +* 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: Declaration of CPushLoadServiceOp. +* +*/ + + + +#ifndef PUSHLOADSERVICEOP_H +#define PUSHLOADSERVICEOP_H + +// INCLUDE FILES + +//#include "PushMtmOperation.h" +#include "PushMtmUiOperation.h" +#include +#include +#include +#include +// FORWARD DECLARATIONS + +class CSchemeHandler; +class CPushMsgEntryBase; +class CPushMtmSettings; + +// CLASS DECLARATION + +/** +* This asynchronous operation is responsible for downloading service that is +* indicated by the URL field of the pushed service message. It means that it +* is applicable only for SI and SL pushed messages. +* The operation uses the Scheme Handler to launch the appropriate handler +* application for the given URL. +*/ +class CPushLoadServiceOp : public CPushMtmUiOperation, + public MAknServerAppExitObserver + { + public: // Constructors and destructor + + /** + * Two-phased constructor. Leaves on failure. + * @param aSession Message Server Session to be used by this operation. + * @param aEntryId Id of entry to operate on. + * @param aObserverStatus Observer's status. + * @return The constructed object. + */ + static CPushLoadServiceOp* NewL( CMsvSession& aSession, + TMsvId aEntryId, + TRequestStatus& aObserverStatus ); + + /** + * Destructor. + */ + virtual ~CPushLoadServiceOp(); + + public: // Functions from CPushMtmOperation + + /** + * Start or restart the operation. The expiration state of the entry + * is checked (of course only in case of SI) and if it is expired, + * then the entry is deleted and the operation is cancelled. + * @return None. + */ + void StartL(); + + protected: // Constructors + + /** + * Constructor. + * @param aSession Message Server Session to be used by this operation. + * @param aEntryId Id of entry to operate on. + * @param aObserverStatus Observer's status. + */ + CPushLoadServiceOp( CMsvSession& aSession, + TMsvId aEntryId, + TRequestStatus& aObserverStatus ); + + /** + * Symbian OS constructor. + */ + void ConstructL(); + + protected: // New functions + + /** + * Check the expiration state of the context. It is SI specific. + * In case of other push messages it returns EFalse. + * @return ETrue or EFalse. + */ + TBool IsExpiredL( const TMsvEntry& aTEntry ) const; + + /** + * Retrieve the context and get the URL from the context. + * @param aUrl The URL filled from the context. + * @return The context entry. + */ + CPushMsgEntryBase* RetrieveContextAndGetUrlLC( TPtrC& aUrl ) const; + + /** + * Authenticate the message and display user query if necessary. + * @param aPushMsg The push message to be authenticated. + * @param aMtmSettings The push settings. + * @return ETrue if the message is authenticated. + */ + TBool AuthenticateL( const CPushMsgEntryBase& aPushMsg, + const CPushMtmSettings& aMtmSettings ) const; + + /** + * Execute a query which asks the user if (s)he wants to download + * the service anyway. + * @param aResId Resource to be used. + * @return ETrue, if the user wants to download it. + */ + TBool ExecuteUserQueryL( TInt aResId ) const; + + /** + * If no scheme exists in the URL, then "http://" is insetred. + * @param aUrl The original URL. + * @return The validated URL. + */ + HBufC* ValidateLC( TDesC& aUrl ) const; + + protected: // Functions from base classes + + /** + * If the operation was not cancelled in StartL, then it extracts + * the URL from the message and launches the Document Handler to + * execute the proper handler for the scheme. + * @return None. + */ + void RunL(); + + /** + * Cancel protocol implementation. + */ + void DoCancel(); + + /** + * It calls CPushMtmOperation::RunError( aError ). + */ + TInt RunError( TInt aError ); + + void HandleServerAppExit(TInt aReason); + + private: + + TMsvEntry iTEntry; ///< Current context. + TBool iDone; ///< Indicates that the operation is ready. + CSchemeHandler* iSchemeHandler; ///< Handles the URL. Owned. + }; + +#endif // PUSHLOADSERVICEOP_H + +// End of file.