--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/codhandler/codeng/inc/CodSaver.h Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,282 @@
+/*
+* Copyright (c) 2005 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 class CCodSaver.
+*
+*
+*/
+
+
+#ifndef COD_SAVER_H
+#define COD_SAVER_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+#include <apmstd.h>
+
+// FORWARD DECLARATION
+
+class MCodLoadObserver;
+class CCodData;
+class CAiwGenericParamList;
+
+// CLASS DECLARATION
+
+/**
+* Content saver base class. Owns data in download-, install- and post-install
+* phases.
+* - Provides temp storage for data being downloaded.
+* - Installs content from temp storage to proper place.
+* - Provides cleanup in all phases (until content is Release()-d).
+* This class is driven by CCodEngBase and methods are expected to be called
+* in order.
+*/
+NONSHARABLE_CLASS( CCodSaver ): public CBase
+ {
+ public: // Construct / destruct
+
+ /**
+ * Constructor.
+ * @param aType Data type.
+ */
+ inline CCodSaver( const TDesC8& aType );
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ */
+ void ConstructL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CCodSaver();
+
+ public: // new methods
+
+ /**
+ * Open temporary store for download.
+ */
+ virtual void OpenStoreL() = 0;
+
+ /**
+ * Append data to store.
+ * @param aData Data to append.
+ * @return Error code.
+ */
+ virtual TInt AppendData( const TDesC8& aData ) = 0;
+
+ /**
+ * Download finished, close temporary store.
+ */
+ virtual void CloseStore() = 0;
+
+ /**
+ * Check if attributes of received content match descriptor data.
+ * Leaves with KErrCodAttributeMismatch in case of mismatch.
+ * @param aData Data to match.
+ */
+ virtual void CheckResponseAttributesL( const CCodData& aData ) = 0;
+
+ /**
+ * Install downloaded content.
+ * @param aStatus Completes when done.
+ * @param aName Preferred name
+ * @param aAttached ETrue if download is attached (playing progressively)
+ */
+ virtual void InstallL( TRequestStatus* aStatus, const TDesC& aName, const TBool aAttached ) = 0;
+
+
+ /**
+ * Perform buklk install for multiple downloaded media objects
+ * @param aStatus Completes when done.
+ * @param aData CODData object
+ * @param aAttached ETrue if download is attached (playing progressively)
+ */
+ virtual void BulkInstallL( TRequestStatus* aStatus, const CCodData &aData, const TBool aAttached ) = 0;
+
+ /**
+ * Cancel installation.
+ */
+ virtual void CancelInstall() = 0;
+
+ /**
+ * Release content (take ownership of content from saver).
+ * @param aFname File name of content returned here.
+ * @param aHandler Handler UID returned here.
+ */
+ virtual void ReleaseContent( TFileName& aFname, TUid& aHandler ) = 0;
+
+ /**
+ * Clean up.
+ */
+ virtual void Cleanup( TBool aDeleteFile ) = 0;
+
+ /**
+ * Release file name (take ownership of content from saver).
+ * @param aFname File name of content returned here.
+ */
+ virtual void ResetL() = 0;
+
+ /**
+ * Get the downloaded file size.
+ */
+ virtual TInt DownloadedFileSize() = 0;
+
+ /**
+ * Release file name (take ownership of content from saver).
+ * @param aFname File name of content returned here.
+ */
+ virtual void ReleaseFileName(TFileName& aFname) = 0;
+
+ /**
+ * Set progressive mode download
+ * @param aValue ETrue if progressive mode
+ */
+ virtual void SetProgressiveMode( TBool /*aValue*/ ) {}
+
+
+ /**
+ * Called if download completed.
+ * @since Series 60 v2.8
+ * @param ?arg1 ?description
+ * @return ?description
+ */
+ virtual void OnComplete(){}
+
+
+
+ public: // new methods
+
+ /**
+ * Get data type.
+ * @return Data type.
+ */
+ inline const TDataType& DataType() const;
+
+ /**
+ * Get current data size.
+ * @return Data size.
+ */
+ inline TInt DataSize() const;
+
+ /**
+ * Set source URI.
+ * @param aSourceUri Source URI.
+ */
+ inline void SetSourceUriL( const TDesC8& aSourceUri );
+
+ /**
+ * Set or unset observer (pass NULL to unset).
+ * Panics if already set; unsetting more is allowed.
+ * @param aObserver Observer to set or NULL to unset.
+ */
+ void SetObserver( MCodLoadObserver* aObserver );
+
+ /**
+ * Set or unset parameters (pass NULL to unset).
+ * @param aParams Parameters or NULL.
+ */
+ inline void SetParams( const CAiwGenericParamList* aParams );
+
+ /**
+ * Get Name
+ * @return Name of Saver
+ */
+ virtual HBufC* NameL ( ) const { return NULL; }
+
+ public: // new methods
+
+ /**
+ * Set maximum size based on expected size. (Multiply with a safety
+ * factor, to allow for transport formats, encodings, etc.)
+ */
+ void SetMaxSize( TInt aSize );
+
+ /**
+ * Check if appending new data chunk would go over the limit.
+ * @param aDataChunkSize Data chunk size.
+ * @return KErrCodAttributeMismatch if over the limit, or KErrNone.
+ */
+ TInt CheckMaxSize( TInt aDataChunkSize );
+
+ /**
+ * Creates a buffer having info to be stored.
+ * @Added in OMA pause-resume feature
+ */
+ void AppendStorageInfoL(TPtr8&)const;
+ /**
+ * Creates a unique download name
+ */
+ void ConvertDownloadNameUniqueL( HBufC*& filePath,
+ HBufC*& fileName,
+ HBufC*& fileExtn );
+
+ /**
+ * Support function for ConvertDownloadNameUniqueL for creating a indexed unique name
+ */
+ void CreateIndexedNameL( HBufC*& aUniqueName,
+ TDesC& aOrgName,
+ TInt& aIndex );
+
+ /**
+ * Calls ConvertDownloadNameUniqueL to create unique name based on source file name
+ * and destination path.
+ */
+ void FindUniqueDestinationFileNameL( TDesC& srcFile, HBufC*& destPath );
+
+ protected: // types
+
+ enum TState ///< State (debug).
+ {
+ EInit, ///< Initial state.
+ EStoreOpen, ///< Store open.
+ EStoreClosed, ///< Store closed.
+ ERespChecked, ///< Response attributes checked.
+ EInstalling, ///< Install in progress.
+ EInstalled ///< Install done.
+ };
+
+ protected: // data
+
+ MCodLoadObserver* iObserver; ///< Observer or NULL. Not own.
+ const CAiwGenericParamList* iParams; ///< Params or NULL. Not own.
+ HBufC8* iSourceUri; ///< Source URI. Owned.
+ TDataType iType; ///< Data type.
+ TInt iSize; ///< Data size.
+ TInt iMaxSize; ///< Size limit (0 == off).
+ TUid iHandler; ///< Handler app UID.
+ TState iState; ///< State (debug).
+ TFileName iFname;
+ };
+
+/**
+* Saver factory.
+*/
+NONSHARABLE_CLASS( MCodSaverFactory )
+ {
+ public: // new methods
+
+ /**
+ * Create saver object.
+ * @param aType Data type.
+ * @return Saver object for this data type. Ownership not passed.
+ */
+ virtual CCodSaver* CreateSaverL( const TDesC8& aType ) = 0;
+
+ };
+
+#include "CodSaver.inl"
+
+#endif /* def COD_SAVER_H */