diff -r 608f67c22514 -r 896e9dbc5f19 internetradio2.0/ircachemgmt/inc/ircachemgmt.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/internetradio2.0/ircachemgmt/inc/ircachemgmt.h Wed Aug 18 09:40:26 2010 +0300 @@ -0,0 +1,307 @@ +/* +* 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 + + +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& 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& 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& 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* iPtrPreset; + + //! Array of Pointers to CategoryClass + CArrayPtrFlat* iPtrCategory; + + //! Array of Pointers to BrowseCategoryClass + CArrayPtrFlat* 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 iCacheObservers; + + RDbNamedDatabase iCacheDb; + + TBool iOpen; + + //! fileserver session + RFs iFsSession; + + TFileName iDatabaseFileName; + + //central repository settings handle + CIRSettings* iSettings; + + CIRCacheCleanup* iCleanup; + + TInt iCacheDbSize; + + }; + +#endif //CIRCACHEMGMT_H