--- a/internetradio2.0/isdsclientsrc/irisdsclient.cpp Tue Jul 06 14:07:20 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1715 +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: ?Description
-*
-*/
-
-
-#include <escapeutils.h>
-#include <tinternetdate.h>
-#include <utf.h>
-
-#include "irbrowsecatagoryitems.h"
-#include "irbrowsechannelitems.h"
-#include "ircachemgmt.h"
-#include "irdataprovider.h"
-#include "irdataproviderconstants.h"
-#include "irdebug.h"
-#include "irhttprequestdata.h"
-#include "irotaupdate.h"
-#include "irsessionlogger.h"
-#include "irsettings.h"
-#include "irxmlcontenthandler.h"
-#include "isdsclientdll.h"
-#include "misdsresponseobserver.h"
-
-#include "irisdspreset.h"
-
-const TInt KChannelidMaxLength = 25;
-const TInt KTwo = 2;
-/*const TInt KDays = 7;
-const TInt KHour = 24;
-const TInt KMinute = 60;
-const TInt KSecond = 60;*/
-const TInt KUrlPassMaxLength = 124;
-const TInt KChidMaxLength = 6;
-const TInt KCopyOfTimeMaxLength = 32;
-const TInt KMaxLength = 256;
-const TInt KFour = 4;
-
-_LIT(KBrowseUrl,"/do/directory/browse?type=");
-_LIT(KChannelnSearchUrl,"/do/directory/browse?type=channels&searchText=");
-
-_LIT(KGetIRIDUrl,"/do/service/getIrid");
-_LIT(KGenres,"genres");
-_LIT(KLanguages,"languages");
-_LIT(KCountries,"countries");
-_LIT(KHotpicks,"hotpicks");
-_LIT(KOtaUpdateUrl,"/do/service/otaUpdate?irid=");
-_LIT(KLogUsageUrl,"/do/service/logUsage");
-_LIT(KSearchUrl,"&start=1&size=50");
-_LIT(KMultiSearchUrl, "/do/directory/browse?type=channels&genreID=%S&countryID=%S&languageID=%S&searchText=");
-
-
-// ---------------------------------------------------------------------------
-// CIRIsdsClient::NewL(MIsdsResponseObserver& aobserver)
-// Used by UI to create instance of CIRIsdsClient.
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CIRIsdsClient* CIRIsdsClient::NewL(MIsdsResponseObserver& aobserver,
- const TDesC& aISDSBaseUrl)
- {
- IRLOG_DEBUG( "CIRIsdsClient::NewL - Entering" );
- CIRIsdsClient* self = CIRIsdsClient::NewLC(aobserver,aISDSBaseUrl);
-
- CleanupStack::Pop( self );
- IRLOG_DEBUG( "CIRIsdsClient::NewL - Exiting." );
- return self;
- }
-
-
-// ---------------------------------------------------------------------------
-// CIRIsdsClient::NewLC(MIsdsResponseObserver& aobserver)
-// Creates instance of CIRIsdsClient.
-// ---------------------------------------------------------------------------
-//
-CIRIsdsClient* CIRIsdsClient::NewLC(MIsdsResponseObserver& aobserver,
- const TDesC& aISDSBaseUrl)
- {
- IRLOG_DEBUG( "CIRIsdsClient::NewLC - Entering" );
- CIRIsdsClient* self = new ( ELeave ) CIRIsdsClient(aobserver);
- CleanupStack::PushL( self );
- self->ConstructL(aISDSBaseUrl);
- IRLOG_DEBUG( "CIRIsdsClient::NewLC - Exiting." );
- return self;
- }
-
-
-// ---------------------------------------------------------------------------
-// CIRIsdsClient::ConstructL()
-// Symbian two phased constructor
-// ---------------------------------------------------------------------------
-//
-void CIRIsdsClient::ConstructL(const TDesC& aISDSBaseUrl)
- {
- //! Construsting the DataproviderDLL instance
- IRLOG_DEBUG( "IRIsdsClient::ConstructL - Entering" );
- iSettings=CIRSettings::OpenL();
- iISDSBaseUrl=aISDSBaseUrl.AllocL();
-//Base URL required to browse through the category
- iCatgoryURL.Zero();
- iCatgoryURL.Copy(*iISDSBaseUrl);
- iCatgoryURL.Append(KBrowseUrl);
- //Base URL required to search isds
- iSearchURL.Zero();
- iSearchURL.Copy(*iISDSBaseUrl);
- iSearchURL.Append(KChannelnSearchUrl);
- //Base URL required to get IRID
- iGetIridUrl.Zero();
- iGetIridUrl.Copy(*iISDSBaseUrl);
- iGetIridUrl.Append(KGetIRIDUrl);
- //creates DataProvider
- iDataProvider=CIRDataProvider::NewL(*this);
- //creates XML Parser
- iXmlReader=CIRXMLContentHandler::NewL(*this,*this);
- //creates Cache manager
- iCache=CIRCacheMgmt::OpenL(*this);
- iCache->AddObserverL(this);
- //Session Log
- iBrowseReport = CIRReportGenerator::OpenL();
- // Retrive the current language and set it as an Accept Language
- TLanguage currentLanguage = User::Language();
- iShortLanguageCode = IRLanguageMapper::MapLanguage(currentLanguage);
-
- IRLOG_DEBUG( "IRIsdsClient::ConstructL - Exiting." );
-
- }
-
-
-// ---------------------------------------------------------------------------
-// CIRIsdsClient::CIRIsdsClient(MIsdsResponseObserver& aobserver)
-// Default constructor
-// ---------------------------------------------------------------------------
-//
-CIRIsdsClient::CIRIsdsClient(MIsdsResponseObserver& aobserver):
- iIsdsResponseObserver(aobserver)
- {
- IRLOG_DEBUG( "CIRIsdsClient::CIRIsdsClient" );
- //No implementation
- }
-
-// ---------------------------------------------------------------------------
-// CIRIsdsClient::~CIRIsdsClient()
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CIRIsdsClient::~CIRIsdsClient()
- {
- IRLOG_DEBUG( "CIRIsdsClient::~CIRIsdsClient - Entering" );
- delete iDataProvider;
- delete iXmlReader;
- if(iSendPreset)
- {
- iSendPreset->ResetAndDestroy();
- }
- delete iSendPreset;
-
- if (iCache)
- {
- iCache->RemoveObserver(this);
- iCache->Close();
- }
-
- if(iSettings)
- {
- iSettings->Close();
- }
- delete iISDSBaseUrl;
- if(iBrowseReport)
- {
- iBrowseReport->Close();
- }
- if(iTempRequestObject)
- {
- delete iTempRequestObject;
- iTempRequestObject = NULL;
- }
-
- IRLOG_DEBUG( "CIRIsdsClient::~CIRIsdsClient - Exiting." );
- }
-
-
-EXPORT_C TBool CIRIsdsClient::IRIsdsIsCategoryCachedL(
- TIRIsdsclientInterfaceIDs aISDSClientRequest)
-{
- iForceGet=EFalse;
- TInt res = 0;
- iCacheReqMade = EFalse;
- switch(aISDSClientRequest)
- {
- //When genre data is requested by user
- case EGenre:
- {
- //set the request type for subsiquent Use
-
- iCachePath.Zero();
- iCachePath.Copy(KGenres);
- iCache->CheckCacheL(0,KGenres,iForceGet,res);
- }
-
- break;
- //When Language data is requested by user
- case ELanguages:
- {
-
- iCachePath.Zero();
- iCachePath.Copy(KLanguages);
- iCache->CheckCacheL(0,KLanguages,iForceGet,res);
-
- }
- break;
- //When Country data is requested by user
- case ECountries:
- {
-
- iCachePath.Zero();
- iCachePath.Copy(KCountries);
- iCache->CheckCacheL(0,KCountries,iForceGet,res);
- }
- break;
-
- //When hotpics data is requested by user
- case Ehotpicks:
- {
- //set the request type for subsiquent Use
- iCachePath.Zero();
- iCachePath.Copy(KHotpicks);
- iCache->CheckCacheL(1,KHotpicks,iForceGet,res);
-
- }
- break;
- default:
- break;
- }
-
- if (res == CIRCacheMgmt::ECacheUseable)
- {
- return ETrue;
- }
-
-
- return EFalse;
-}
-// ---------------------------------------------------------------------------
-// void CIRIsdsClientInteface(TIRIsdsclientInterfaceIDs aISDSClientRequest)
-// Called by UI to make request to ISDS for catogories
-// @param :ENUM value depending on catogory which user wants to explore
-// ---------------------------------------------------------------------------
-//
-
-EXPORT_C TBool CIRIsdsClient::IRIsdsClientIntefaceL(TIRIsdsclientInterfaceIDs
- aISDSClientRequest)
- {
- //cancels any pending request
- IRLOG_DEBUG( "CIRIsdsClient::IRIsdsClientIntefaceL - Entering" );
- CIRHttpRequestData * requestData= new(ELeave) CIRHttpRequestData;
- CleanupStack::PushL(requestData);
- requestData->iAcceptLanguage.Copy( iShortLanguageCode );
- //Sets the Htpp method to GET
- requestData->iMethod = EIRHttpGET;
- //check for valid cache
- iForceGet=EFalse;
-
- TInt res=0;
-
- switch(aISDSClientRequest)
- {
- //When genre data is requested by user
- case EGenre:
- {
- //set the request type for subsiquent Use
- iRequestType=0;
- iDataFrom=EFalse;
- iCachePath.Zero();
- iCachePath.Copy(KGenres);
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(0,KGenres,iForceGet,res);
- if(res==0)//if cache is not available
- {
- requestData->iUri.Copy(iCatgoryURL);
- requestData->iUri.Append(KGenres);
- iConditonalGet=EFalse;
- //issues request for Genre data
- IRHttpIssueRequestL(*requestData);
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- iDataFrom=ETrue;
- }
- if(res ==-1)//i cache is stale
- {
- iConditonalGet=ETrue;
- requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
- requestData->isIfModifiedSet = ETrue;
- requestData->iUri.Copy(iCatgoryURL);
- requestData->iUri.Append(KGenres);
- IRHttpIssueRequestL(*requestData);
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- iDataFrom=ETrue;
- }
- if (res == 1)
- {
- requestData->iUri.Copy(iCatgoryURL);
- requestData->iUri.Append(KGenres);
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- }
- }
- break;
- //When Language data is requested by user
- case ELanguages:
- {
- //set the request type for subsiquent Use
- iRequestType=0;
- iDataFrom=EFalse;
-
- iCachePath.Zero();
- iCachePath.Copy(KLanguages);
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(0,KLanguages,iForceGet,res);
-
- if(res==0)//if cache is not available
- {
- requestData->iUri.Copy(iCatgoryURL);
- requestData->iUri.Append(KLanguages);
- //Isuues request for language data
- IRHttpIssueRequestL(*requestData);
- iConditonalGet=EFalse;
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- iDataFrom=ETrue;
- }
- if(res ==-1)//i cache is stale
- {
- iConditonalGet=ETrue;
- requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
- requestData->isIfModifiedSet=ETrue;
- requestData->iUri.Copy(iCatgoryURL);
- requestData->iUri.Append(KLanguages);
- //Isuues request for language data if cache isnt valid
- IRHttpIssueRequestL(*requestData);
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- iDataFrom=ETrue;
- }
- if (res == 1)
- {
- requestData->iUri.Copy(iCatgoryURL);
- requestData->iUri.Append(KLanguages);
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- }
- }
- break;
- //When Country data is requested by user
- case ECountries:
- {
- //set the request type for subsiquent Use
- iRequestType=0;
- iDataFrom=EFalse;
-
- iCachePath.Zero();
- iCachePath.Copy(KCountries);
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(0,KCountries,iForceGet,res);
- if(res==0)//if cache is not available
- {
- requestData->iUri.Copy(iCatgoryURL);
- requestData->iUri.Append(KCountries);
- //Isuues request for country data
- IRHttpIssueRequestL(*requestData);
- iConditonalGet=EFalse;
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- iDataFrom=ETrue;
- }
- if(res ==-1)//i cache is stale
- {
- iConditonalGet=ETrue;
- requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
- requestData->isIfModifiedSet = ETrue;
- requestData->iUri.Copy(iCatgoryURL);
- requestData->iUri.Append(KCountries);
- //Isuues request for country data if cache isnt valid
- IRHttpIssueRequestL(*requestData);
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- iDataFrom=ETrue;
- }
- if (res == 1)
- {
- requestData->iUri.Copy(iCatgoryURL);
- requestData->iUri.Append(KCountries);
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- }
-
- }
- break;
-
- //When hotpics data is requested by user
- case Ehotpicks:
- {
- //set the request type for subsiquent Use
- iRequestType=1;
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(1,KHotpicks,iForceGet,res);
- iCachePath.Zero();
- iCachePath.Copy(KHotpicks);
- iDataFrom=EFalse;
-
- if(res==0)//if cache is not available
- {
- requestData->iUri.Copy(iCatgoryURL);
- requestData->iUri.Append(KHotpicks);
- //Isuues request for hotpics data
- IRHttpIssueRequestL(*requestData);
- iConditonalGet=EFalse;
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- iDataFrom=ETrue;
- }
- if(res ==-1)//i cache is stale
- {
- iConditonalGet=ETrue;
- requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
- requestData->isIfModifiedSet=ETrue;
- requestData->iUri.Copy(iCatgoryURL);
- requestData->iUri.Append(KHotpicks);
- //Isuues request for hotpics data if cache isnt valid
- IRHttpIssueRequestL(*requestData);
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- iDataFrom=ETrue;
- }
- if (res == 1)
- {
- requestData->iUri.Copy(iCatgoryURL);
- requestData->iUri.Append(KHotpicks);
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- }
- }
- break;
-
- }
- CleanupStack::PopAndDestroy(requestData);
- IRLOG_DEBUG( "CIRIsdsClient::IRIsdsClientIntefaceL - Exiting." );
- return iDataFrom;
- }//end of function
-
-
-EXPORT_C CIRDataProvider* CIRIsdsClient::GetDataProvider()
-{
- IRLOG_DEBUG( "CIRIsdsClient::GetDataProvider" );
- return iDataProvider;
-}
-
-
-
-
-
-// ---------------------------------------------------------------------------
-// void IRHttpContentNotChanged()
-// this is call back funtion called by Dataprovider in case
-// HTTP content isnt changed by ISDS
-// ---------------------------------------------------------------------------
-//
-void CIRIsdsClient::IRHttpResponseCodeReceived( TInt aResponseCode,
- CIRHttpResponseData& aResponseHeaders )
- {
- IRLOG_INFO2( "CIRIsdsClient::IRHttpResponseCodeReceived (%d)", aResponseCode );
- TInt res = KErrNotFound;
- switch (aResponseCode)
- {
- case KNotFound://404
- {
- //make channel user defined.
- if(iSyncRequest)
- {
- iSyncRequest = EFalse;
- //make the preset user-defined
- TRAP_IGNORE(iIsdsResponseObserver.IsdsPresetRemovedL(
- iPresetToBeSynced))
- }
-
- /*if(iOtaReqFrom)
- {
- TRAP_IGNORE(PurgeOtaInfoL())
- }*/
-
- }
- break;
- case KNotModified://304
- {
- if(iConditonalGet)
- {
- //update the trust period
- //no problem if it leaves
- TRAP_IGNORE(iCache->UpdateTrustPeriodL(iRequestType,iCachePath,
- aResponseHeaders))
- //do a forced get because the data is notmodifed in isds and
- //trustable
- iForceGet=ETrue;
- iCacheReqMade = ETrue;
- TRAP_IGNORE(iCache->CheckCacheL(iRequestType,iCachePath,
- iForceGet,res))
- }
- /*if(iOtaReqFrom)
- {
- TRAP_IGNORE(PurgeOtaInfoL())
- }*/
- }
- break;
- default:
- {
-
- }
- break;
- }
- IRLOG_DEBUG( "CIRIsdsClient::IRHttpResponseCodeReceived - Exiting." );
- }
-
-
-// ---------------------------------------------------------------------------
-// void RHttpGeneralError(TInt aErrorCode)
-// It is a call back function called by the data provider
-// to return error code in case of some error.
-// ---------------------------------------------------------------------------
-//
-void CIRIsdsClient::IRHttpGeneralError(TInt aErrorCode)
- {
- IRLOG_ERROR2( "CIRIsdsClient::IRHttpGeneralError (%d)", aErrorCode );
- IRRDEBUG2("CIRISDSCLIENT::IRHTTPGENERALERROR",KNullDesC);
- if(iSyncRequest)
- {
- IRRDEBUG2("CIRISDSCLIENT::IRHTTPGENERALERROR--IF ISYNC",KNullDesC);
- iSyncRequest=EFalse;
- if(aErrorCode == KNotModified || aErrorCode == KServiceUnavailable)
- {
- TRAP_IGNORE(iIsdsResponseObserver.IsdsPresetNoChangeL())
- return;
- }
- IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (1)." );
- }
-
- /*if(iOtaReqFrom)
- {
- //if internal service request
- //reset the flag
- iOtaReqFrom = EFalse
- IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (2)." )
- return
- }*/
- if(iConditonalGet)
- {
- IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (3). ");
- iConditonalGet = EFalse;
- if(aErrorCode==KNotModified)
- {
- return;
- }
- }
- if(iPostResponsePending)
- {
- IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (4). ");
- IRRDEBUG2("CIRISDSCLIENT::ISDSGENERALERROR--POSTPENDING",KNullDesC);
- iPostResponsePending = EFalse;
- //no action required
- //session log is backed up before sending;
- return;
- }
- if(iIRIDPending)
- {
- IRRDEBUG2("CIRISDSCLIENT::IRHTTPGENERALERROR--IF IRID",KNullDesC);
- IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (7). ");
- iIRIDPending = EFalse;
-//d TRAP_IGNORE( IRGetIRIDL() )
- }
- IRRDEBUG2("CIRISDSCLIENT::IRHTTPGENERALERROR--BEFORE TRAPD",KNullDesC);
- TRAPD(errd,iIsdsResponseObserver.IsdsErrorL(aErrorCode));
- if(errd)
- {
- IRRDEBUG2("CIRISDSCLIENT::IRHTTPGENERALERROR--IF ERRD",KNullDesC);
- IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (5)." );
- return;
- }
- IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (6)." );
- }
-
-
-// ---------------------------------------------------------------------------
-// void IRHttpDataReceived(TDesC& aXmlPath)
-// It is a call back function called by the data provider
-// once it recieves the XML data
-// ---------------------------------------------------------------------------
-//
-void CIRIsdsClient::IRHttpDataReceived( const TDesC& aXmlPath,
- const CIRHttpResponseData& aResponseHeaders)
- {
- IRLOG_DEBUG( "CIRIsdsClient::IRHttpDataReceived - Entering" );
- TBuf<KMaxLength> xmlPath;
- xmlPath.Copy(aXmlPath);
-
- //!Calls XML parser with file path to XML file recieved
- TRAPD(xmlErr,iXmlReader->ParseXmlL(xmlPath,iCachePath,aResponseHeaders))
- if(xmlErr!=KErrNone)
- {
- IRLOG_DEBUG( "CIRIsdsClient::IRHttpDataReceived - Exiting (1)." );
- return;
- }
-
- if(iIRIDPending)
- {
- iIRIDPending = EFalse;
- //if any request is pending by the time IRID response comes
- if(iReqPending)
- {
- //issue the pending request
- TRAP_IGNORE(IRHttpIssueRequestL(*iTempRequestObject))
- }
- }
-
- IRLOG_DEBUG( "CIRIsdsClient::IRHttpDataReceived - Exiting (2)." );
- }
-
-EXPORT_C TBool CIRIsdsClient::IRIsdsIsChannelCachedL(TUint aSelectedOption)
-{
- TInt res = 0;
- iCacheReqMade = EFalse;
- iForceGet=EFalse;
-
- //previous data from cache
- if (iCatDataFrom)
- {
- if (aSelectedOption >= iCache->iPtrCategory->Count())
- {
- User::Leave(KErrArgument);
- }
-
- if (iCache->iPtrCategory->Count())
- {
- iCachePath.Zero();
- iCachePath.Copy(
- (*(iCache->iPtrCategory))[aSelectedOption]->iCatId->Des());
-
- iCache->CheckCacheL(1,
- iCachePath,
- iForceGet, res);
- }
- }
- //previous data from xml
- else
- {
- if (aSelectedOption >= iXmlReader->iPtrCategory->Count())
- {
- User::Leave(KErrArgument);
- }
-
- if (iXmlReader->iPtrCategory->Count())
- {
- iCachePath.Zero();
- iCachePath.Copy(
- (*(iXmlReader-> iPtrCategory))[aSelectedOption]->iCatId->Des());
- iCache->CheckCacheL(
- 1,
- iCachePath,
- iForceGet, res);
- }
- }
-
-
- if( CIRCacheMgmt::ECacheUseable == res )
- return ETrue;
-
- return EFalse;
-}
-
-// ---------------------------------------------------------------------------
-// void CIRIsdsClientInteface(TUint aSelectedOption,TIRIsdsClientInterfaces aChoice)
-// This API is used by the UI to make request for isds listed channels
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TBool CIRIsdsClient::IRIsdsClientIntefaceL(TUint aSelectedOption,
- TIRIsdsClientInterfaces aChoice,TInt aHistoryBool)
- {
- IRLOG_DEBUG( "CIRIsdsClient::IRIsdsClientIntefaceL - Entering" );
- iForceGet=EFalse;
- CIRHttpRequestData * requestData= new(ELeave) CIRHttpRequestData;
- CleanupStack::PushL(requestData);
- requestData->iMethod = EIRHttpGET;
- requestData->iAcceptLanguage.Copy( iShortLanguageCode );
- requestData->iUri.Copy( *iISDSBaseUrl );
-
- TBool isAdvPresent = EFalse;
-
-
- TInt res;
- if(aChoice==ECatagory)
- {
- //set the request type for subsiquent Use
- iRequestType=1;
- //previous data from cache
- if(iCatDataFrom)
- {
- TInt categoryCacheIndex;
-
- if (( *(iCache->iPtrCategory))[0]->iCatGetOperation)
- {
- isAdvPresent = EFalse;
- }
- else
- {
- isAdvPresent = ETrue;
- }
- if (!isAdvPresent)
- {
- categoryCacheIndex = 0;
- }
- else
- {
- categoryCacheIndex = 1;
- }
-
- if( aSelectedOption >= iCache->iPtrCategory->Count())
- {
- User::Leave(KErrArgument);
- }
-
- if(iCache->iPtrCategory->Count())
- {
- iCachePath.Zero();
- iCachePath.Copy((*(iCache->iPtrCategory))[aSelectedOption]->iCatId->Des());
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(1,(*(iCache->iPtrCategory))[aSelectedOption]->
- iCatId->Des(),iForceGet,res);
- iDataFrom=EFalse;
- if(res == 0)
- {
- requestData->iUri.Append( (*(iCache->
- iPtrCategory))[categoryCacheIndex]->iCatGetOperation->Des());
- requestData->iUri.Append( (*(iCache->
- iPtrCategory))[aSelectedOption]->iCatId->Des());
- IRHttpIssueRequestL(*requestData);
- iConditonalGet=EFalse;
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- iDataFrom=ETrue;
- }
- if(res == -1)
- {
- iConditonalGet=ETrue;
- requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
- requestData->isIfModifiedSet = ETrue;
- requestData->iUri.Append( (*(iCache->
- iPtrCategory))[categoryCacheIndex]->iCatGetOperation->Des()); //0
- requestData->iUri.Append( (*(iCache->
- iPtrCategory))[aSelectedOption]->iCatId->Des());
- IRHttpIssueRequestL(*requestData);
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- iDataFrom=ETrue;
- }
- }
- }
- //previous data from xml
- else
- {
- TInt categoryXmlIndex;
- if (( *(iXmlReader->iPtrCategory))[0]->iCatGetOperation)
- {
- isAdvPresent = EFalse;
- }
- else
- {
- isAdvPresent = ETrue;
- }
- if (!isAdvPresent)
- {
- categoryXmlIndex = 0;
- }
- else
- {
- categoryXmlIndex = 1;
- }
-
- if (aSelectedOption >= iXmlReader->iPtrCategory->Count())
- {
- User::Leave(KErrArgument);
- }
-
- if(iXmlReader->iPtrCategory->Count())
- {
- iCachePath.Zero();
- iCachePath.Copy((*(iXmlReader->
- iPtrCategory))[aSelectedOption]->iCatId->Des());
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(1,(*(iXmlReader->
- iPtrCategory))[aSelectedOption]->iCatId->Des(),iForceGet,res);
- iDataFrom=EFalse;
- if( res==0 )
- {
- requestData->iUri.Append( (*(iXmlReader->
- iPtrCategory))[categoryXmlIndex]->iCatGetOperation->Des());
- requestData->iUri.Append( (*(iXmlReader->
- iPtrCategory))[aSelectedOption]->iCatId->Des());
- IRHttpIssueRequestL(*requestData);
- iConditonalGet=EFalse;
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- iDataFrom=ETrue;
- }
- if( res==-1 )
- {
- iConditonalGet=ETrue;
- requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
- requestData->isIfModifiedSet = ETrue;
- requestData->iUri.Append( (*(iXmlReader->
- iPtrCategory))[categoryXmlIndex]->iCatGetOperation->Des());
- requestData->iUri.Append( (*(iXmlReader->
- iPtrCategory))[aSelectedOption]->iCatId->Des());
- IRHttpIssueRequestL(*requestData);
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,0);
- iDataFrom=ETrue;
- }
- }
- }
- }
- else if(aChoice==EChannels)
- {
-
- TBuf<KChannelidMaxLength> channelid;
- //set the request type for subsiquent Use
- iRequestType=KTwo;
- _LIT(KFormat,"%d");
- if(aHistoryBool)
- {
- _LIT(KPresetFetchUrl,"/do/directory/getPreset?channelid=");
- requestData->iUri.Append(KPresetFetchUrl);
- TBuf<KChannelidMaxLength> channelid;
- _LIT(KFormat,"%d");
- channelid.Format(KFormat,aSelectedOption);
- requestData->iUri.Append(channelid);
- IRHttpIssueRequestL(*requestData);
- iConditonalGet=EFalse;
- //Session Log
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,1);
- iDataFrom=ETrue;
- CleanupStack::PopAndDestroy(requestData);
- return iDataFrom;
- }
-
- //previous data from cache
- if( iChannelDataFrom)
- {
- TInt channelCacheIndex;
- if (( *(iCache->iPtrChannel))[0]->iChannelGetOperation)
- {
- isAdvPresent = EFalse;
- }
- else
- {
- isAdvPresent = ETrue;
- }
- if (!isAdvPresent)
- {
- channelCacheIndex = 0;
- }
- else
- {
- channelCacheIndex = 1;
- }
-
-
- if( aSelectedOption >= iCache->iPtrChannel->Count())
- {
- User::Leave(KErrArgument);
- }
-
- if(iCache->iPtrChannel->Count())
- {
- channelid.Format(KFormat,(*(iCache->
- iPtrChannel))[aSelectedOption]->iChannelID);
- iCachePath.Zero();
- iCachePath.Copy(channelid);
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(KTwo,channelid,iForceGet,res);
- iDataFrom=EFalse;
- if( res == 0 || res==-1)
- {
- requestData->iUri.Append( (*(iCache->
- iPtrChannel))[channelCacheIndex]->iChannelGetOperation->Des());
- requestData->iUri.Append(channelid);
- IRHttpIssueRequestL(*requestData);
- iConditonalGet=EFalse;
- //Session Log
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,1);
- iDataFrom=ETrue;
- }
- }
- }
- //previous data from xml
- else
- {
- TInt channelXmlIndex;
- if( 0 == ( *(iXmlReader->iPtrChannel)).Count() )
- {
- CleanupStack::PopAndDestroy(requestData);
- IRLOG_DEBUG( "CIRIsdsClient::IRIsdsClientIntefaceL - Error!" );
- return iDataFrom;
- }
-
- if (( *(iXmlReader->iPtrChannel))[0]->iChannelGetOperation)
- {
- isAdvPresent = EFalse;
- }
- else
- {
- isAdvPresent = ETrue;
- }
- if (!isAdvPresent)
- {
- channelXmlIndex = 0;
- }
- else
- {
- channelXmlIndex = 1;
- }
-
- if( aSelectedOption >= iXmlReader->iPtrChannel->Count())
- {
- User::Leave(KErrArgument);
- }
-
- if(iXmlReader->iPtrChannel->Count())
- {
- channelid.Format(KFormat,(*(iXmlReader->
- iPtrChannel))[aSelectedOption]->iChannelID);
- iCachePath.Zero();
- iCachePath.Copy(channelid);
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(KTwo,channelid,iForceGet,res);
- iDataFrom=EFalse;
- if(res == 0 || res==-1)
- {
- requestData->iUri.Append( (*(iXmlReader->
- iPtrChannel))[channelXmlIndex]->iChannelGetOperation->Des());
- requestData->iUri.Append(channelid);
- IRHttpIssueRequestL(*requestData);
- iConditonalGet=EFalse;
- //Session Log
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,1);
- iDataFrom=ETrue;
- }
- }
- }
- }
- else
- {
-
- }
- CleanupStack::PopAndDestroy(requestData);
- IRLOG_DEBUG( "CIRIsdsClient::IRIsdsClientIntefaceL - Exiting" );
- return iDataFrom;
- }
-
-
-
-// ---------------------------------------------------------------------------
-// void CIRGetIRID()
-// This API is used by the UI to get IR ID from
-// isds if it doesnt have one
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRIsdsClient::IRGetIRIDL()
- {
- IRLOG_DEBUG( "CIRIsdsClient::IRGetIRIDL - Entering" );
- //if irid is not available fetch it
- if(iSettings->GetIRIDL().Length()==0)
- {
- iReqFromGetIRIDFunc = ETrue;
- iIRIDPending = EFalse;
- CIRHttpRequestData *requestData= new(ELeave) CIRHttpRequestData();
- CleanupStack::PushL(requestData);
- requestData->iMethod = EIRHttpGET;
- requestData->iAcceptLanguage.Copy( iShortLanguageCode );
- requestData->iUri.Copy(iGetIridUrl);
- IRHttpIssueRequestL(*requestData);
- CleanupStack::PopAndDestroy(requestData);
- iIRIDPending = ETrue;
- IRLOG_DEBUG( "CIRIsdsClient::IRGetIRIDL - Exiting (1)." );
- return;
- }
- IRLOG_DEBUG( "CIRIsdsClient::IRGetIRIDL - Exiting (2)." );
- }
-// ---------------------------------------------------------------------------
-// void GetOtaStatus()
-// This API is used by the UI to query for ota update
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRIsdsClient::GetOtaStatusL(TBool& aDataFrom)
- {
- IRLOG_DEBUG( "CIRIsdsClient::GetOtaStatusL - Entering" );
-
- CIRHttpRequestData *requestData= new(ELeave) CIRHttpRequestData();
-
- CleanupStack::PushL(requestData);
-
- requestData->iMethod = EIRHttpGET;
- requestData->iAcceptLanguage.Copy(iShortLanguageCode);
- iGetOtaStatus.Zero();
- iGetOtaStatus.Copy(*iISDSBaseUrl);
- iGetOtaStatus.Append(KOtaUpdateUrl);
- iGetOtaStatus.Append( iSettings->GetIRIDL());
-
- //set the request type for subsiquent Use
- iRequestType = EOtaInfo;
- iDataFrom=EFalse;
- iCachePath.Zero();
- iCachePath.Copy(KOtaUpdateUrl);
- TInt res = 0;
- //check cache if it is a genral service request
- //not initiated by the user.
- if(iOtaReqFrom)
- {
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(EOtaInfo,KOtaUpdateUrl,iForceGet,res);
- }
- if(res == 1)
- {
- aDataFrom = EFalse;
- }
- //if cache is not available or stale(dont use the trust period val)
- if(res == 0 || res == -1)
- {
- requestData->iUri.Copy(iGetOtaStatus);
- iConditonalGet=EFalse;
- //issues request for ota data
- iDataProvider->IRHttpIssueRequestL(*requestData);
- iDataFrom=ETrue;
- aDataFrom = ETrue;
- }
- CleanupStack::PopAndDestroy(requestData);
-
- IRLOG_DEBUG( "CIRIsdsClient::GetOtaStatusL - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// CIRIsdsClient::IRISDSPostL()
-// This API is used to Post Irapp usage report to isds
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRIsdsClient::IRISDSPostL(TFileName &/*aFileName*/)
- {
- IRLOG_DEBUG( "CIRIsdsClient::IRISDSPostL - Entering" );
- IRRDEBUG2("CIRISDSCLIENT::ISDSPOSTL",KNullDesC);
- //Cancels any pending requests
- IRISDSCancelRequest();
- CIRHttpRequestData * requestData= new(ELeave) CIRHttpRequestData;
- CleanupStack::PushL(requestData);
- //Sets the Http Method to POST
- requestData->iMethod = EIRHttpPOST;
- requestData->iAcceptLanguage.Copy(iShortLanguageCode);
- requestData->iUri.Copy(*iISDSBaseUrl);
- requestData->iUri.Append(KLogUsageUrl);
- //issues request to post the log usage report to isds
- iPostResponsePending = ETrue;
- IRHttpIssueRequestL(*requestData);
- CleanupStack::PopAndDestroy(requestData);
- IRLOG_DEBUG( "CIRIsdsClient::IRISDSPostL - Exiting" );
- }
-
-// ---------------------------------------------------------------------------
-// void CIRISDSCancelRequest()
-// This API is used by the UI to cancel a request made.
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRIsdsClient::IRISDSCancelRequest()
- {
- IRLOG_DEBUG( "CIRIsdsClient::IRISDSCancelRequest - Entering" );
- iSyncRequest = EFalse;
- iReqFromSync = EFalse;
- iOtaReqFrom = EFalse;
- iConditonalGet = EFalse;
- iPostResponsePending = EFalse;
- iIRIDPending = EFalse;
- iDataProvider->IRHttpCancelRequest();
- IRLOG_DEBUG( "CIRIsdsClient::IRISDSCancelRequest - Exiting" );
- }
-
-EXPORT_C void CIRIsdsClient::IRISDSMultiSearchL(const TDesC& aGenreID, const TDesC& aCountryID, const TDesC& aLanguageID, const TDesC& aSearchText)
-{
- IRLOG_DEBUG( "CIRIsdsClient::IRISDSMultiSearch - Entering" );
- CIRHttpRequestData * requestData= new(ELeave) CIRHttpRequestData();
- iCachePath.Zero();
- CleanupStack::PushL(requestData);
-
- requestData->iMethod = EIRHttpGET;
- requestData->iAcceptLanguage.Copy( iShortLanguageCode );
-
- HBufC8* utfEncodedSearchText = CnvUtfConverter::ConvertFromUnicodeToUtf8L( aSearchText );
- CleanupStack::PushL( utfEncodedSearchText );
-
-
- HBufC8 *encodedQuery = NULL;
- encodedQuery = EscapeUtils::EscapeEncodeL(*utfEncodedSearchText, EscapeUtils::EEscapeQuery);
-
- HBufC* searchURL = HBufC::NewLC(iISDSBaseUrl->Length() + KMultiSearchUrl().Length() + aGenreID.Length() + aLanguageID.Length() + aCountryID.Length() +
- KSearchUrl().Length() + utfEncodedSearchText->Size()/2+1);
- HBufC* searchPartURL = HBufC::NewLC(KMultiSearchUrl().Length() + aGenreID.Length() + aLanguageID.Length() + aCountryID.Length());
- searchPartURL->Des().Format(KMultiSearchUrl, &aGenreID, &aCountryID, &aLanguageID);
-
- HBufC* searchText = HBufC::NewLC(utfEncodedSearchText->Size()/2+1);
- TPtr searchTextPtr(searchText->Des());
- searchTextPtr.Copy(*utfEncodedSearchText);
-
- TPtr uriPtr( searchURL->Des());
- uriPtr.Append(*iISDSBaseUrl);
- uriPtr.Append(*searchPartURL);
- uriPtr.Append(searchTextPtr);
- uriPtr.Append(KSearchUrl);
-
- if (encodedQuery)
- {
- delete encodedQuery;
- }
-
- requestData->iUri.Copy( searchURL->Left( requestData->iUri.MaxLength() ) );
- IRHttpIssueRequestL(*requestData);
- CleanupStack::PopAndDestroy(searchText);
- CleanupStack::PopAndDestroy(searchPartURL);
- CleanupStack::PopAndDestroy(searchURL);
- CleanupStack::PopAndDestroy(utfEncodedSearchText);
-
-
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- EncodeUrlL(iBrowseUrl);
- iBrowseReport->BrowseUrl(iBrowseUrl,1);
- CleanupStack::PopAndDestroy(requestData);
-
- IRLOG_DEBUG( "CIRIsdsClient::IRISDSMultiSearch - Exiting." );
-}
-// ---------------------------------------------------------------------------
-// void CIRISDSSearch(TDesC& aSearchString)
-// This API is used by the UI to search channels from isds
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRIsdsClient::IRISDSSearchL(const TDesC& aSearchString)
- {
- IRLOG_DEBUG( "CIRIsdsClient::IRISDSSearchL - Entering" );
- CIRHttpRequestData * requestData= new(ELeave) CIRHttpRequestData();
- iCachePath.Zero();
- CleanupStack::PushL(requestData);
- //Sets the Http method to GET
- requestData->iMethod = EIRHttpGET;
- requestData->iAcceptLanguage.Copy( iShortLanguageCode );
-
- // This is a blatant hack to circumvent the fact that the application has hard-coded
- // 256 to be the maximum length of the URI everywhere. Due to time-restraints it is
- // not feasible to fix the actual issue here, so every search query that would exceed
- // the said limit is truncated to fit it.
- //
- // The practical impacts of this hack is that should the maximum length be exceeded,
- // a connection timed out query is most often displayed.
- //
- // The scope of this quick hack is to enable users to perform search with UTF-8 characters
- // with no possibility of application panics due to descriptor overflows, not to fix
- // the actual problem with the hard-coded TBufs in the application.
-
- HBufC8* utfEncoded = CnvUtfConverter::ConvertFromUnicodeToUtf8L( aSearchString );
- CleanupStack::PushL( utfEncoded );
- HBufC8* uri = HBufC8::NewL( iSearchURL.Size() + utfEncoded->Size() + KSearchUrl().Size() );
- TPtr8 uriPtr( uri->Des() );
- uriPtr.Copy( iSearchURL );
-
- HBufC8 *encodedQuery = NULL;
- encodedQuery = EscapeUtils::EscapeEncodeL(*utfEncoded,EscapeUtils::EEscapeQuery);
- uriPtr.Append( *encodedQuery );
- uriPtr.Append( KSearchUrl );
- if(encodedQuery)
- {
- delete encodedQuery ;
- }
- CleanupStack::PopAndDestroy( utfEncoded );
- requestData->iUri.Copy( uri->Left( requestData->iUri.MaxLength() ) );
- delete uri;
-
- IRHttpIssueRequestL(*requestData);
- iBrowseUrl.Zero();
- iBrowseUrl.Copy(requestData->iUri);
- EncodeUrlL(iBrowseUrl);
- iBrowseReport->BrowseUrl(iBrowseUrl,1);
- CleanupStack::PopAndDestroy(requestData);
- IRLOG_DEBUG( "CIRIsdsClient::IRISDSSearchL - Exiting." );
- }
-
-
-// ---------------------------------------------------------------------------
-//void ParsedStructure(TInt aChoice)
-//Call back funtion called by XML parser after parsing is over
-// ---------------------------------------------------------------------------
-//
-void CIRIsdsClient::ParsedStructureL(TInt aChoice)
-{
- IRLOG_DEBUG( "CIRIsdsClient::ParsedStructureL - Entering" );
- //if catogory info is recieved
- if(aChoice==ECategoryInfoRecieved)
- {
- iCatDataFrom=EFalse;
- iIsdsResponseObserver.IsdsCatogoryDataReceivedL(*(iXmlReader->
- iPtrCategory));
- }
- // if channels list is recieved
- else if(aChoice==EChannelListRecieved)
- {
- iChannelDataFrom=EFalse;
- iIsdsResponseObserver.IsdsChannelDataReceivedL(*(iXmlReader->iPtrChannel));
- }
-
- //if preset data is recieved
- else if(aChoice==EPresetDataRecieved)
- {
- if(iSyncRequest)
- {
- iSyncRequest = EFalse;
- //update the preset(replace it)
- iIsdsResponseObserver.IsdsPresetChangedL(*iXmlReader->iPtrPreset->At(0));
- }
- else
- {
- iIsdsResponseObserver.IsdsPresetDataReceivedL(*(iXmlReader->
- iPtrPreset));
- }
- }
- /*else if(aChoice==EOtaInfoRecieved)
- {
- if(!iOtaReqFrom)
- {
- iIsdsResponseObserver.IsdsOtaInfoRecieved(*iXmlReader->iOTA)
- }
- else
- {
- iOtaReqFrom=EFalse;
- //update settings
- if(iXmlReader->iOTA->iUpdateInterval!=0)
- {
- iSettings->SetSilencePeriodL(iXmlReader->iOTA->iUpdateInterval)
- }
- else
- {
- iSettings->SetSilencePeriodL(KDays*KHour*KMinute*KSecond)
- }
- }
- }*/
- else if(aChoice==EIridRecieved)
- {
- iSettings->SetIRIDL(iXmlReader->iRID);
- }
- else if( aChoice == ESessionLogRecieved )
- {
- //session log is recieved in ISDS
- iPostResponsePending = EFalse;
- iBrowseReport->ReponseFromISDSObtained();
- }
-
- else
- {
- TRAPD(errd,iIsdsResponseObserver.IsdsErrorL(KDataProviderTimeout));
- if(errd)
- {
- IRLOG_DEBUG( "CIRIsdsClient::ParsedStructureL - Exiting ." );
- return;
- }
- }
- IRLOG_DEBUG( "CIRIsdsClient::ParsedStructureL - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// void ParseError()
-// Call back funtion called by XML parser in case of parsing error
-// ---------------------------------------------------------------------------
-//
-void CIRIsdsClient::ParseError( TInt aErrorCode )
- {
- IRLOG_ERROR( "CIRIsdsClient::ParseError - Entering" );
-
- IRHttpGeneralError( aErrorCode );
- IRLOG_DEBUG( "CIRIsdsClient::ParseError - Exiting." );
- }
-
-
- void CIRIsdsClient::CacheError()
- {
- IRLOG_ERROR( "CIRIsdsClient::CacheError" );
- }
-
- void CIRIsdsClient::CacheFailed()
- {
- IRLOG_WARNING( "CIRIsdsClient::CacheFailed" );
- }
-
-// ---------------------------------------------------------------------------
-// cache is present but Stale.
-// called by cache mgmt as a callback.
-// after copying the lastmodified time into its variable
-// here it is copied into the variable ilastModifiedTime
-// ---------------------------------------------------------------------------
-//
-void CIRIsdsClient::CacheInvalid()
- {
- IRLOG_DEBUG( "CIRIsdsClient::CacheInvalid - Entering" );
- iLastModifiedTime = iCache->iLastModified;
- IRLOG_DEBUG( "CIRIsdsClient::CacheInvalid - Exiting" );
- }
-
- void CIRIsdsClient::CachedStructureL(TInt aChoice)
- {
- IRLOG_DEBUG( "CIRIsdsClient::CachedStructureL - Entering" );
- if(iCacheReqMade)
- {
- iCacheReqMade = EFalse;
- //if catogory info is recieved
- if(aChoice==ECategoryInfoRecieved)
- {
- iCatDataFrom=ETrue;
- iIsdsResponseObserver.IsdsCatogoryDataReceivedL(*(iCache->iPtrCategory));
- }
-
- // if channels list is recieved
- else if(aChoice==EChannelListRecieved)
- {
- iChannelDataFrom=ETrue;
- iIsdsResponseObserver.IsdsChannelDataReceivedL(*(iCache->iPtrChannel));
- }
-
- //if preset data is recieved
- else if(aChoice==EPresetDataRecieved)
- {
- //multiple presets can be presented to the UI.
- iIsdsResponseObserver.IsdsPresetDataReceivedL(*(iCache->iPtrPreset));
- }
-
- //if ota data is recieved
- /*else if(aChoice==EOtaInfoRecieved)
- {
- if(!iOtaReqFrom)
- {
- iIsdsResponseObserver.IsdsOtaInfoRecieved(*iCache->iOTA)
- }
- else
- {
- iOtaReqFrom=EFalse;
- //update settings
- if(iCache->iOTA->iUpdateInterval!=0)
- {
- iSettings->SetSilencePeriodL(iCache->iOTA->iUpdateInterval)
- }
- else
- {
- iSettings->SetSilencePeriodL(KDays*KHour*KMinute*KSecond)
- }
- }
- }*/
- //if logo data is recieved
- else if(aChoice==KFour)
- {
- //No implementation
- }
- else
- {
- TRAPD(errd,iIsdsResponseObserver.IsdsErrorL(KDataProviderTimeout));
- if(errd)
- {
- IRLOG_DEBUG( "CIRIsdsClient::CachedStructureL- Exiting ." );
- return;
- }
- }
-
- }
- IRLOG_DEBUG( "CIRIsdsClient::CachedStructureL - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// void CIRIsdsClient::SyncPresetL()
-// Used to syncronize presets
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TInt CIRIsdsClient::SyncPresetL(TInt aPresetId,const TDesC&
- aIfModifiedSince)
- {
- IRLOG_DEBUG( "CIRIsdsClient::SyncPresetL - Entering" );
- IRRDEBUG2("CIRISDCLIENT::SYNCPRESETL",KNullDesC);
- iReqFromSync = ETrue;
- iPresetToBeSynced=aPresetId;
- CIRHttpRequestData * requestData= new(ELeave) CIRHttpRequestData;
- CleanupStack::PushL(requestData);
- requestData->iMethod = EIRHttpGET;
-
- requestData->iAcceptLanguage.Copy(iShortLanguageCode);
- TDateTime lastModified;
- ConvertToTimeDate(aIfModifiedSince,lastModified);
- requestData->isIfModifiedSet=ETrue;
- requestData->iIfModifiedSince.Set(lastModified.Year(),lastModified.Month(),
- lastModified.Day(),lastModified.Hour(),lastModified.Minute(),
- lastModified.Second(),lastModified.MicroSecond());
- _LIT(KPresetFetchUrl,"/do/directory/getPreset?channelid=");
-
- TBuf<KUrlPassMaxLength> urlPass(iSettings->GetISDSBaseUrlL());
- urlPass.Append(KPresetFetchUrl);
-
- TBuf<KChidMaxLength> chid;
- _LIT(KFormat,"%d");
- chid.Format(KFormat,aPresetId);
- urlPass.Append(chid);
- requestData->iUri.Copy(urlPass);
-
- IRHttpIssueRequestL(*requestData);
- CleanupStack::PopAndDestroy(requestData);
- IRLOG_DEBUG( "CIRIsdsClient::SyncPresetL - Exiting." );
- return 1;
- }
-
-// ---------------------------------------------------------------------------
-// void ReleaseResources()
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRIsdsClient::ReleaseResources()
- {
- IRLOG_DEBUG( "CIRIsdsClient::ReleaseResources - Entering" );
- iDataProvider->ReleaseResources();
- IRLOG_DEBUG( "CIRIsdsClient::ReleaseResources - Exiting" );
- }
-
-//---------------------------------------------------------------------------
-//CIRIsdsClient::GetMultiplePresetsL
-//for multiple selected presets to be saved
-//
-//---------------------------------------------------------------------------
-//
-
-EXPORT_C void CIRIsdsClient::GetMultiplePresetsL(const RArray<TInt>& aIndexArray,TBool& aDataFrom)
- {
- IRLOG_DEBUG( "CIRIsdsClient::GetMultiplePresetsL - Entering" );
- _LIT(KSeparator,",");
- //get the count of the no of requested presets
- TInt multiSelectedCount = aIndexArray.Count();
- //allocate space for the request url
- HBufC8* channelIds = HBufC8::NewLC(multiSelectedCount*KDefaultRealWidth
- + multiSelectedCount);
- //http request data
- CIRHttpRequestData* requestData= new(ELeave) CIRHttpRequestData;
- requestData->iUri.Copy(*iISDSBaseUrl);
- CleanupStack::PushL(requestData);
- requestData->iAcceptLanguage.Copy(iShortLanguageCode);
- //create a tptr to modify it
- TPtr8 channelIdPtr = channelIds->Des();
- //set the request type
- iRequestType=EPresets;
- //result
- TInt res;
- _LIT8(KFormat,"%d");
- //if from cache
- if( iChannelDataFrom)
- {
- for(TInt i=0;i<multiSelectedCount;i++)
- {
- ASSERT( aIndexArray[i] >= 0 && aIndexArray[i] < iCache->iPtrChannel->Count() );
- TInt channelID = iCache->iPtrChannel->At(aIndexArray[i])->iChannelID;
- if(i!=0)
- {
- channelIdPtr.Append(KSeparator);
- }
- TBuf8<KChannelidMaxLength> channelIdBuf;
- channelIdBuf.Format(KFormat,channelID);
- channelIdPtr.Append(channelIdBuf);
- }
- iCachePath.Zero();
- iCachePath.Copy(*channelIds);
- //check if cache is available
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(EPresets,iCachePath,iForceGet,res);
- aDataFrom=EFalse;
- if( res == KErrNone )
- {
- requestData->iUri.Append( (*(iCache->
- iPtrChannel))[0]->iChannelGetOperation->Des());
- requestData->iUri.Append(*channelIds);
- IRHttpIssueRequestL(*requestData);
- iConditonalGet=EFalse;
- //Session Log
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,1);
- aDataFrom=ETrue;
- }
- if(res == KErrNotFound)
- {
- iConditonalGet=ETrue;
- requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
- requestData->isIfModifiedSet = ETrue;
- requestData->iUri.Append( (*(iCache->
- iPtrChannel))[0]->iChannelGetOperation->Des());
- requestData->iUri.Append(*channelIds);
- IRHttpIssueRequestL(*requestData);
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,1);
- aDataFrom=ETrue;
- }
- }
- //if from xml file
- else
- {
- for(TInt i=0;i<multiSelectedCount;i++)
- {
- ASSERT( aIndexArray[i] >= 0 && aIndexArray[i] < iXmlReader->iPtrChannel->Count() );
- TInt channelID = iXmlReader->iPtrChannel->At(aIndexArray[i])->iChannelID;
- if(i!=0)
- {
- channelIdPtr.Append(KSeparator);
- }
- TBuf8<KChannelidMaxLength> channelIdBuf;
- channelIdBuf.Format(KFormat,channelID);
- channelIdPtr.Append(channelIdBuf);
- }
- iCachePath.Zero();
- iCachePath.Copy(*channelIds);
- iCacheReqMade = ETrue;
- iCache->CheckCacheL(EPresets,iCachePath,iForceGet,res);
- aDataFrom=EFalse;
- if( res == KErrNone )
- {
- requestData->iUri.Append( (*(iXmlReader->
- iPtrChannel))[0]->iChannelGetOperation->Des());
- requestData->iUri.Append(*channelIds);
- IRHttpIssueRequestL(*requestData);
- iConditonalGet=EFalse;
- //Session Log
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,1);
- aDataFrom=ETrue;
- }
- if(res == KErrNotFound)
- {
- iConditonalGet=ETrue;
- requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
- requestData->isIfModifiedSet = ETrue;
- requestData->iUri.Append( (*(iXmlReader->
- iPtrChannel))[0]->iChannelGetOperation->Des());
- requestData->iUri.Append(*channelIds);
- IRHttpIssueRequestL(*requestData);
- //Session Log
- iBrowseUrl.Copy(requestData->iUri);
- iBrowseReport->BrowseUrl(iBrowseUrl,1);
- aDataFrom=ETrue;
- }
- }
- CleanupStack::PopAndDestroy(requestData);
- CleanupStack::PopAndDestroy(channelIds);
- IRLOG_DEBUG( "CIRIsdsClient::GetMultiplePresetsL - Exiting" );
- }
-//---------------------------------------------------------------------------
-//CIRIsdsClient::ConvertToTimeDate
-//converts the date-time stamp (last modified) to Symbian DateTime format
-//---------------------------------------------------------------------------
-
-void CIRIsdsClient::ConvertToTimeDate(const TDesC& aTime,
- TDateTime& aDateTime) const
- {
- IRLOG_DEBUG( "CIRIsdsClient::ConvertToTimeDate - Entering" );
- TBuf8<KCopyOfTimeMaxLength> copyOfTime;
- copyOfTime.Copy(aTime);
- TInternetDate time;
- TRAPD(error,time.SetDateL(copyOfTime));
- if(!error)
- {
- aDateTime = time.DateTime();
- }
-
- IRLOG_DEBUG( "CIRIsdsClient::ConvertToTimeDate - Exiting." );
- }
-
-//---------------------------------------------------------------------------
-//CIRIsdsClient::IRHttpIssueRequestL
-//Issues Http Request to DataProvider to get data from URL in Request object
-//The Request URL is also encoded here
-//---------------------------------------------------------------------------
-//
-void CIRIsdsClient::IRHttpIssueRequestL( CIRHttpRequestData &aRequestObject )
- {
- IRLOG_DEBUG( "CIRIsdsClient::IRHttpIssueRequestL - Entering" );
- IRRDEBUG2("CIRISDSCLIENT::IRHTTPISSUEREQUESTL",KNullDesC);
- if(iIRIDPending)
- {
- //if IRID reqeust is pending then queue the reuest
- //till IRID response comes
- iReqPending = ETrue;
- //temporary request object
- iTempRequestObject= new(ELeave) CIRHttpRequestData;
- iTempRequestObject->iMethod = aRequestObject.iMethod;
- iTempRequestObject->iIfModifiedSince = aRequestObject.iIfModifiedSince;
- iTempRequestObject->isIfModifiedSet = aRequestObject.isIfModifiedSet;
- iTempRequestObject->iAcceptLanguage = aRequestObject.iAcceptLanguage;
- iTempRequestObject->iContentType = aRequestObject.iContentType;
- iTempRequestObject->iUri = aRequestObject.iUri;
- }
- else
- {
- if(iSettings->GetIRIDL().Length()==0)
- {
- if(iReqFromGetIRIDFunc)
- {
- iReqFromGetIRIDFunc = EFalse;
- iDataProvider->IRHttpIssueRequestL(aRequestObject);
- }
- else
- {
- //When the user cancels the http req,irid is not present.
- //On next request,automatically first irid req is made.
- //save the actual request
- //get irid from isds
- //once irid is received send the saved request to isds
- iReqPending = ETrue;
- //temporary request object
- iTempRequestObject= new(ELeave) CIRHttpRequestData;
- iTempRequestObject->iMethod = aRequestObject.iMethod;
- iTempRequestObject->iIfModifiedSince = aRequestObject.iIfModifiedSince;
- iTempRequestObject->isIfModifiedSet = aRequestObject.isIfModifiedSet;
- iTempRequestObject->iAcceptLanguage = aRequestObject.iAcceptLanguage;
- iTempRequestObject->iContentType = aRequestObject.iContentType;
- iTempRequestObject->iUri = aRequestObject.iUri;
- IRGetIRIDL();
- }
- }
- else
- {
- iReqPending = EFalse;
- if(iReqFromSync)
- {
- iReqFromSync = EFalse;
- iSyncRequest = ETrue;
- }
- iDataProvider->IRHttpIssueRequestL(aRequestObject);
- }
- }
- IRLOG_DEBUG( "CIRIsdsClient::IRHttpIssueRequestL - Exiting." );
- }
-
-//---------------------------------------------------------------------------
-//CIRIsdsClient::EncodeUrlL
-//This url encoding is for session log
-//---------------------------------------------------------------------------
-//
-void CIRIsdsClient::EncodeUrlL( TDes &aQuery )
- {
- IRLOG_DEBUG( "CIRIsdsClient::EncodeUrlL - Entering" );
- //Encodes the URL inside the request object
- HBufC *encodedurl = NULL;
- encodedurl = EscapeUtils::EscapeEncodeL(aQuery,
- EscapeUtils::EEscapeUrlEncoded);
- aQuery.Copy(encodedurl->Left(aQuery.MaxLength()));
- //encoded url is released
- if( encodedurl )
- {
- delete encodedurl;
- }
- IRLOG_DEBUG( "CIRIsdsClient::EncodeUrlL - Exiting." );
- }
-
-//---------------------------------------------------------------------------
-//CIRIsdsClient::PurgeOtaInfoL
-//delete all the data cached wrt OTA
-//---------------------------------------------------------------------------
-//
-EXPORT_C void CIRIsdsClient::PurgeOtaInfoL()
- {
- IRLOG_DEBUG( "CIRIsdsClient::PurgeOtaInfoL - Entering" );
- //reset update available flag to 0
- iSettings->ReSetUpdateAvailableL();
- //reset silence period to 0
- iSettings->SetSilencePeriodL(0);
- //reset silence period start time to a zero string
- iSettings->SetSilencePeriodStartL(KNullDesC);
- //clear the cache info if any
- TRAP_IGNORE(iCache->RemoveOtaInfoL())
- IRLOG_DEBUG( "CIRIsdsClient::PurgeOtaInfoL - Exiting" );
- }
-