codhandler/codeng/inc/CodSaver.h
changeset 0 dd21522fd290
--- /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 */