internetradio2.0/ircachemgmt/inc/ircachemgmt.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 18 Aug 2010 09:40:26 +0300
changeset 14 896e9dbc5f19
permissions -rw-r--r--
Revision: 201031 Kit: 201033

/*
* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "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:  ?Description
*
*/

 
#ifndef CIRCACHEMGMT_H
#define CIRCACHEMGMT_H

#include <d32dbms.h>


const TInt KMAXHEADER = 255;

class CIRBrowseCatagoryItems;
class CIRBrowseChannelItems;
class CIRCacheCleanup;
class CIRHttpResponseData;
class CIRIsdsPreset;
class CIROTAUpdate;
class CIRSettings;
class MIRCacheObserver;

class CIRCacheMgmt : public CObject
    {
    
public:

    /**
    *CIRCacheMgmt::OpenL()
    *Standard two phased construction
    *calls ConstructL()
    *@param MIRCacheObserver &
    *@return CIRCacheMgmt*
    */
    IMPORT_C static CIRCacheMgmt* OpenL(MIRCacheObserver &aObserver);

    /**
    * Adds a cache observer
    *
    * @param aObserver The observer to be added
    */
    IMPORT_C void AddObserverL( MIRCacheObserver* aObserver );
    
    /**
    * Removes a cache observer
    *
    * @param aObserver The observer to be removed
    */
    IMPORT_C void RemoveObserver( MIRCacheObserver* aObserver );
  
    /**
    *CIRCacheMgmt::CheckCache()
    *API Exposed to Isds Client to check and get the cached items.
    *@ aType the type of items i.e category,channel or preset. aName is the 
    *file name(type,CategoryId,PresetId
    *@return TInt,1 for a cache hit,0 for cache miss,-1 for invalid cache
    *
    */
    IMPORT_C void CheckCacheL(TInt aType,const TDesC& aName,
        TBool aForceGet, TInt& aReturn);

    /**
    *CIRCacheMgmt::CheckValidity()
    *Checks the freshness of the cache
    *@param universal time of file creation
    *@return TBool 1 if fresh,0 if stale
    */ 
    TBool CheckValidity(const TTime &aCreateTime,TInt aTrustPeriod) const;

  
    /**
    *CIRCacheMgmt::CacheCategoryItems()
    *Caches the category array of data.By externalizing it into a file.
    *@param aPtrCategory the object array,aName the file name from which 
    *the information is to be written
    */ 
    IMPORT_C  void CacheCategoryItemsL(
        CArrayPtrFlat<CIRBrowseCatagoryItems>& aPtrCategory,
        const TDesC& aFilePath,const CIRHttpResponseData& aResponseHeaders);

    /**
    *CIRCacheMgmt::CacheChannelItems()
    *Caches the channel objects array of data.By externalizing it into a file.
    *@param aPtrChannel the object array,aName the file name from which 
    *the information is to be written
    */
    IMPORT_C  void CacheChannelItemsL(
        CArrayPtrFlat<CIRBrowseChannelItems>& aPtrChannel,
        const TDesC& aFilePath,const CIRHttpResponseData& aResponseHeaders);

    /**
    *CIRCacheMgmt::CachePresetItem()
    *Caches the preset objects .By externalizing it into a file.
    *Multiple presets can be cached.
    *@param aPreset preset object,aName the file name from which 
    *the information is to be written
    */
    IMPORT_C  void CachePresetItemL(
        CArrayPtrFlat<CIRIsdsPreset>& aPtrPresets,
        const TDesC& aName,const CIRHttpResponseData& aResponseHeaders);

    /**
    *Function : CIRCacheMgmt::CacheOtaInfoL()
    * Caches the OTA information  .By externalizing it into a db.
    *@param aOta otainfo object,aName the file name from which 
    *the information is to be written
    */
    IMPORT_C void CacheOtaInfoL(const CIROTAUpdate& aOta,const TDesC& aName,
        const CIRHttpResponseData& aResponseHeaders);
                
                
    ////////////////////////////////////////////////////////////////////////
    // CacheLogoL() API is added newly for logo cache management          //
    ////////////////////////////////////////////////////////////////////////              
    /**
    *CIRCacheMgmt::CacheLogoL()
    * Caches the logo data for a given logo url.
    *@param aData --- logo data
    *@param aUrl  --- logo url
    */                
    IMPORT_C void CacheLogoL(const TDesC8& aData, const TDesC& aUrl,
        const CIRHttpResponseData& aResponseHeaders);
                
                
    /**
    *CIRCacheMgmt::UpdateTrustPeriodL()
    *Modifies the Trust period that comes with the 304 
    *Not Modified responces from isds
    *@ aType the type of items i.e category,channel or preset.
    *aName is the file name(type,CategoryId,PresetId
    */    
    IMPORT_C void UpdateTrustPeriodL(TInt aType, const TDesC& aName,
        CIRHttpResponseData& aResponseHeaders);

    /**
    *CIRCacheMgmt::RemoveOtaInfoL() 
    *removes any cached ota response in case it is invalid
    */
    IMPORT_C void RemoveOtaInfoL();
    
    /**
    *CIRCacheMgmt::CheckSizeL()
    *checks the current size of cache against the max cache limit
    */  
    void CheckSizeL();
    /**
    *CIRCacheMgmt::RemoveOldUnusedDataL()
    *removes all unused data to bring the cache under the max cache size
    */  
    void RemoveOldUnusedDataL();
    /**
    *CIRCacheMgmt::CacheSize()
    *@return the cache size
    */  
    TInt CacheSize();
    
private:

    /**
    *CIRCacheMgmt::CIRCacheMgmt()
    *Standard C++ constructor
    *@param MIRCacheObserver &
    *@return NA
    *sets the trust period to 24hrs(default)
    */
    CIRCacheMgmt(MIRCacheObserver &aObserver);
    
    /**
    *CIRCacheMgmt::ConstructL()
    *Standard two phased construction
    *@param void
    *@return void
    *creates the folder paths if nonexistant
    */
    void ConstructL();
  
    /**
    *CIRCacheMgmt::~CIRCacheMgmt()
    *Standard C++ destructor
    *@param NA
    *@return NA
    */
    ~CIRCacheMgmt();
  
    /**
    *CIRCacheMgmt::CreateCacheTableL()
    *Creates the cache table
    *CacheTable
    * -----------------------------------------------------------------------------------------------
    *| RowIndex|DataType|DataId|TrustPeriod|LastModified  |LastAccessed|Created|ItemCount|CachedData|
    *------------------------------------------------------------------------------------------------
    *| auto    |TInt    |TDesC |TInt       |TDesC/DateTime|TTime       |Time   |TInt     | Streamed |
    *|increment|0,1,2 !0| !0   |  !0       |              |            |       |         | Data     |
    *------------------------------------------------------------------------------------------------
    */
    void CreateCacheTableL();
    
    /**
    *CIRCacheMgmt::CreateCacheIndexL()
    *creates the indices for cache table
    */
    void CreateCacheIndexL();
    
    void FetchCacheIfAvailableL(TInt aType,const TDesC& aId,
        TBool aForceGet,TInt& aReturnVal);
        
    void FetchCachedDataL(TInt aType,TInt aCountItems,RDbView& aCacheView);
    
    void CloseDb();
    
    TInt OpenCacheDb();
    
    TInt CreateDb();
    
    void CreateDbConditionalL();    
    /** 
    *CIRCacheMgmt::UpdateLastAccessedTime() 
    *updates the last accessed field to aid in deletion of old data
    *@param RDbView&,the view for which the update has to be made
    */
    void UpdateLastAccessedTimeL(RDbView &aCacheView);
  
public:
    //!Enumeration for type identification
    enum TIRTypes
      {
      ECatagory = 0,
      EChannels,
      EPresets,
      EOtaInfo,
      ELogo   //added for logo cache management
      };
      
    //!Enumeration for return types     
    enum TIRCacheStatus
      {
      ECacheNotValid = -1,
      ENotCached,
      ECacheUseable
      };
      
    //! trust period for cache(24hrs by default)
    TTimeIntervalSeconds iTrustPeriod;
    
    // Array of Pointers to PresetClass
    //used to return an array of cached presets to the UI
    CArrayPtrFlat<CIRIsdsPreset>* iPtrPreset;
    
    //! Array of Pointers to CategoryClass  
    CArrayPtrFlat<CIRBrowseCatagoryItems>* iPtrCategory;
    
    //! Array of Pointers to BrowseCategoryClass
    CArrayPtrFlat<CIRBrowseChannelItems>* iPtrChannel;
    
    //ota info holding object
    CIROTAUpdate* iOTA;
    //!Observer class for cache
    MIRCacheObserver& iCacheObserver;
    
    //To store the logo data which is retrieved from the cache
    RBuf8 iLogoData;
    
    //!time stamp string in HTTP format,used if cache is stale
    TTime iLastModified;
    
    //ETag header assaociated witht the logo data
    TBuf8< KMAXHEADER > iETag;
  
private:
    
    /** 
    * Array of cache observers
    */
    RPointerArray<MIRCacheObserver> iCacheObservers;
    
    RDbNamedDatabase iCacheDb;
    
    TBool iOpen;
    
    //! fileserver session
    RFs iFsSession;
    
    TFileName iDatabaseFileName;
    
    //central repository settings handle
    CIRSettings* iSettings;
    
    CIRCacheCleanup* iCleanup;
    
    TInt iCacheDbSize;
    
    };
    
#endif //CIRCACHEMGMT_H