--- a/internetradio2.0/dataprovidersrc/irlogodownloadengine.cpp Tue Jul 06 14:07:20 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1587 +0,0 @@
-/*
-* 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: Engine to fetch the logos
-*
-*/
-
-
-#include <aknnotewrappers.h>
-
-#include "irlogodownloadengine.h"
-#include "irnetworkcontroller.h"
-#include "ircachemgmt.h"
-#include "irhttprequestdata.h"
-#include "irdebug.h"
-#include "irdataproviderconstants.h"
-#include "iractivenetworkobserver.h"
-
-
-
-_LIT(KLogoX, "?x=");
-_LIT(KLogoY, "&y=");
-const TInt KPresetsArrayMaxLength = 50;
-const TInt KLogoSize = 59;
-const TInt KParameterSize = 12;
-const TInt KTen = 10;
-const TInt KCacheAvailable = 4;
-const TInt KLogo = 4;
-const TInt KStatusOK = 200;
-const TInt KStatusMultipleChoices = 300;
-const TInt KStatusNotModified = 304;
-const TInt KStatusGatewayTimeout = 504;
-
-
-// ---------------------------------------------------------------------------
-// CIRLogoDownloadEngine::NewL()
-// Creates instance of CIRLogoDownloadEngine.
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CIRLogoDownloadEngine* CIRLogoDownloadEngine::NewL()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::NewL - Entering" );
- CIRLogoDownloadEngine* self = new(ELeave) CIRLogoDownloadEngine();
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- IRLOG_DEBUG( "CIRLogoDownloadEngine::NewL - Exiting" );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CIRLogoDownloadEngine::CIRLogoDownloadEngine()
-// Standard C++ constructor
-// ---------------------------------------------------------------------------
-//
-CIRLogoDownloadEngine::CIRLogoDownloadEngine()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::CIRLogoDownloadEngine " );
- //code here, if needed
- }
-
-
-
-// ---------------------------------------------------------------------------
-// CIRLogoDownloadEngine::~CIRLogoDownloadEngine()
-// Destructs instance of CIRLogoDownloadEngine.
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CIRLogoDownloadEngine::~CIRLogoDownloadEngine()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::~CIRLogoDownloadEngine - Entering" );
- if(iReqBody)
- {
- delete iReqBody;
- iReqBody = NULL;
- }
- if(iRespBody)
- {
- delete iRespBody;
- iRespBody = NULL;
- }
- CancelTransaction();
- iLogoSession.Close();
-
- if(iCopyPreset)
- {
- delete iCopyPreset;
- }
- if(iCacheTempPreset)
- {
- delete iCacheTempPreset;
- }
- if(iTempPreset)
- {
- delete iTempPreset;
- }
- if(iPresetArray)
- {
- iPresetArray->ResetAndDestroy();
- }
- delete iPresetArray;
- if(iObserverArray)
- {
- delete iObserverArray;
- iObserverArray = NULL;
- }
- if(iReqFromArray)
- {
- delete iReqFromArray;
- iReqFromArray = NULL;
- }
- if(iCachePresetArray)
- {
- iCachePresetArray->ResetAndDestroy();
- }
- delete iCachePresetArray;
- if(iCacheObserverArray)
- {
- delete iCacheObserverArray;
- iCacheObserverArray = NULL;
- }
- if(iCacheReqFromArray)
- {
- delete iCacheReqFromArray;
- iCacheReqFromArray = NULL;
- }
- if(iIRNetworkControllerHandle)
- {
- iIRNetworkControllerHandle->DeleteActiveNetworkObserver(*this);
- iIRNetworkControllerHandle->Close();
- }
- if (iCache)
- {
- iCache->RemoveObserver(this);
- iCache->Close();
- }
- if( iResponseHeaders )
- {
- delete iResponseHeaders;
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::~CIRLogoDownloadEngine - Exiting" );
- }
-
-
-
-// ---------------------------------------------------------------------------
-// CIRLogoDownloadEngine::ConstructL()
-// 2nd phase construction
-// ---------------------------------------------------------------------------
-//
-void CIRLogoDownloadEngine::ConstructL()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::ConstructL - Entering" );
- iPresetArray = new (ELeave) CArrayPtrFlat<CIRIsdsPreset>(KPresetsArrayMaxLength);
- iObserverArray = new (ELeave) CArrayPtrFlat<MLogoDownloadObserver>(KPresetsArrayMaxLength);
- iReqFromArray = new (ELeave) CArrayFixFlat<TInt>(KPresetsArrayMaxLength);
- iCachePresetArray = new (ELeave) CArrayPtrFlat<CIRIsdsPreset>(KPresetsArrayMaxLength);
- iCacheObserverArray = new (ELeave) CArrayPtrFlat<MLogoDownloadObserver>(KPresetsArrayMaxLength);
- iCacheReqFromArray = new (ELeave) CArrayFixFlat<TInt>(KPresetsArrayMaxLength);
-
- iPresetArrayPos = 0;
- iReqFromArrayPos = 0;
- iObserverArrayPos = 0;
- iCachePresetArrayPos = 0;
- iCacheReqFromArrayPos = 0;
- iCacheObserverArrayPos = 0;
- iImageIndex = 0; //using temporarily till the isds provides urls
-
- iPresetModifiedStatus = EFalse;
- iFirstTime = ETrue;
- iIRNetworkControllerHandle = CIRNetworkController::OpenL();
- iIRNetworkControllerHandle->RegisterActiveNetworkObserverL(*this);
- iCache = CIRCacheMgmt::OpenL(*this);
- iCache->AddObserverL(this);
- iResponseHeaders = new ( ELeave ) CIRHttpResponseData;
-
- //change to use the new session for logo downloading
- TRAPD( LeaveValue, iLogoSession.OpenL() );
- if ( LeaveValue != KErrNone )
- {
- // Most common error; no access point configured, and session creation
- // leaves with KErrNotFound.
- // Load a string from the resource file and add the error code to string
- User::Leave( LeaveValue );
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::ConstructL - Exiting" );
- }
-
-
-// ---------------------------------------------------------------------------
-// CIRLogoDownloadEngine::IsRunning()
-// To know the status of downloading logo
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TBool CIRLogoDownloadEngine::IsRunning() const
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::IsRunning" );
- return iRunning;
- }
-
-
-// ---------------------------------------------------------------------------
-// CIRLogoDownloadEngine::SetHeaderL(RHTTPHeaders aHeaders, TInt aHdrField,
-// const TDesC8& aHdrValue)
-// to set the headers of the http transaction
-// ---------------------------------------------------------------------------
-//
-void CIRLogoDownloadEngine::SetHeaderL(RHTTPHeaders aHeaders, TInt aHdrField,
- const TDesC8& aHdrValue) const
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::SetHeaderL - Entering" );
- RStringF valStr = iLogoSession.StringPool().OpenFStringL(aHdrValue);
- CleanupClosePushL(valStr);
- THTTPHdrVal val(valStr);
- aHeaders.SetFieldL(iLogoSession.StringPool().StringF(aHdrField, RHTTPSession::GetTable()), val);
- CleanupStack::PopAndDestroy(&valStr); // valStr
- IRLOG_DEBUG( "CIRLogoDownloadEngine::SetHeaderL - Exiting" );
- }
-
-// ----------------------------------------------------------------------------------
-// CIRLogoDownloadEngine::SendRequestL(CIRIsdsPreset* aPreset,TInt aXValue,TInt aYValue)
-// API is called from the SearchResultsView for to download logo while doing Add to Favorites
-// ----------------------------------------------------------------------------------
-//
-EXPORT_C void CIRLogoDownloadEngine::SendRequestL(CIRIsdsPreset* aPreset,TInt aXValue,TInt aYValue)
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::SendRequestL - Entering" );
- if(!iCheckingCache)
- {
- ++iImageIndex;
- iCheckingCache = ETrue;
- iCacheReqFrom = 0;
- if(iCacheTempPreset)
- {
- delete iCacheTempPreset;
- }
- iCacheTempPreset = NULL;
- iCacheTempPreset = CIRIsdsPreset::NewL();
- *iCacheTempPreset = *aPreset;
-
- if(iCacheTempPreset->GetImgUrl().Length() != 0)
- {
- if((aXValue > 0)&&(aYValue > 0))
- {
- //Append the parameters(width,height) of the logo size to imgUrl
- TInt size = iCacheTempPreset->GetImgUrl().Length() + KParameterSize;
- RBuf urlWithSize;
- urlWithSize.Create(size);
- urlWithSize.Copy(iCacheTempPreset->GetImgUrl());
- urlWithSize.Append(KLogoX);
- urlWithSize.AppendNum(aXValue);
- urlWithSize.Append(KLogoY);
- urlWithSize.AppendNum(aYValue);
-
- //set the imgUrl with parameters to the preset
- iCacheTempPreset->SetImgUrl(urlWithSize);
- urlWithSize.Close();
- }
- //This method checks whether the logo is available
- // for the request made
- iForceGet = EFalse;
- CheckCacheForLogoL(0);
- }
- else
- {
- //imgUrl doesnt exist in the Preset
- iCheckingCache = EFalse;
- return;
- }
-
- iCheckingCache = EFalse;
- if(!iLogoCached)
- {
- FetchLogoDataL(iCacheTempPreset);
- }
- }
- else
- {
- CIRIsdsPreset* tempPreset;
- tempPreset = CIRIsdsPreset::NewL();
- *tempPreset = *aPreset;
- if(tempPreset->GetImgUrl().Length() != 0)
- {
- if((aXValue > 0)&&(aYValue > 0))
- {
- //Append the parameters(width,height) of the logo size to imgUrl
- TInt size = tempPreset->GetImgUrl().Length() + KParameterSize;
- RBuf urlWithSize;
- urlWithSize.Create(size);
- urlWithSize.Copy(tempPreset->GetImgUrl());
- urlWithSize.Append(KLogoX);
- urlWithSize.AppendNum(aXValue);
- urlWithSize.Append(KLogoY);
- urlWithSize.AppendNum(aYValue);
-
- //set the imgUrl with parameters to the preset
- tempPreset->SetImgUrl(urlWithSize);
- urlWithSize.Close();
- }
- }
- iCachePresetArray->AppendL(tempPreset);
- iCacheReqFromArray->AppendL(0);
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::SendRequestL - Exiting" );
- }
-
-
-EXPORT_C TBool CIRLogoDownloadEngine::isLogoCachedL(CIRIsdsPreset* aPreset, TInt aXValue, TInt aYValue)
-{
- TInt cached = 0;
-
- if(iCacheTempPreset)
- {
- delete iCacheTempPreset;
- iCacheTempPreset = NULL;
- }
-
- iCacheTempPreset = CIRIsdsPreset::NewL();
- *iCacheTempPreset = *aPreset;
- iCacheReqMade = EFalse;
-
- if (iCacheTempPreset->GetImgUrl().Length() != 0)
- {
- if ((aXValue > 0) && (aYValue > 0))
- {
- //Append the parameters(width,height) of the logo size to imgUrl
- TInt size = iCacheTempPreset->GetImgUrl().Length() + KParameterSize;
- RBuf urlWithSize;
- urlWithSize.Create(size);
- urlWithSize.Copy(iCacheTempPreset->GetImgUrl());
- urlWithSize.Append(KLogoX);
- urlWithSize.AppendNum(aXValue);
- urlWithSize.Append(KLogoY);
- urlWithSize.AppendNum(aYValue);
-
- //set the imgUrl with parameters to the preset
- iCacheTempPreset->SetImgUrl(urlWithSize);
- urlWithSize.Close();
- }
- }
-
- iCache->CheckCacheL(KLogo,iCacheTempPreset->GetImgUrl(),EFalse,cached);
-
- return (CIRCacheMgmt::ECacheUseable == cached)?ETrue:EFalse;
-}
-// ----------------------------------------------------------------------------------------------
-// CIRLogoDownloadEngine::SendRequestL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle,
-// TInt aNPVReq,TInt aXValue,TInt aYValue)
-// API is called from several views for to download logo
-// ----------------------------------------------------------------------------------------------
-//
-EXPORT_C void CIRLogoDownloadEngine::SendRequestL(CIRIsdsPreset* aPreset,
- MLogoDownloadObserver* aLogoHandle,TInt aNPVReq,TInt aXValue,TInt aYValue)
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::SendRequestL - Entering" );
- if(aPreset->GetChannelType()==0)
- {
- aLogoHandle->PresetLogoDownloadedL(aPreset);
- }
- else if(!iCheckingCache)
- {
- ++iImageIndex;
- iCheckingCache = ETrue;
- if(aNPVReq==2)
- {
- iCacheReqFrom=2;
- }
- else
- {
- iCacheReqFrom=1;
- }
-
- if(iCacheTempPreset)
- {
- delete iCacheTempPreset;
- iCacheTempPreset = NULL;
- }
- iCacheTempPreset = CIRIsdsPreset::NewL();
- *iCacheTempPreset = *aPreset;
- iCacheTempLogoHandle = aLogoHandle;
-
- if(iCacheTempPreset->GetImgUrl().Length() != 0)
- {
- if((aXValue > 0)&&(aYValue > 0))
- {
- //Append the parameters(width,height) of the logo size to imgUrl
- TInt size = iCacheTempPreset->GetImgUrl().Length() + KParameterSize;
- RBuf urlWithSize;
- urlWithSize.Create(size);
- urlWithSize.Copy(iCacheTempPreset->GetImgUrl());
- urlWithSize.Append(KLogoX);
- urlWithSize.AppendNum(aXValue);
- urlWithSize.Append(KLogoY);
- urlWithSize.AppendNum(aYValue);
-
- //set the imgUrl with parameters to the preset
- iCacheTempPreset->SetImgUrl(urlWithSize);
- urlWithSize.Close();
- }
- if(iCacheReqFrom==1 || iCacheReqFrom==2)
- {
- //This method checks whether the logo is available
- // for the request made
- iForceGet = EFalse;
- CheckCacheForLogoL(0);
- }
-/* else if(iCacheReqFrom==2)
- {
- //the request has come from NowPlayingView(NPV)
- //dont check for logo availability in cache
- //download the logo freshly
- iLogoCached=EFalse;
- }
-*/ }
- else
- {
- //imgUrl doesnt exist in the Preset
- iCheckingCache = EFalse;
- return;
- }
-
- iCheckingCache = EFalse;
- if(!iLogoCached)
- {
- FetchLogoDataL(iCacheTempPreset,aLogoHandle,iCacheReqFrom);
- }
- }
- else
- {
- CIRIsdsPreset* tempPreset;
- tempPreset = CIRIsdsPreset::NewL();
- *tempPreset = *aPreset;
- if(tempPreset->GetImgUrl().Length() != 0)
- {
- if((aXValue > 0)&&(aYValue > 0))
- {
- //Append the parameters(width,height) of the logo size to imgUrl
- TInt size = tempPreset->GetImgUrl().Length() + KParameterSize;
- RBuf urlWithSize;
- urlWithSize.Create(size);
- urlWithSize.Copy(tempPreset->GetImgUrl());
- urlWithSize.Append(KLogoX);
- urlWithSize.AppendNum(aXValue);
- urlWithSize.Append(KLogoY);
- urlWithSize.AppendNum(aYValue);
-
- //set the imgUrl with parameters to the preset
- tempPreset->SetImgUrl(urlWithSize);
- urlWithSize.Close();
- }
- }
- iCachePresetArray->AppendL(tempPreset);
- iCacheObserverArray->AppendL(aLogoHandle);
- if(aNPVReq == 2)
- {
- iCacheReqFromArray->AppendL(2);
- }
- else
- {
- iCacheReqFromArray->AppendL(1);
- }
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::SendRequestL - Exiting" );
- }
-
-
-
-// ----------------------------------------------------------------------------------
-// CIRLogoDownloadEngine::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
-// ----------------------------------------------------------------------------------
-//
-EXPORT_C void CIRLogoDownloadEngine::GetCacheLogoL(const TDesC& aUrl,TInt& aStatus)
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::GetCacheLogoL - Entering" );
- iSendingLogo=2;
- iResult = 0;
- iForceGet = EFalse;
- //2 means, this API is called for the search results view
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(KLogo,aUrl,iForceGet,iResult);
- aStatus = iResult;
- IRLOG_DEBUG( "CIRLogoDownloadEngine::GetCacheLogoL - Exiting" );
-
- }
-
-
-// ----------------------------------------------------------------------------------
-// CIRLogoDownloadEngine::SendCacheLogo()
-// sends the logo which is cached
-// ----------------------------------------------------------------------------------
-//
-EXPORT_C TDesC8& CIRLogoDownloadEngine::SendCacheLogo()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::SendCacheLogo" );
- return iCache->iLogoData;
- }
-
-
-
-
-// ------------------------------------------------------------------------
-// CIRLogoDownloadEngine::FetchLogoDataL(CIRIsdsPreset* aPreset)
-// API is used to download logo from isds/internet
-// called in the API SendRequestL(CIRIsdsPreset* aPreset)
-// ------------------------------------------------------------------------
-//
-void CIRLogoDownloadEngine::FetchLogoDataL(CIRIsdsPreset* aPreset)
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::FetchLogoDataL - Entering" );
- if(!iRunning)
- {
-
- iTempReqFrom = 0;//which means the request came from SearchView while doing Add to Favorite
- if( iReqBody )
- {
- delete iReqBody;
- iReqBody = NULL;
- }
- if( iRespBody )
- {
- delete iRespBody;
- iRespBody = NULL;
- }
- if(iTempPreset)
- {
- delete iTempPreset;
- iTempPreset = NULL;
- }
- iTempPreset = CIRIsdsPreset::NewL();
- *iTempPreset = *aPreset;
- if(iTempPreset->GetImgUrl().Length() != 0)
- {
- IssueLogoDownloadRequestL();
- }
- else /*ImgUrl doesnt exist in the iTempPreset*/
- {
- //simply ignore it
- }
- }
- else
- {
- CIRIsdsPreset* tempPreset;
- tempPreset = CIRIsdsPreset::NewL();
- CleanupStack::PushL(tempPreset);
- *tempPreset = *aPreset;
- iPresetArray->AppendL(tempPreset);
- CleanupStack::Pop(tempPreset);
- iReqFromArray->AppendL(0);
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::FetchLogoDataL - Exiting" );
- }
-
-
-// -------------------------------------------------------------------------------------------------
-// CIRLogoDownloadEngine::FetchLogoDataL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle)
-// API is used to download logo from isds/internet
-// called in the API SendRequestL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle)
-// -------------------------------------------------------------------------------------------------
-//
-void CIRLogoDownloadEngine::FetchLogoDataL(CIRIsdsPreset* aPreset,
- MLogoDownloadObserver* aLogoHandle,TInt aNPVReq)
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::FetchLogoDataL - Entering" );
- if(!iRunning)
- {
- if(aNPVReq==2)
- {
- iTempReqFrom = 2;//which means the request came from NowPlayingView
- }
- else
- {
- iTempReqFrom = 1;//which means the request came from other than NowPlayingView
- }
-
- iTempLogoHandle = aLogoHandle;
- if( iReqBody )
- {
- delete iReqBody;
- iReqBody = NULL;
- }
- if( iRespBody )
- {
- delete iRespBody;
- iRespBody = NULL;
- }
- if(iTempPreset)
- {
- delete iTempPreset;
- iTempPreset = NULL;
- }
- iTempPreset = CIRIsdsPreset::NewL();
- *iTempPreset = *aPreset;
- if(iTempPreset->GetImgUrl().Length() != 0)
- {
- IssueLogoDownloadRequestL();
- }
- else /*ImgUrl doesnt exist in the iTempPreset*/
- {
- //simply ignore it
- }
- }
- else
- {
- CIRIsdsPreset* tempPreset;
- tempPreset = CIRIsdsPreset::NewL();
- CleanupStack::PushL(tempPreset);
- *tempPreset = *aPreset;
- iPresetArray->AppendL(tempPreset);
- CleanupStack::Pop(tempPreset);
- iObserverArray->AppendL(aLogoHandle);
- if(aNPVReq==2)
- {
- iReqFromArray->AppendL(2);
- }
- else
- {
- iReqFromArray->AppendL(1);
- }
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::FetchLogoDataL - Exiting" );
- }
-
-
-// ----------------------------------------------------------------------------------
-// CIRLogoDownloadEngine::CheckCacheForLogoL(TInt aValue)
-// Checks the cache whether the logo is available or not
-// ----------------------------------------------------------------------------------
-//
-void CIRLogoDownloadEngine::CheckCacheForLogoL(TInt aValue)
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::CheckCacheForLogoL - Entering" );
- iSendingLogo=aValue;
- iResult = 0;
- if(iSendingLogo==0)//0 means, this API is called for the usecase of checking cache
- {
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(KLogo,iCacheTempPreset->GetImgUrl(),iForceGet,iResult);
- }
- else if(iSendingLogo==1)//1 means, this API is called for the usecase of downloading logo
- {
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(KLogo,iTempPreset->GetImgUrl(),iForceGet,iResult);
- }
- if((iResult == 0))//not available in the cache
- {
- iLogoCached = EFalse;
- iIsConditionalGET = EFalse;
- }
- else if(iResult == -1)//cache is stale/not useable
- {
- iLogoCached = EFalse;
- iIsConditionalGET = ETrue;
- }
- else if(iResult == 1)//cache is useable
- {
- iLogoCached = ETrue;
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::CheckCacheForLogoL - Exiting" );
- }
-
-
-// ----------------------------------------------------------------------------------
-// CIRLogoDownloadEngine::IssueLogoDownloadRequest()
-// submits the transaction for to download the logo
-// ----------------------------------------------------------------------------------
-//
-void CIRLogoDownloadEngine::IssueLogoDownloadRequestL()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::IssueLogoDownloadRequestL - Entering" );
- ///////////////////////////////////////////////////////////////////////////////////
- //This piece of code is for selecting the access point which is already
- //set at the begining of the application. To download the logo the same
- //accesse point will be used.
-
-
-
-
-
- if(!iIRNetworkControllerHandle->GetNetworkStatus())
- {
- iIRNetworkControllerHandle->ChooseAccessPointL();
- iLogoRequestPending = ETrue;
- }
-
- else
- {
- if( iFirstTime )
- {
- iLogoSession.Close();
- TRAPD( LeaveValue, iLogoSession.OpenL() );
- if ( LeaveValue != KErrNone )
- {
- // Most common error; no access point configured, and session creation
- // leaves with KErrNotFound.
- // Load a string from the resource file and add the error code to string
- User::Leave( LeaveValue );
- }
- // Set the HTTP connection properties
- RStringPool strP = iLogoSession.StringPool();
- RHTTPConnectionInfo connInfo = iLogoSession.ConnectionInfo();
- // RSocketServ Handle
- connInfo.SetPropertyL( strP.StringF( HTTP::EHttpSocketServ,
- RHTTPSession::GetTable() ),
- THTTPHdrVal( iIRNetworkControllerHandle->GetIRSocketServer().Handle() ) );
-
- // RConnection Handle
- TInt connPtr = REINTERPRET_CAST( TInt,
- &( iIRNetworkControllerHandle->GetIRConnection() ) );
- connInfo.SetPropertyL( strP.StringF( HTTP::EHttpSocketConnection,
- RHTTPSession::GetTable() ), THTTPHdrVal( connPtr ) );
-
- // HTTP Version ( Specify that i am using HTTP/1.1
- connInfo.SetPropertyL( strP.StringF( HTTP::EVersion,
- RHTTPSession::GetTable() ),
- THTTPHdrVal( strP.StringF( HTTP::EHttp11, RHTTPSession::GetTable() ) ) );
-
- // Set RHttpSession into NetworkController for logo byte counter
- iIRNetworkControllerHandle->RegisterLogoDataTransferTrackerL( iLogoSession );
-
- iFirstTime = EFalse;
- }
-
-
- HBufC8* buffertmp = HBufC8::NewLC( iTempPreset->GetImgUrl().Length() + 1 );
- TPtr8 buffertmpPtr( buffertmp->Des() );
- buffertmpPtr.Copy( iTempPreset->GetImgUrl() );
-
- TUriParser8 uri;
- uri.Parse(buffertmpPtr);
- RStringF method = iLogoSession.StringPool().StringF(HTTP::EGET,RHTTPSession::GetTable());
- iTransaction = iLogoSession.OpenTransactionL(uri, *this, method);
- RHTTPHeaders hdr = iTransaction.Request().GetHeaderCollection();
- // Set the User-Agent header to UAProf string
- SetHeaderL( hdr, HTTP::EUserAgent,
- iIRNetworkControllerHandle->GetUAProfString()->Des() );
-
- _LIT8(KAccept,"image/jpeg,image/png,image/gif");
- SetHeaderL(hdr, HTTP::EAccept, KAccept);
- SetHeaderL( hdr, HTTP::EAcceptLanguage, KAcceptLanguage );
-
- if(iIsConditionalGET)
- {
- RStringF valStr = iLogoSession.StringPool().OpenFStringL(iETag);
- CleanupClosePushL(valStr);
- THTTPHdrVal val(valStr);
- hdr.SetFieldL(iLogoSession.StringPool().StringF(
- HTTP::EIfNoneMatch, RHTTPSession::GetTable()), val);
- CleanupStack::PopAndDestroy(&valStr); // valStr
- }
- CleanupStack::PopAndDestroy(buffertmp); // buffertmp
-
- //setting the member variable to zero
- iRespBodySize = 0;
- iTransaction.SubmitL();
-
- iRunning = ETrue;
- iLogoRequestPending = ETrue;
- iState = ESendingEvent;
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::IssueLogoDownloadRequestL - Exiting" );
- }
-
-
-// ----------------------------------------------------------------------------------
-// CIRLogoDownloadEngine::CancelTransaction()
-// cancels the current transaction
-// ----------------------------------------------------------------------------------
-//
-EXPORT_C void CIRLogoDownloadEngine::CancelTransaction()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::CancelTransaction - Entering" );
- if(!iRunning)
- {
- return;
- }
- iTransaction.Close();
- iRunning = EFalse;
- IRLOG_DEBUG( "CIRLogoDownloadEngine::CancelTransaction - Exiting" );
- }
-
-
-// ----------------------------------------------------------------------------------
-// CIRLogoDownloadEngine::SendPresetWithLogoL()
-// sends the preset with logo to the requestors
-// ----------------------------------------------------------------------------------
-//
-EXPORT_C void CIRLogoDownloadEngine::SendPresetWithLogoL()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::SendPresetWithLogoL - Entering" );
- //Logo has downloaded, so update the status of the variable iLogoRequestPending
- iLogoRequestPending = EFalse;
- //Remove the imgUrl with parameters from the Preset
- //now set imgUrl without parameters in to the Preset
- TInt sizeImgUrlWithPar = iTempPreset->GetImgUrl().Length();
- TBool hasParameters = EFalse;
- RBuf urlWithPar;
- urlWithPar.Create(sizeImgUrlWithPar);
- urlWithPar.Copy(iTempPreset->GetImgUrl());
- RBuf tempBuf;
- tempBuf.Create(sizeImgUrlWithPar);
-
- TLex urlLex(urlWithPar);
- for(;!urlLex.Eos();)
- {
- tempBuf.Zero();
- while(urlLex.Peek() != '?' && !urlLex.Eos())
- {
- tempBuf.Append(urlLex.Get());
- }
- if(urlLex.Peek() == '?')
- {
- hasParameters = ETrue;
- }
- urlLex.Inc();
- }
-
- RBuf imgUrl;
- if(hasParameters)
- {
- //let say urlWithPar has the value http://www.logos.com/images/test.pngx=100&y=100
- //now the tempBuf contains the value x=100&y=100
- TInt sizeUrlParameters = tempBuf.Length();
- sizeUrlParameters++; // now this integer contains the size of x=100&y=100
- TInt sizeImgUrl = sizeImgUrlWithPar - sizeUrlParameters;
-
- //Create a buffer to store the imgUrl without parameters
- imgUrl.Create(sizeImgUrl);
- imgUrl.Copy(urlWithPar.Left(sizeImgUrl));
- iTempPreset->SetImgUrl(imgUrl);
- }
- else
- {
- //nothing to be done
- //the imgUrl present in the preset is correct, no need to change anything
- }
-
- //set the downloaded logo to the preset with the API SetLogoData()
- iTempPreset->SetLogoData(*iRespBody);
- if(iTempReqFrom == 0)//which means the request came from SearchView while doing Add to Favorite
- {
- iPresetModifiedStatus = ETrue;
- }
- else if(iTempReqFrom == 1)//which menas the request came from a view other than NowPlayingView
- {
- iTempLogoHandle->PresetLogoDownloadedL(iTempPreset);
- }
- else if(iTempReqFrom == 2)//which menas the request came from NowPlayingView
- {
- //(1)logo has downloaded freshly
- //(2)send the logo to the NPV through PresetLogoDownloadedL
- //(3)check whether the preset exists in favdb; if so replace that with new logo
- iTempLogoHandle->PresetLogoDownloadedL(iTempPreset);
- }
-
-
- iTempPreset->SetImgUrl(urlWithPar);
- //Cache the newly downloaded logo
- iCache->CacheLogoL(*iRespBody,iTempPreset->GetImgUrl(),*iResponseHeaders);
-
- //close all the buffers
- imgUrl.Close();
- tempBuf.Close();
- urlWithPar.Close();
-
- iRunning = EFalse;
- iState = EIdle;
- IRLOG_DEBUG( "CIRLogoDownloadEngine::SendPresetWithLogoL - Exiting" );
- }
-
-
-
-// ---------------------------------------------------------------------------------------
-// CIRLogoDownloadEngine::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
-// callback API from MHTTPTransactionCallback
-// ---------------------------------------------------------------------------------------
-//
-void CIRLogoDownloadEngine::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::MHFRunL - Entering" );
- switch (aEvent.iStatus)
- {
- case THTTPEvent::EGotResponseHeaders:
- {
- RHTTPResponse resp = aTransaction.Response();
- TInt status = resp.StatusCode();
- iRespCode = status;
- ExtractResponseHeadersL(aTransaction);
- if(status >= KStatusOK && status < KStatusMultipleChoices)
- {
- THTTPHdrVal headerValue(0);
- RHTTPHeaders headers = resp.GetHeaderCollection();
- TInt error = headers.GetField(iLogoSession.StringPool().StringF(HTTP::EContentLength,
- RHTTPSession::GetTable()), 0, headerValue);
- iRespBodySize = 0;
- if (KErrNone == error)
- {
- iRespBodySize = headerValue.Int();
- }
- iRespBody = HBufC8::NewL(iRespBodySize+1);
- }
- else if( status == KStatusNotModified )//304 means, the content has not modified
- {
- if(iIsConditionalGET)
- {
- iIsConditionalGET = EFalse;
- iRunning = EFalse;
- //update the trust period
- //no problem if it leaves
- TRAP_IGNORE(iCache->UpdateTrustPeriodL(KLogo,iTempPreset->GetImgUrl(),
- *iResponseHeaders))
- //do a forced get because the data is notmodifed in isds and
- //trustable
- iForceGet = ETrue;
- CheckCacheForLogoL(1);
- }
- }
- else if( status == KStatusGatewayTimeout )
- {
- //implementation, if needed
- CancelTransaction();
- if(iTempReqFrom == 0)
- {
- //do nothing
- }
- else
- {
- iTempLogoHandle->PresetLogoDownloadError(iTempPreset);
- }
- ManagePresetArrayIndexL();
- }
-
- }
- break;
-
- case THTTPEvent::EGotResponseBodyData:
- {
- MHTTPDataSupplier* body = aTransaction.Response().Body();
- TPtrC8 dataChunk;
- body->GetNextDataPart(dataChunk);
- if(iRespBodySize > 0)
- {
- iRespBody->Des().Append((const TDesC8&)dataChunk);
- }
- else if(iRespBody)
- {
- //which means the body of the response has come
- //but in the response headers Content-Length is missing
- //for this usecase realloc the iRespBody with the data received
- HBufC8* buffertmp = HBufC8::NewLC( dataChunk.Length() + 1 );
- TPtr8 buffertmpPtr( buffertmp->Des() );
- buffertmpPtr.Copy( (const TDesC8&)dataChunk );
-
- TInt tempSize;
- tempSize = iRespBody->Length() + dataChunk.Length();
-
- iRespBody = iRespBody->ReAllocL( tempSize );
- TPtr8 ibufferPtr( iRespBody->Des() );
- ibufferPtr.Append(buffertmpPtr);
-
-
-
- CleanupStack::PopAndDestroy(buffertmp); // buffertmp
- }
- body->ReleaseData();
- }
- break;
-
- case THTTPEvent::EResponseComplete:
- {
- //No implementation
- }
- break;
-
- case THTTPEvent::ESucceeded:
- {
- iTransaction.Close();
- if(iIsConditionalGET)
- {
- iIsConditionalGET = EFalse;
- }
-
- iRunning = EFalse;
- //set the downloaded logo in the preset and send it back to the requestor
- SendPresetWithLogoL();
- ManagePresetArrayIndexL();
- }
- break;
-
- case THTTPEvent::EFailed:
- {
- aTransaction.Close();
- iRunning = EFalse;
- iState = EIdle;
- if( iRespCode == KStatusNotModified )//304 means, the content has not modified
- {
- //do nothing;
- }
- else
- {
- if(iTempReqFrom == 0)
- {
- //do nothing
- }
- else
- {
- iTempLogoHandle->PresetLogoDownloadError(iTempPreset);
- }
- }
- ManagePresetArrayIndexL();
- }
- break;
-
- default:
-
- if (aEvent.iStatus < 0)
- {
- aTransaction.Close();
- iRunning = EFalse;
- iState = EIdle;
- if(iTempReqFrom == 0)
- {
- //do nothing
- }
- else
- {
- iTempLogoHandle->PresetLogoDownloadError(iTempPreset);
- }
- ManagePresetArrayIndexL();
- }
- break;
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::MHFRunL - Exiting" );
- }
-
-
-// ------------------------------------------------------------------------------------------------------------------
-// CIRLogoDownloadEngine::MHFRunError(TInt /*aError*/, RHTTPTransaction aTransaction, const THTTPEvent& /*aEvent*/)
-// callback API from MHTTPTransactionCallback
-// ------------------------------------------------------------------------------------------------------------------
-//
-TInt CIRLogoDownloadEngine::MHFRunError(TInt /*aError*/, RHTTPTransaction aTransaction, const THTTPEvent& /*aEvent*/)
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::MHFRunError - Entering" );
- aTransaction.Close();
- iRunning = EFalse;
- iState = EIdle;
- if(iIsConditionalGET)
- {
- iIsConditionalGET = EFalse;
- }
- if(iTempReqFrom == 0)
- {
- //do nothing
- }
- else
- {
- iTempLogoHandle->PresetLogoDownloadError(iTempPreset);
- }
- TRAP_IGNORE(ManagePresetArrayIndexL())
- IRLOG_DEBUG( "CIRLogoDownloadEngine::MHFRunError - Exiting" );
- return KErrNone;
- }
-
-// --------------------------------------------------------------------
-// CIRLogoDownloadEngine::GetNextDataPart(TPtrC8& aDataPart)
-// callback API from MHTTPDataSupplier
-// --------------------------------------------------------------------
-TBool CIRLogoDownloadEngine::GetNextDataPart(TPtrC8& aDataPart)
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::GetNextDataPart - Entering" );
- aDataPart.Length();
- iReqBody->Length();
- aDataPart.Set(*iReqBody);
- IRLOG_DEBUG( "CIRLogoDownloadEngine::GetNextDataPart - Exiting" );
- return ETrue;
- }
-
-// --------------------------------------------------------------------
-// CIRLogoDownloadEngine::ReleaseData()
-// callback API from MHTTPDataSupplier
-// --------------------------------------------------------------------
-void CIRLogoDownloadEngine::ReleaseData()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::ReleaseData" );
- //No implementaion
- }
-
-
-// --------------------------------------------------------------------
-// CIRLogoDownloadEngine::Reset()
-// callback API from MHTTPDataSupplier
-// --------------------------------------------------------------------
-TInt CIRLogoDownloadEngine::Reset()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::Reset" );
- return KErrNone;
- }
-
-
-// --------------------------------------------------------------------
-// CIRLogoDownloadEngine::OverallDataSize()
-// callback API from MHTTPDataSupplier
-// --------------------------------------------------------------------
-TInt CIRLogoDownloadEngine::OverallDataSize()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::OverallDataSize" );
- return iReqBody->Length();
- }
-
-// ---------------------------------------------------------------------------
-// CIRLogoDownloadEngine::ExtractResponseHeadersL( RHTTPTransaction aTransaction )
-// Used to Extract the response headers.
-// ---------------------------------------------------------------------------
-//
-
-void CIRLogoDownloadEngine::ExtractResponseHeadersL(const RHTTPTransaction&
- aTransaction )
- {
- IRLOG_DEBUG( "CIRHttpDataProvider::ExtractResponseHeadersL - Entering" );
- RHTTPResponse response = aTransaction.Response();
- RHTTPHeaders respHeader = response.GetHeaderCollection();
- THTTPHdrFieldIter iterator = respHeader.Fields();
- RStringPool httpStringPool = aTransaction.Session().StringPool();
- iterator.First();
- HBufC8 *headerField = HBufC8::NewLC( KMaxHeaderNameLength +
- KMaxHeaderValueLength );
- HBufC8 *fieldValBuf = HBufC8::NewLC( KMaxHeaderValueLength );
- while ( iterator.AtEnd() == EFalse )
- {
- RStringTokenF fieldName = iterator();
- RStringF fieldNameStr = httpStringPool.StringF( fieldName );
- THTTPHdrVal fieldVal;
- if ( respHeader.GetField( fieldNameStr, 0, fieldVal ) == KErrNone )
- {
- const TDesC8 &fieldNameDesC = fieldNameStr.DesC();
- headerField->Des().Copy( fieldNameDesC.Left(
- KMaxHeaderNameLength ) );
- fieldValBuf->Des().Zero();
- switch ( fieldVal.Type() )
- {
- // the value is an integer
- //lint restore -e747:Significant prototype
- //coercion (arg. no. 1) int to long long :
- case THTTPHdrVal::KTIntVal: fieldValBuf->Des().Num(
- fieldVal.Int() );
- break;
- // the value is a case-insensitive string
- case THTTPHdrVal::KStrFVal:
- {
- RStringF fieldValStr = httpStringPool.StringF(
- fieldVal.StrF() );
- const TDesC8 &fieldValDesC = fieldValStr.DesC();
- fieldValBuf->Des().Copy( fieldValDesC.Left(
- KMaxHeaderValueLength ) );
- }
- break;
- // the value is a case-sensitive string
- case THTTPHdrVal::KStrVal:
- {
- RString fieldValStr = httpStringPool.String(
- fieldVal.Str() );
- const TDesC8 &fieldValDesC = fieldValStr.DesC();
- fieldValBuf->Des().Copy( fieldValDesC.Left(
- KMaxHeaderValueLength ) );
- }
- break;
- // the value is a date/time
- case THTTPHdrVal::KDateVal:
- {
- TDateTime date = fieldVal.DateTime();
- TTime t( date );
-// if ( iSetNonUAProfUserAgent )
-// {
- HttpDateHeaderReceived( *headerField ,t );
-// }
- }
- break;
- // the value is type is unknown
- default:
- break;
- }
- // Display HTTP header field name and value
- headerField->Des().Append( KDPColon );
- headerField->Des().Append( *fieldValBuf );
- HttpHeaderReceived( *headerField );
- }
- ++iterator;
- }
-
- CleanupStack::PopAndDestroy( fieldValBuf );
- CleanupStack::PopAndDestroy( headerField );
- IRLOG_DEBUG( "CIRLogoDownloadEngine::ExtractResponseHeadersL - Exiting." );
- }
-
-
-
-// ---------------------------------------------------------------------------
-// CIRLogoDownloadEngine::HttpHeaderReceived( const TDesC8& aHeaderData )
-// indicate that an HTTP header is received.
-// ---------------------------------------------------------------------------
-//
-void CIRLogoDownloadEngine::HttpHeaderReceived( const TDesC8& aHeaderData )
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::HttpHeaderReceived - Entering." );
- _LIT8(KDelim,":");
- _LIT8(KContentType,"Content-Type");
- ExtractHeaderValue(aHeaderData,KContentType,KDelim,iResponseHeaders->
- iContentType);
- _LIT8(KMaxAge,"max-age");
- _LIT8(KDelimEqual,"=");
- ExtractHeaderValue(aHeaderData,KMaxAge,KDelimEqual,iResponseHeaders->
- iMaxAge);
- _LIT8(KContentLength,"Content-Length");
- ExtractHeaderValue(aHeaderData,KContentLength,KDelim,iResponseHeaders->
- iContentLength);
- _LIT8(KExpires,"Expires");
- ExtractHeaderValue(aHeaderData,KExpires,KDelim,iResponseHeaders->iExpires);
- _LIT8(KETag,"ETag");
- ExtractHeaderValue(aHeaderData,KETag,KDelim,iResponseHeaders->iETag);
- IRLOG_DEBUG( "CIRLogoDownloadEngine::HttpHeaderReceived - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// CIRLogoDownloadEngine::ExtractHeaderValue(const TDesC8& aHeaderData,const
-// TDesC8& aHeaderName,const TDesC8& aDelimeter,TDes8& aHolder) const
-// Used to build the CIRHttpResponseData
-// ---------------------------------------------------------------------------
-//
-void CIRLogoDownloadEngine::ExtractHeaderValue(const TDesC8& aHeaderData,const
- TDesC8& aHeaderName,const TDesC8& aDelimeter,TDes8& aHolder) const
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::ExtractHeaderValue - Entering" );
- TInt position = aHeaderData.Find(aHeaderName);
- if( position >= 0)
- {
- TPtrC8 headerValue = aHeaderData.Mid(position);
- TInt delimeterPosition = headerValue.Find(aDelimeter);
- if( delimeterPosition != KErrNotFound )
- {
- delimeterPosition++;
- TPtrC8 value = headerValue.Mid(delimeterPosition);
- aHolder.Copy(value);
- aHolder.TrimAll();
- }
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::ExtractHeaderValue - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// CIRLogoDownloadEngine::HttpDateHeaderReceived(const TDesC8 &aHeader,
-// const TTime& aTime )
-// Used to build the CIRHttpResponseData members
-// ---------------------------------------------------------------------------
-//
-void CIRLogoDownloadEngine::HttpDateHeaderReceived(const TDesC8 &aHeader,
- const TTime& aTime )
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::HttpDateHeaderReceived - Entering." );
- _LIT8(KDate,"Date");
- _LIT8(KLastModified,"Last-Modified");
- TInt position = aHeader.Find(KDate);
- if( position != KErrNotFound )
- {
- iResponseHeaders->iDate = aTime;
- return ;
- }
- position = aHeader.Find(KLastModified);
- if( position != KErrNotFound )
- {
- iResponseHeaders->iLastModified = aTime;
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::HttpDateHeaderReceived - Exiting." );
- }
-
-
-
-
-
-// --------------------------------------------------------------------
-// CIRLogoDownloadEngine::ManagePresetArrayIndexL()
-// To make another download request if exists in the queue
-// To update the iPresetArray current index
-// --------------------------------------------------------------------
-void CIRLogoDownloadEngine::ManagePresetArrayIndexL()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::ManagePresetArrayIndexL - Entering" );
- TInt PresetArrayLength = iPresetArray->Count();
- if((PresetArrayLength>0) && (iPresetArrayPos < PresetArrayLength))
- {
- CIRIsdsPreset* tempPreset = CIRIsdsPreset::NewL();
- CleanupStack::PushL(tempPreset);
- *tempPreset = *(iPresetArray->At(iPresetArrayPos));
- if(iReqFromArrayPos < iReqFromArray->Count() && iReqFromArray->At(iReqFromArrayPos) == 0 )
- {
- FetchLogoDataL(tempPreset);
- }
- else if(iObserverArrayPos < iObserverArray->Count())
- {
- FetchLogoDataL(tempPreset,iObserverArray->At(iObserverArrayPos),
- iReqFromArray->At(iReqFromArrayPos));
- ++iObserverArrayPos;
- }
- ++iPresetArrayPos;
- ++iReqFromArrayPos;
-// delete tempPreset;
- CleanupStack::PopAndDestroy(tempPreset);
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::ManagePresetArrayIndexL - Exiting" );
- }
-
-
-// --------------------------------------------------------------------
-// CIRLogoDownloadEngine::ManageCachePresetArrayIndexL()
-// To make another download request if exists in the queue
-// To update the iCachePresetArray current index
-// --------------------------------------------------------------------
-void CIRLogoDownloadEngine::ManageCachePresetArrayIndexL()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::ManageCachePresetArrayIndexL - Exiting" );
- TInt CachePresetArrayLength = iCachePresetArray->Count();
- if((CachePresetArrayLength>0) && (iCachePresetArrayPos < CachePresetArrayLength))
- {
- CIRIsdsPreset* tempPreset;
- tempPreset = CIRIsdsPreset::NewL();
- CleanupStack::PushL(tempPreset);
- *tempPreset = *(iCachePresetArray->At(iCachePresetArrayPos));
-
- if(iCacheReqFromArrayPos < iCacheReqFromArray->Count() &&
- iCacheReqFromArray->At(iCacheReqFromArrayPos) == 0 )
- {
- SendRequestL(tempPreset,KLogoSize,KLogoSize);
- }
- else if(iCacheObserverArrayPos < iCacheObserverArray->Count())
- {
- SendRequestL(tempPreset,iCacheObserverArray->At(iCacheObserverArrayPos),
- iCacheReqFromArray->At(iCacheReqFromArrayPos));
- ++iCacheObserverArrayPos;
- }
- ++iCachePresetArrayPos;
- ++iCacheReqFromArrayPos;
-// delete tempPreset;
- CleanupStack::PopAndDestroy(tempPreset);
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::ManageCachePresetArrayIndexL - Exiting" );
- }
-
-// -----------------------------------------------------
-// CIRLogoDownloadEngine::CacheError()
-// Called from cachemgmt in case of an error
-// callback API from MIRCacheObserver
-// -----------------------------------------------------
-void CIRLogoDownloadEngine::CacheError()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::CacheError" );
-
- //code here, if needed
- }
-
-// -----------------------------------------------------
-// CIRLogoDownloadEngine::CacheFailed()
-// Called from cachemgmt in case of cache failure
-// callback API from MIRCacheObserver
-// -----------------------------------------------------
-void CIRLogoDownloadEngine::CacheFailed()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::CacheFailed" );
- //code here, if needed
- }
-
-// -----------------------------------------------------
-// CIRLogoDownloadEngine::CacheInvalid()
-// Called from cachemgmt in case cache is invalid
-// callback API from MIRCacheObserver
-// -----------------------------------------------------
-void CIRLogoDownloadEngine::CacheInvalid()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::CacheInvalid - Entering" );
- iETag = iCache->iETag;
- IRLOG_DEBUG( "CIRLogoDownloadEngine::CacheInvalid - Exiting" );
- }
-
-// -----------------------------------------------------
-// CIRLogoDownloadEngine::CachedStructureL(TInt aChoice)
-// Called from cachemgmt data retrival is successful
-// callback API from MIRCacheObserver
-// -----------------------------------------------------
-void CIRLogoDownloadEngine::CachedStructureL(TInt aChoice)
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::CachedStructureL - Entering" );
- if(iCacheReqMade)
- {
- iCacheReqMade = EFalse;
- if(aChoice == KCacheAvailable)
- {
-
- TInt sizeImgUrlWithPmts = 0;
- //Remove the imgUrl with parameters from the Preset
- //now set imgUrl without parameters in to the Preset
- if(iSendingLogo==0)
- {
- sizeImgUrlWithPmts = iCacheTempPreset->GetImgUrl().Length();
- }
- else if(iSendingLogo==1)
- {
- sizeImgUrlWithPmts = iTempPreset->GetImgUrl().Length();
- }
- else if(iSendingLogo==2)
- {
- sizeImgUrlWithPmts = KTen;
- }
- TBool hasParameters = EFalse;
- RBuf urlWithPar;
- urlWithPar.Create(sizeImgUrlWithPmts);
- if(iSendingLogo==0)
- {
- urlWithPar.Copy(iCacheTempPreset->GetImgUrl());
- }
- else if(iSendingLogo==1)
- {
- urlWithPar.Copy(iTempPreset->GetImgUrl());
- }
- else if(iSendingLogo==2)
- {
- _LIT(KNone,"");
- urlWithPar.Copy(KNone);
- }
-
- RBuf tempBuf;
- tempBuf.Create(sizeImgUrlWithPmts);
-
- TLex urlLex(urlWithPar);
- for(;!urlLex.Eos();)
- {
- tempBuf.Zero();
- while(urlLex.Peek() != '?' && !urlLex.Eos())
- {
- tempBuf.Append(urlLex.Get());
- }
- if(urlLex.Peek() == '?')
- {
- hasParameters = ETrue;
- }
- urlLex.Inc();
- }
-
- RBuf imgUrl;
- if(hasParameters)
- {
- //let say urlWithPar has the value http://www.logos.com/images/test.pngx=100&y=100
- //now the tempBuf contains the value x=100&y=100
- TInt sizeUrlParameters = tempBuf.Length();
- sizeUrlParameters++; // now this integer contains the size of x=100&y=100
- TInt sizeImgUrl = sizeImgUrlWithPmts - sizeUrlParameters;
-
- //Create a buffer to store the imgUrl without parameters
- imgUrl.Create(sizeImgUrl);
- imgUrl.Copy(urlWithPar.Left(sizeImgUrl));
- if(iSendingLogo==0)
- {
- iCacheTempPreset->SetImgUrl(imgUrl);
- }
- else if(iSendingLogo==1)
- {
- iTempPreset->SetImgUrl(imgUrl);
- }
- }
- else
- {
- //nothing to be done
- //the imgUrl present in the preset is correct, no need to change anything
- }
-
-
-
- if(iSendingLogo==0)
- {
- if(aChoice == KCacheAvailable)//logo is available in the cache
- {
- iCacheTempPreset->SetLogoData(iCache->iLogoData);
- }
- if(iCacheReqFrom == 0)
- {
- iPresetModifiedStatus = ETrue;
- }
- else
- {
- iCacheTempLogoHandle->PresetLogoDownloadedL(iCacheTempPreset);
- }
-
-
- ManageCachePresetArrayIndexL();
- }
- else if(iSendingLogo==1)
- {
- if(aChoice == KCacheAvailable)//logo is available in the cache
- {
- iTempPreset->SetLogoData(iCache->iLogoData);
- }
- if(iTempReqFrom == 0)
- {
- iPresetModifiedStatus = ETrue;
- }
- else
- {
- iTempLogoHandle->PresetLogoDownloadedL(iTempPreset);
- }
-
- ManagePresetArrayIndexL();
- }
- else if(iSendingLogo==2)//logo request from the search results (while displaying logo)
- {
- //code here, if needed
- }
-
- //close all the buffers
- imgUrl.Close();
- tempBuf.Close();
- urlWithPar.Close();
- }
-
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::CachedStructureL - Exiting" );
- }
-
-// -----------------------------------------------------
-// CIRLogoDownloadEngine::ReleaseResources()
-// Releases the resources held by logo download engine
-// Used to close the Http Session if already open
-// -----------------------------------------------------
-void CIRLogoDownloadEngine::ReleaseResources()
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::ReleaseResources - Entering" );
- CancelTransaction();
- iLogoSession.Close();
- iFirstTime = ETrue;
- IRLOG_DEBUG( "CIRLogoDownloadEngine::ReleaseResources - Exiting" );
- }
-
-// -----------------------------------------------------------------------------
-// Notified by network controller when network is active, to reissue the request
-// NotifyActiveNetworkObserversL()
-// -----------------------------------------------------------------------------
-
-void CIRLogoDownloadEngine::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
- {
- IRLOG_DEBUG( "CIRLogoDownloadEngine::NotifyActiveNetworkObserversL - Entering" );
- switch(aEvent)
- {
- case ENetworkConnectionDisconnected:
- {
- ReleaseResources();
- }
- break;
- case ENetworkConnectionEstablished:
- {
- if( iLogoRequestPending )
- {
- IssueLogoDownloadRequestL();
- }
- }
- }
- IRLOG_DEBUG( "CIRLogoDownloadEngine::NotifyActiveNetworkObserversL - Exiting" );
- }
-
-
-// -----------------------------------------------------------------------------
-// Notified by network controller when user cancels network connection, to reset
-// the pending requests
-// ResetPendingRequests()
-// -----------------------------------------------------------------------------
-void CIRLogoDownloadEngine::ResetPendingRequests(TBool /*aValue*/)
- {
-
- }
-