diff -r 608f67c22514 -r 896e9dbc5f19 internetradio2.0/irdataprovider/inc/irlogodownloadengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/internetradio2.0/irdataprovider/inc/irlogodownloadengine.h Wed Aug 18 09:40:26 2010 +0300 @@ -0,0 +1,541 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include + +#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 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 MIRActiveNetworkObserver + { +public: + + /** + * enum TState + * status of the transaction + */ + enum TState + { + EIdle, + ESendingEvent + }; + + /** + * CIRLogoDownloadEngine* NewL() + * Creates instance of CIRLogoDownloadEngine. + */ + IMPORT_C static CIRLogoDownloadEngine* NewL(); + + + /** + * 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() + * 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 ); + + /** + * IsLogoCachedL() + * + */ + 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() + * API is used to download logo from isds/internet + * called in the API SendRequestL() + */ + 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(); + + //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() + * checks the logo in the cache + */ + void CheckCacheForLogoL( TInt aValue ); + + /** + * void MHFRunL() + * from MHTTPTransactionCallback + */ + void MHFRunL( RHTTPTransaction aTransaction, const THTTPEvent& aEvent ); + + /** + * TInt MHFRunError() + * //from MHTTPTransactionCallback + */ + TInt MHFRunError( TInt aError, RHTTPTransaction aTransaction, + const THTTPEvent& aEvent ); + + /** + * void ReleaseData() + * from MHTTPDataSupplier + */ + void ReleaseData(); + + /** + * TBool GetNextDataPart() + * from MHTTPDataSupplier + */ + TBool GetNextDataPart( TPtrC8& aDataPart ); + + /** + * TInt Reset() + * from MHTTPDataSupplier + */ + TInt Reset(); + + /** + * TInt OverallDataSize() + * from MHTTPDataSupplier + */ + TInt OverallDataSize(); + + /** + * CIRLogoDownloadEngine::ExtractResponseHeadersL() + * Used to Extract the response headers. + * @param aTransaction HTTP Transaction object + */ + void ExtractResponseHeadersL( const RHTTPTransaction& aTransaction ); + + /** + * CIRLogoDownloadEngine::HttpHeaderReceived() + * indicate that an HTTP header is received. + * @param aHeaderData Reference to the Header Info + */ + virtual void HttpHeaderReceived( const TDesC8 &aHeaderData ); + + /** + * CIRLogoDownloadEngine::ExtractHeaderValue() + * Used to build the CIRHttpResponseData + */ + void ExtractHeaderValue( const TDesC8& aHeaderData, + const TDesC8& aHeaderName, const TDesC8& aDelimeter, + TDes8& aHolder ) const; + + /** + * CIRLogoDownloadEngine::HttpDateHeaderReceived() + * 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 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* iPresetArray; + + /** + * Preset Array for checking cache + */ + CArrayPtrFlat* iCachePresetArray; + + /** + * MLogoDownloadObserver array for downloading logo + */ + CArrayPtrFlat* iObserverArray; + + /** + * MLogoDownloadObserver array for checking cache + */ + CArrayPtrFlat* iCacheObserverArray; + + /** + * To keep track whether the req came for Favorites or NPV(downloading logo) + */ + CArrayFixFlat* iReqFromArray; + + /** + * To keep track whether the req came for Favorites or NPV(checking cache) + */ + CArrayFixFlat* 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 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