internetradio2.0/cachemgmtinc/ircachemgmt.h
changeset 0 09774dfdd46b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cachemgmtinc/ircachemgmt.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,281 @@
+/*
+* 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