/*
* 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: Header of IRLogoDownloadEngine.cpp
*
*/
#ifndef IRLOGODOWNLOADENGINE_H
#define IRLOGODOWNLOADENGINE_H
#include <mhttpdatasupplier.h>
#include <mhttptransactioncallback.h>
#include <rhttptransaction.h>
#include <rhttpsession.h>
#include <rhttpheaders.h>
#include <http.h>
#include <es_sock.h>
#include <pspresetobserver.h>
#include "irfavoritesdb.h"
#include "irisdspreset.h"
#include "mlogodownloadobserver.h"
#include "ircacheobserver.h"
#include "iractivenetworkobserver.h"
/**
* Used to specify the maximum header-field value length
*/
const TInt KMAXHEADERLENGTHS = 255;
//Forward Declarations
class RHTTPSession;
class RHTTPTransaction;
class CIRIsdsPreset;
class CIRFavoritesDb;
class CIRNetworkController;
class MLogoDownloadObserver;
class CIRCacheMgmt; //for logo cache mgmt
class CIRHttpResponseData;
class MIRActiveNetworkObserver;//for network up and downs
/**
* class CIRLogoDownlaodEngine
*/
class CIRLogoDownloadEngine : public CBase, public MHTTPTransactionCallback,
public MHTTPDataSupplier,public MIRCacheObserver,
public MPSPresetObserver,
public MIRActiveNetworkObserver
{
public:
/**
* enum TState
* status of the transaction
*/
enum TState
{
EIdle,
ESendingEvent
};
/**
* CIRLogoDownloadEngine* NewL()
* Creates instance of CIRLogoDownloadEngine.
*/
IMPORT_C static CIRLogoDownloadEngine* NewL();
/**
* void SetFavDbInstance(CIRFavoritesDb* aFavDb)
* To set the favorites db instance
*/
IMPORT_C void SetFavDbInstance(CIRFavoritesDb* aFavDb);
/**
* SendRequestL(CIRIsdsPreset* aPreset)
* API is called from the SearchResultsView for to download logo
*/
IMPORT_C void SendRequestL(CIRIsdsPreset* aPreset,TInt aXValue=0,TInt aYValue=0);
/**
* SendRequestL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle
* ,TInt aNPVReq,TInt aXValue,TInt aYValue)
* API is called from the NowPlayingView for to download logo
*/
IMPORT_C void SendRequestL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle,
TInt aNPVReq=1,TInt aXValue=0,TInt aYValue=0);
IMPORT_C TBool isLogoCachedL(CIRIsdsPreset* aPreset, TInt aXValue=0, TInt aYValue=0);
/**
* CancelTransaction()
* cancels the current transaction
*/
IMPORT_C void CancelTransaction();
/**
* TBool IsRunning() const
* To know the status of downloading logo
*/
IMPORT_C TBool IsRunning() const;
/**
* ~CIRLogoDownloadEngine()
* Destructs instance of CIRLogoDownloadEngine
*/
IMPORT_C ~CIRLogoDownloadEngine();
/**
* void SendPresetWithLogoL()
* sends the preset with logo to the requestors
*/
IMPORT_C void SendPresetWithLogoL();
/**
* GetCacheLogoL(TDesC& aUrl,TInt& aStatus)
* takes the url as a parameter and returns the logo data which is in cache
* this API is called form the search results for to display logo on the view
*/
IMPORT_C void GetCacheLogoL(const TDesC& aUrl,TInt& aStatus);
/**
* TDesC8& SendCacheLogo()
* sends the logo which is cached
*/
IMPORT_C TDesC8& SendCacheLogo();
/**
* void FetchLogoDataL(CIRIsdsPreset* aPreset)
* API is used to download logo from isds/internet
* called in the API SendRequestL(CIRIsdsPreset* aPreset)
*/
void FetchLogoDataL(CIRIsdsPreset* aPreset);
/**
* void FetchLogoDataL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle,TInt aNPVReq)
* API is used to download logo from isds/internet
* called in the API SendRequestL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle)
*/
void FetchLogoDataL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle,TInt aNPVReq);
/**
* void ManagePresetArrayIndexL()
* To update the iPresetArray current index
*/
void ManagePresetArrayIndexL();
/**
* void ManageCachePresetArrayIndexL()
* To update the iCachePresetArray current index
*/
void ManageCachePresetArrayIndexL();
/**
* void CacheError()
* Called from cachemgmt in case of an error
* callback API from MIRCacheObserver
*/
void CacheError();
/**
* void CacheFailed()
* Called from cachemgmt in case of cache failure
* callback API from MIRCacheObserver
*/
void CacheFailed();
/**
* void CacheInvalid()
* Called from cachemgmt in case cache is invalid
* callback API from MIRCacheObserver
*/
void CacheInvalid();
/**
* void CachedStructureL()
* Called from cachemgmt data retrival is successful
*@param aChoice,it gives the data type of the cache
* callback API from MIRCacheObserver
*/
void CachedStructureL(TInt aChoice);
/**
* ReleaseResources();
* Releases the resources held by logo download engine
*/
void ReleaseResources();
/**
* HandlePresetChangedL
* whenever their is any change in preset
* the function will get invoked.
* callback API from MPSPresetObserver
*/
void HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason );
//from MIRActiveNetworkObserver
/**
* Notified by network controller when network is active
* to reissue the request
* NotifyActiveNetworkObserversL()
*/
void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
/**
* Notifies all observers whose network request is active
* to reset the pending request status
* ResetPendingRequests()
*/
void ResetPendingRequests(TBool aValue);
private:
/**
* void ConstructL()
* 2nd phase construction
*/
void ConstructL();
/**
* CIRLogoDownloadEngine()
* Standard C++ constructor
*/
CIRLogoDownloadEngine();
/**
* void SetHeaderL(RHTTPHeaders aHeaders, TInt aHdrField, const TDesC8& aHdrValue) const
* to set the headers of the http transaction
*/
void SetHeaderL(RHTTPHeaders aHeaders, TInt aHdrField, const TDesC8& aHdrValue) const;
/**
* void IssueLogoDownloadRequest()
* submits the transaction for to download the logo
*/
void IssueLogoDownloadRequestL();
/**
* void CheckCacheForLogoL(TInt aValue)
* checks the logo in the cache
*/
void CheckCacheForLogoL(TInt aValue);
/**
* void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
* from MHTTPTransactionCallback
*/
void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
/**
* TInt MHFRunError(TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
* //from MHTTPTransactionCallback
*/
TInt MHFRunError(TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
/**
* void ReleaseData()
* from MHTTPDataSupplier
*/
void ReleaseData();
/**
* TBool GetNextDataPart(TPtrC8& aDataPart)
* from MHTTPDataSupplier
*/
TBool GetNextDataPart(TPtrC8& aDataPart);
/**
* TInt Reset()
* from MHTTPDataSupplier
*/
TInt Reset();
/**
* TInt OverallDataSize()
* from MHTTPDataSupplier
*/
TInt OverallDataSize();
/**
* CIRLogoDownloadEngine::ExtractResponseHeadersL(
* RHTTPTransaction aTransaction )
* Used to Extract the response headers.
* @param aTransaction HTTP Transaction object
*/
void ExtractResponseHeadersL( const RHTTPTransaction& aTransaction );
/**
* CIRLogoDownloadEngine::HttpHeaderReceived( const TDesC8& aHeaderData )
* indicate that an HTTP header is received.
* @param aHeaderData Reference to the Header Info
*/
virtual void HttpHeaderReceived( const TDesC8 &aHeaderData );
/**
* CIRLogoDownloadEngine::ExtractHeaderValue(const TDesC8& aHeaderData,
* const TDesC8& aHeaderName,const TDesC8& aDelimeter,
* TDes8& aHolder) const
* Used to build the CIRHttpResponseData
*/
void ExtractHeaderValue(const TDesC8& aHeaderData,
const TDesC8& aHeaderName,const TDesC8& aDelimeter,
TDes8& aHolder) const;
/**
* CIRLogoDownloadEngine::HttpDateHeaderReceived(const TDesC8 &aHeader,const TTime& aTime )
* Used to build the CIRHttpResponseData members
*/
void HttpDateHeaderReceived(const TDesC8 &aHeader,const TTime& aTime );
private:
/**
* pointer to the logo observer object
*/
MLogoDownloadObserver* iLogoHandle;
/**
* pointer to the logo observer object
*/
MLogoDownloadObserver* iTempLogoHandle;
/**
* pointer to the logo observer object
*/
MLogoDownloadObserver* iCacheTempLogoHandle;
/**
* pointer to the favorites db object
*/
CIRFavoritesDb* iFavDb;
/**
* pointer to the preset object
* temporary preset in the logo downloading usecase
*/
CIRIsdsPreset* iTempPreset;
/**
* pointer to the preset object
* temporary preset in the cache checking usecase
*/
CIRIsdsPreset* iCacheTempPreset;
/**
* pointer to the preset object
* preset used to conver CIRPreset to CIRIsdsPreset
*/
CIRIsdsPreset* iCopyPreset;
/**
* Network controller handle pointer
*/
CIRNetworkController *iIRNetworkControllerHandle;
/**
* Preset Array for downloading logo
*/
CArrayPtrFlat<CIRIsdsPreset>* iPresetArray;
/**
* Preset Array for checking cache
*/
CArrayPtrFlat<CIRIsdsPreset>* iCachePresetArray;
/**
* MLogoDownloadObserver array for downloading logo
*/
CArrayPtrFlat<MLogoDownloadObserver>* iObserverArray;
/**
* MLogoDownloadObserver array for checking cache
*/
CArrayPtrFlat<MLogoDownloadObserver>* iCacheObserverArray;
/**
* To keep track whether the req came for Favorites or NPV(downloading logo)
*/
CArrayFixFlat<TInt>* iReqFromArray;
/**
* To keep track whether the req came for Favorites or NPV(checking cache)
*/
CArrayFixFlat<TInt>* iCacheReqFromArray;
/**
* Separate session for the logo downloading
*/
RHTTPSession iLogoSession;
/**
* http transaction
*/
RHTTPTransaction iTransaction;
/**
* for the transactions with cache mgmt
*/
CIRCacheMgmt *iCache;
/**
* Pointer to Response header data
*/
CIRHttpResponseData* iResponseHeaders;
/**
* boolean for to know the status of the downloading logo
*/
TBool iRunning;
/**
* body of the transaction request
*/
TDesC8* iReqBody;
/**
* body of the transaction response
*/
HBufC8* iRespBody;
/**
* size of the response body
*/
TInt iRespBodySize;
/**
* state of the transaction
*/
TState iState;
/**
* status, from which the preset has modified
*/
TBool iPresetModifiedStatus;
/**
* iPresetArray position
*/
TInt iPresetArrayPos;
/**
* position of the iReqFromArray
*/
TInt iReqFromArrayPos;
/**
* position of the iObserverArray
*/
TInt iObserverArrayPos;
/**
* position of the iCachePresetArray
*/
TInt iCachePresetArrayPos;
/**
* position of the iCacheReqFromArray
*/
TInt iCacheReqFromArrayPos;
/**
* position of the iCacheObserverArray
*/
TInt iCacheObserverArrayPos;
/**
* status of cache request
*/
TInt iCacheReqFrom;
/**
* temporary variable for the status of request
*/
TInt iTempReqFrom;
/**
* boolean to verify first time or not
*/
TBool iFirstTime;
/**
* ETrue if logo is available in cache
*/
TBool iLogoCached;
/**
* boolean for forcibly getting the logo from cache
*/
TBool iForceGet;
/**
* boolean for to track whether the cache request has made or not
*/
TBool iCacheReqMade;
/**
* response from the cache for the availability of logo(CacheNotValid,NotCached,CacheUseable)
*/
TInt iResult;
/**
* status on cache checking
*/
TBool iCheckingCache;
/**
* integer for the status of sending the logo
*/
TInt iSendingLogo;
/**
* Using for temporarily till the isds provides urls
*/
TInt iImageIndex;
/**
* this is used while making a conditional GET request
*/
TTime iLastModifiedTime;
/**
* this is used while making a conditional GET request
*/
TBuf8 < KMAXHEADERLENGTHS > iETag;
/**
* this is used to track whether the request is conditional GET or non-conditional GET
*/
TBool iIsConditionalGET;
/**
* Status of the logo download in the network up and down scenarios
*/
TBool iLogoRequestPending;
/**
* status of the response code
*/
TInt iRespCode;
};
#endif // IRLOGODOWNLOADENGINE_H