diff -r 000000000000 -r 09774dfdd46b internetradio2.0/dataproviderinc/irlogodownloadengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/internetradio2.0/dataproviderinc/irlogodownloadengine.h Mon Apr 19 14:01:53 2010 +0300 @@ -0,0 +1,561 @@ +/* +* 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 +#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* 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 < 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