diff -r 839377eedc2b -r befca0ec475f videofeeds/clientapi/src/CIptvVodContentClient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videofeeds/clientapi/src/CIptvVodContentClient.cpp Wed Sep 01 12:30:28 2010 +0100 @@ -0,0 +1,1253 @@ +/* +* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Implements VoD ECG content API.* +*/ + + + + +#include +#include +#include "IptvDebug.h" +#include "CIptvMediaContent.h" + +#include "MIptvVodContentClientObserver.h" +#include "CIptvVodContentClient.h" +#include "IptvClientServerCommon.h" +#include "IptvServer.pan" +#include "CIptvVodContentCategoryBriefDetails.h" +#include "CIptvVodContentContentBriefDetails.h" +#include "CIptvVodContentContentFullDetails.h" +#include "CIptvVodContentUpdateObserver.h" +#include "CIptvMyVideosGlobalFileId.h" +#include "TIptvRssSearchQuery.h" + +const TInt KTUint32SizeInBytes( 4 ); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::CIptvVodContentClient +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +CIptvVodContentClient::CIptvVodContentClient(TIptvServiceId aServiceId, MIptvVodContentClientObserver& aClientObserver) : + CActive( EPriorityStandard ), + iClientObserver( aClientObserver ), + iMsg(NULL), + iMsgPtr((unsigned char*)0, 0), + iServiceId(aServiceId), + iObserver(NULL) + { + CActiveScheduler::Add(this); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CIptvVodContentClient::ConstructL() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::ConstructL"); + + User::LeaveIfError(iSession.Connect()); + iObserver = CIptvVodContentUpdateObserver::NewL(iClientObserver, iSession, iServiceId); + TRequestStatus status; + SendRequestL(EIptvEngineVodContentServiceId, iServiceId, status); + + if (status.Int() != KErrNone) + { + User::Leave(status.Int()); + } + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CIptvVodContentClient* CIptvVodContentClient::NewL(TIptvServiceId aServiceId, MIptvVodContentClientObserver& aClientObserver) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::NewL"); + + CIptvVodContentClient* self = new ( ELeave ) CIptvVodContentClient(aServiceId, aClientObserver); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CIptvVodContentClient *CIptvVodContentClient::NewLC(TIptvServiceId aServiceId, MIptvVodContentClientObserver& aClientObserver) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::NewLC"); + + CIptvVodContentClient* self = new ( ELeave ) CIptvVodContentClient(aServiceId, aClientObserver); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::~CIptvVodContentClient +// Destructor. +// ----------------------------------------------------------------------------- +// +CIptvVodContentClient::~CIptvVodContentClient() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::~CIptvVodContentClient"); + + Cancel(); + SendCancelRequest(); + + delete iMsg; + delete iObserver; + iSession.Close(); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::CleanupL +// +// ----------------------------------------------------------------------------- +// +void CIptvVodContentClient::CleanupL() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::CleanupL"); + + delete iMsg; + iMsg = NULL; + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::GetEcgCategoryList +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::GetEcgCategoryListL(TIptvCategoryId aParentCategoryId, RPointerArray& aCategoryList) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL"); + + TRequestStatus status(KErrNone); + if (!IsActive()) + { + SendSizeRequestL(EIptvEngineVodContentGetEcgCategoryListSizeReq, aParentCategoryId, status); + if (status.Int() != KErrNone) + { + CleanupL(); + } + else + { + HandleVodContentGetEcgCategoryListSizeReqL(); + HandleVodContentGetEcgCategoryListDataReqL(aCategoryList); + } + } + +#ifdef _DEBUG + + TInt count = aCategoryList.Count(); + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL ----------------------------------------------------"); + IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL Parent id = %d", aParentCategoryId); + IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL Category count = %d", count); + + for (TInt i = 0; i < count; i++) + { + TDesC& name = aCategoryList[i]->iName; + IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL Category name = %S", &name); + IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL Category ID = %d", aCategoryList[i]->iCategoryId); + } + + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL ----------------------------------------------------"); + +#endif + + return status.Int(); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::GetCategoryDetails +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::GetCategoryDetailsL(TIptvCategoryId aCategoryId, CIptvVodContentCategoryBriefDetails& aCategory) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetCategoryDetailsL"); + + TRequestStatus status(KErrNone); + if (!IsActive()) + { + SendSizeRequestL(EIptvEngineVodContentGetCategoryDetailsSizeReq, aCategoryId, status); + if (status.Int() != KErrNone) + { + CleanupL(); + } + else + { + HandleVodContentGetCategoryDetailsSizeReqL(); + HandleVodContentGetCategoryDetailsDataReqL(aCategory); + } + } + return status.Int(); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::GetParentCategory +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::GetParentCategoryL(TIptvCategoryId aCategoryId, TIptvCategoryId& aParentId) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetParentCategoryL"); + + TRequestStatus status(KErrNone); + if (!IsActive()) + { + SendRequestL(EIptvEngineVodContentGetParentCategoryReq, aCategoryId, status); + if (status.Int() != KErrNone) + { + CleanupL(); + } + else + { + HandleVodContentGetParentCategoryReqL(aParentId); + } + } + return status.Int(); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::GetEcgList +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::GetEcgListL(TIptvCategoryId aCategoryId, TDesC& aSearchString, TUint32 aFrom, TUint32 aAmount, TUint32& aTotalAmount, RPointerArray& aEcgList) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgListL"); + + TRequestStatus status(KErrNone); + if (!IsActive()) + { + SendSizeRequestL(EIptvEngineVodContentGetEcgListSizeReq, aCategoryId, aFrom, aAmount, aSearchString, status); + if (status.Int() != KErrNone) + { + CleanupL(); + } + else + { + HandleVodContentGetEcgListSizeReqL(); + HandleVodContentGetEcgListDataReqL(aTotalAmount, aEcgList); + } + } + +#ifdef _DEBUG + + TInt count = aEcgList.Count(); + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgListL ----------------------------------------------------"); + IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgListL Content info for category = %d", aCategoryId); + IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgListL Item count = %d", count); + + for (TInt i = 0; i < count; i++) + { + TDesC& name = aEcgList[i]->iName; + IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgListL Name = %S", &name); + IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgListL GFID = %d", aEcgList[i]->iFileId->iFileId); + IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgListL GDID = %d", aEcgList[i]->iFileId->iDrive); + } + + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgListL ----------------------------------------------------"); + +#endif + + return status.Int(); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::GetEcgAllList +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::GetEcgAllListL(TDesC& aSearchString, TUint32 aFrom, TUint32 aAmount, TUint32& aTotalAmount, RPointerArray& aEcgList) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgAllListL"); + + TRequestStatus status(KErrNone); + if (!IsActive()) + { + SendSizeRequestL(EIptvEngineVodContentGetEcgAllListSizeReq, aFrom, aAmount, aSearchString, status); + if (status.Int() != KErrNone) + { + CleanupL(); + } + else + { + HandleVodContentGetEcgAllListSizeReqL(); + HandleVodContentGetEcgAllListDataReqL(aTotalAmount, aEcgList); + } + } + return status.Int(); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::GetContentDetails +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::GetContentDetailsL(TIptvContentId aContentId, CIptvVodContentContentFullDetails& aContentFullDetails) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetContentDetailsL"); + + TRequestStatus status(KErrNone); + if (!IsActive()) + { + SendSizeRequestL(EIptvEngineVodContentGetContentDetailsSizeReq, aContentId, status); + if (status.Int() != KErrNone) + { + CleanupL(); + } + else + { + HandleVodContentGetContentDetailsSizeReqL(); + HandleVodContentGetContentDetailsDataReqL(aContentFullDetails); + } + } + return status.Int(); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::SetIapL +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::SetIapL(const TUint32 aIap) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SetIapL"); + + TRequestStatus status(KErrNone); + if (!IsActive()) + { + SendSizeRequestL(EIptvEngineVodContentSetIap, aIap, status); + if (status.Int() != KErrNone) + { + CleanupL(); + } + } + return status.Int(); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::UpdateEcg +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::UpdateEcgL() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::UpdateEcgL"); + + TRequestStatus status(KErrNone); + if (!IsActive()) + { + SendRequestL(EIptvEngineVodContentUpdateEcg, 0, status); + if (status.Int() != KErrNone) + { + CleanupL(); + } + } + return status.Int(); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::CheckGroupL +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::CheckGroupL() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::CheckGroupL"); + + TRequestStatus status( KErrNone ); + if ( !IsActive() ) + { + SendRequestL( EIptvEngineVodContentCheckGroup, 0, status ); + if ( status.Int() != KErrNone ) + { + CleanupL(); + } + } + + return status.Int(); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::GetUpdateTimeL +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::GetUpdateTimeL(TTime& aTime) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetUpdateTimeL"); + + TRequestStatus status(KErrNone); + if (!IsActive()) + { + SendUpdateTimeRequestL(status); + if (status.Int() != KErrNone) + { + CleanupL(); + } + else + { + HandleVodContentGetUpdateTimeL(aTime); + } + } + return status.Int(); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::GetContentAccessListL +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::GetContentAccessListL(TUint32 aContentId, RPointerArray& aCAList) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetContentAccessListL"); + + TRequestStatus status(KErrNone); + if (!IsActive()) + { + SendSizeRequestL(EIptvEngineVodContentGetCAListSizeReq, aContentId, status); + if (status.Int() != KErrNone) + { + CleanupL(); + } + else + { + HandleVodContentGetCAListSizeReqL(); + HandleVodContentGetCAListDataReqL(aCAList); + } + } + return status.Int(); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::SetLastPositionL +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::SetLastPositionL(TUint32 aContentId, TUint32 aIndex, TUint32 aPosition) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetContentAccessListL"); + + TRequestStatus status(KErrNone); + if (!IsActive()) + { + SendLastPositionL(EIptvEngineVodContentSetLastPosition, aContentId, aIndex, aPosition, status); + if (status.Int() != KErrNone) + { + CleanupL(); + } + } + return status.Int(); + } + + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::SetMpxIdL +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::SetMpxIdL( TUint32 aContentId, + TUint32 aCaIndex, + TUint32 aMpxId ) + { + TRequestStatus status( KErrServerBusy ); + if ( !IsActive() ) + { + SendMpxIdL( EIptvEngineVodContentSetMpxId, aContentId, aCaIndex, aMpxId, status ); + if ( status.Int() != KErrNone ) + { + CleanupL(); + } + } + return status.Int(); + + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::SendLastPositionL +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::SendLastPositionL(TInt aMessage, TUint32 aContentId, TUint32 aIndex, TUint32 aPosition, TRequestStatus& aStatus) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendLastPositionL"); + + delete iMsg; + iMsg = NULL; + + iMsg = HBufC8::NewL(KIptvVodSendLastPositionSize); + iMsgPtr.Set(iMsg->Des()); + + RDesWriteStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + stream.WriteUint32L(aContentId); + stream.WriteUint32L(aIndex); + stream.WriteUint32L(aPosition); + CleanupStack::PopAndDestroy( &stream ); + + iSession.SendRequest(aMessage, iMsgPtr, aStatus); + User::WaitForRequest(aStatus); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::SendMpxIdL +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::SendMpxIdL( TInt aMessage, + TUint32 aContentId, + TUint32 aCaIndex, + TUint32 aMpxId, + TRequestStatus& aStatus ) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendMpxIdL"); + + delete iMsg; + iMsg = NULL; + + iMsg = HBufC8::NewL( KIptvVodSendMpxIdSize ); + iMsgPtr.Set( iMsg->Des() ); + + RDesWriteStream stream; + stream.Open( iMsgPtr ); + CleanupClosePushL( stream ); + stream.WriteUint32L( aContentId ); + stream.WriteUint32L( aCaIndex); + stream.WriteUint32L( aMpxId ); + CleanupStack::PopAndDestroy( &stream ); + + iSession.SendRequest( aMessage, iMsgPtr, aStatus ); + User::WaitForRequest( aStatus ); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::RunL +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::RunL() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::RunL"); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::DoCancel +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::DoCancel() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::DoCancel"); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetEcgCategoryListSizeReq +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetEcgCategoryListSizeReqL() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetEcgCategoryListSizeReqL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + TUint32 dataSize = stream.ReadUint32L(); + CleanupStack::PopAndDestroy( &stream ); + + IPTVLOGSTRING2_LOW_LEVEL("HandleVodContentGetEcgCategoryListSizeReq:: Data size = %d", dataSize); + + delete iMsg; + iMsg = NULL; + + iMsg = HBufC8::NewL(dataSize); + iMsgPtr.Set(iMsg->Des()); + + TRequestStatus status; + iSession.SendRequest(EIptvEngineVodContentGetEcgCategoryListDataReq, iMsgPtr, status); + User::WaitForRequest(status); + + if (status.Int() != KErrNone) + { + CleanupL(); + } + } + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetEcgCategoryListDataReq +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetEcgCategoryListDataReqL(RPointerArray& aCategoryList) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetEcgCategoryListDataReqL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + TUint32 count = stream.ReadUint32L(); + for (TUint32 i = 0; i < count; i++) + { + CIptvVodContentCategoryBriefDetails* brief = CIptvVodContentCategoryBriefDetails::NewL(); + CleanupStack::PushL(brief); + brief->InternalizeL(stream); + aCategoryList.AppendL(brief); + CleanupStack::Pop(brief); + } + CleanupStack::PopAndDestroy( &stream ); + delete iMsg; + iMsg = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CIptvMyVideosClient::SendRequestL +// ----------------------------------------------------------------------------- +// +TInt CIptvVodContentClient::SendRequestL( + TInt aMessage, + CIptvMyVideosGlobalFileId& aFileIdParam, + TUint32 aUintParam ) + { + IPTVLOGSTRING_LOW_LEVEL( + "My Videos Mgr ## CIptvMyVideosClient::SendRequestL" ); + + TUint32 dataSize( + aFileIdParam.CountExternalizeSize() + KTUint32SizeInBytes ); + + HBufC8* ipcMsg = HBufC8::NewL( dataSize ); + CleanupStack::PushL( ipcMsg ); // 1-> + + TPtr8 ipcMsgPtr( ipcMsg->Des() ); + ipcMsgPtr.Zero(); + + RDesWriteStream stream; + stream.Open( ipcMsgPtr ); + CleanupClosePushL( stream ); + aFileIdParam.ExternalizeL( stream ); + stream.WriteUint32L( aUintParam ); + CleanupStack::PopAndDestroy( &stream ); + + TRequestStatus status; + iSession.SendRequest( aMessage, ipcMsgPtr, status ); + User::WaitForRequest( status); + + CleanupStack::PopAndDestroy( ipcMsg ); // <-1 + + return status.Int(); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::SendRequestL +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::SendRequestL(TInt aMessage, TUint32 aParam, TRequestStatus& aStatus) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendRequestL"); + + SendSizeRequestL(aMessage, aParam, aStatus); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::SendSizeRequest +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::SendSizeRequestL(TInt aMessage, TUint32 aParam, TRequestStatus& aStatus) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendSizeRequestL"); + + delete iMsg; + iMsg = NULL; + + iMsg = HBufC8::NewL(KIptvSizeRequestSize); + iMsgPtr.Set(iMsg->Des()); + + RDesWriteStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + stream.WriteUint32L(aParam); + CleanupStack::PopAndDestroy( &stream ); + + iSession.SendRequest(aMessage, iMsgPtr, aStatus); + User::WaitForRequest(aStatus); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::SendSizeRequest +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::SendSizeRequestL( TInt aMessage, + TUint32 aUintParam1, + TUint32 aUintParam2, + TUint32 aUintParam3, + const TDesC& aDesCParam, + TRequestStatus& aStatus ) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendSizeRequestL"); + + delete iMsg; + iMsg = NULL; + + // length (2), TUint32 aUintParam1, TUint32 aUintParam2, TUint32 aUintParam3, TDesC& aDesCParam) + TUint32 length = aDesCParam.Length(); + TUint32 dataSize = 2 + 4 + 4 + 4 + (length * 2); + IPTVLOGSTRING2_LOW_LEVEL("SendSizeRequestL:: data size = %d", dataSize); + + iMsg = HBufC8::NewL(dataSize); + iMsgPtr.Set(iMsg->Des()); + + RDesWriteStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + stream.WriteUint32L(aUintParam1); + stream.WriteUint32L(aUintParam2); + stream.WriteUint32L(aUintParam3); + CIptvUtil::WriteDesToStreamL(aDesCParam, stream); + CleanupStack::PopAndDestroy( &stream ); + + iSession.SendRequest(aMessage, iMsgPtr, aStatus); + User::WaitForRequest(aStatus); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::SendSizeRequest +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::SendSizeRequestL( TInt aMessage, + TUint32 aUintParam1, + TUint32 aUintParam2, + const TDesC& aDesCParam, + TRequestStatus& aStatus ) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendSizeRequestL"); + + delete iMsg; + iMsg = NULL; + + // length (2), TUint32 aUintParam1, TUint32 aUintParam2, TDesC& aDesCParam) + TUint32 length = aDesCParam.Length(); + TUint32 dataSize = 2 + 4 + 4 + (length * 2); + IPTVLOGSTRING2_LOW_LEVEL("SendSizeRequestL:: data size = %d", dataSize); + + iMsg = HBufC8::NewL(dataSize); + iMsgPtr.Set(iMsg->Des()); + + RDesWriteStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + stream.WriteUint32L(aUintParam1); + stream.WriteUint32L(aUintParam2); + CIptvUtil::WriteDesToStreamL(aDesCParam, stream); + CleanupStack::PopAndDestroy( &stream ); + + iSession.SendRequest(aMessage, iMsgPtr, aStatus); + User::WaitForRequest(aStatus); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetCategoryDetailsSizeReq +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetCategoryDetailsSizeReqL() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetCategoryDetailsSizeReqL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + TUint32 dataSize = stream.ReadUint32L(); + CleanupStack::PopAndDestroy( &stream ); + + IPTVLOGSTRING2_LOW_LEVEL("HandleVodContentGetCategoryDetailsSizeReq:: Data size = %d", dataSize); + + delete iMsg; + iMsg = NULL; + + iMsg = HBufC8::NewL(dataSize); + iMsgPtr.Set(iMsg->Des()); + + TRequestStatus status; + iSession.SendRequest(EIptvEngineVodContentGetCategoryDetailsDataReq, iMsgPtr, status); + User::WaitForRequest(status); + + if (status.Int() != KErrNone) + { + CleanupL(); + } + } + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetCategoryDetailsDataReq +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetCategoryDetailsDataReqL(CIptvVodContentCategoryBriefDetails& aCategory) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetCategoryDetailsDataReqL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + aCategory.InternalizeL(stream); + CleanupStack::PopAndDestroy( &stream ); + } + + delete iMsg; + iMsg = NULL; + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetParentCategoryReqL +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetParentCategoryReqL(TIptvCategoryId& aParentId) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetParentCategoryReqL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + aParentId = stream.ReadUint32L(); + CleanupStack::PopAndDestroy( &stream ); + } + + delete iMsg; + iMsg = NULL; + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetEcgListSizeReq +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetEcgListSizeReqL() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetEcgListSizeReqL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + TUint32 dataSize = stream.ReadUint32L(); + CleanupStack::PopAndDestroy( &stream ); + + IPTVLOGSTRING2_LOW_LEVEL("HandleVodContentGetEcgListSizeReq:: Data size = %d", dataSize); + + delete iMsg; + iMsg = NULL; + + iMsg = HBufC8::NewL(dataSize); + iMsgPtr.Set(iMsg->Des()); + + TRequestStatus status; + iSession.SendRequest(EIptvEngineVodContentGetEcgListDataReq, iMsgPtr, status); + User::WaitForRequest(status); + + if (status.Int() != KErrNone) + { + CleanupL(); + } + } + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetCAListSizeReqL +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetCAListSizeReqL() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetCAListSizeReqL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + TUint32 dataSize = stream.ReadUint32L(); + CleanupStack::PopAndDestroy( &stream ); + + IPTVLOGSTRING2_LOW_LEVEL("HandleVodContentGetCAListSizeReqL:: Data size = %d", dataSize); + + delete iMsg; + iMsg = NULL; + + iMsg = HBufC8::NewL(dataSize); + iMsgPtr.Set(iMsg->Des()); + + TRequestStatus status; + iSession.SendRequest(EIptvEngineVodContentGetCAListDataReq, iMsgPtr, status); + User::WaitForRequest(status); + + if (status.Int() != KErrNone) + { + CleanupL(); + } + } + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetCAListDataReqL +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetCAListDataReqL(RPointerArray& aCAList) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetCAListDataReqL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + TUint32 count = stream.ReadUint32L(); + for (TUint32 i = 0; i < count; i++) + { + CIptvMediaContent* content = CIptvMediaContent::NewL(); + CleanupStack::PushL(content); + content->InternalizeL(stream); + aCAList.AppendL(content); + CleanupStack::Pop(content); + } + CleanupStack::PopAndDestroy( &stream ); + } + + delete iMsg; + iMsg = NULL; + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetEcgListSizeReq +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetEcgListDataReqL(TUint32& aTotalAmount, RPointerArray& aEcgList) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetEcgListDataReqL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + TUint32 count = stream.ReadUint32L(); + aTotalAmount = stream.ReadUint32L(); + for (TUint32 i = 0; i < count; i++) + { + CIptvVodContentContentBriefDetails* brief = CIptvVodContentContentBriefDetails::NewL(); + CleanupStack::PushL(brief); + brief->InternalizeL(stream); + aEcgList.AppendL(brief); + CleanupStack::Pop(brief); + } + CleanupStack::PopAndDestroy( &stream ); + } + + delete iMsg; + iMsg = NULL; + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetEcgAllListSizeReqL +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetEcgAllListSizeReqL() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetEcgAllListSizeReqL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + TUint32 dataSize = stream.ReadUint32L(); + CleanupStack::PopAndDestroy( &stream ); + + IPTVLOGSTRING2_LOW_LEVEL("HandleVodContentGetEcgAllListSizeReqL:: Data size = %d", dataSize); + + delete iMsg; + iMsg = NULL; + + iMsg = HBufC8::NewL(dataSize); + iMsgPtr.Set(iMsg->Des()); + + TRequestStatus status; + iSession.SendRequest(EIptvEngineVodContentGetEcgAllListDataReq, iMsgPtr, status); + User::WaitForRequest(status); + + if (status.Int() != KErrNone) + { + CleanupL(); + } + } + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetEcgAllListDataReqL +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetEcgAllListDataReqL(TUint32& aTotalAmount, RPointerArray& aEcgList) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetEcgAllListDataReqL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + TUint32 count = stream.ReadUint32L(); + aTotalAmount = stream.ReadUint32L(); + for (TUint32 i = 0; i < count; i++) + { + CIptvVodContentContentBriefDetails* brief = CIptvVodContentContentBriefDetails::NewL(); + CleanupStack::PushL(brief); + brief->InternalizeL(stream); + aEcgList.AppendL(brief); + CleanupStack::Pop(brief); + } + CleanupStack::PopAndDestroy( &stream ); + } + + delete iMsg; + iMsg = NULL; + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetContentDetailsSizeReqL +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetContentDetailsSizeReqL() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetContentDetailsSizeReqL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + TUint32 dataSize = stream.ReadUint32L(); + CleanupStack::PopAndDestroy( &stream ); + + IPTVLOGSTRING2_LOW_LEVEL("HandleVodContentGetContentDetailsSizeReqL:: Data size = %d", dataSize); + + delete iMsg; + iMsg = NULL; + + iMsg = HBufC8::NewL(dataSize); + iMsgPtr.Set(iMsg->Des()); + + TRequestStatus status; + iSession.SendRequest(EIptvEngineVodContentGetContentDetailsDataReq, iMsgPtr, status); + User::WaitForRequest(status); + + if (status.Int() != KErrNone) + { + CleanupL(); + } + } + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetContentDetailsDataReqL +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetContentDetailsDataReqL(CIptvVodContentContentFullDetails& aContentFullDetails) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetContentDetailsDataReqL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + aContentFullDetails.InternalizeL(stream); + CleanupStack::PopAndDestroy( &stream ); + } + + delete iMsg; + iMsg = NULL; + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::SendCancelRequest +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::SendCancelRequest() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendCancelRequest"); + + TRequestStatus status; + iSession.SendRequest(EIptvEngineVodContentCancel, status); + User::WaitForRequest(status); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::SendCancelUpdateRequest +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::SendCancelUpdateRequest() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendCancelUpdateRequest"); + + TRequestStatus status; + iSession.SendRequest( EIptvEngineVodContentCancelUpdate, status ); + User::WaitForRequest(status); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::SendUpdateTimeRequestL +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::SendUpdateTimeRequestL(TRequestStatus& aStatus) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendUpdateTimeRequestL"); + + delete iMsg; + iMsg = NULL; + + iMsg = HBufC8::NewL(KIptvVodGetUpdateTimeRequestSize); + iMsgPtr.Set(iMsg->Des()); + + iSession.SendRequest(EIptvEngineVodGetUpdateTime, iMsgPtr, aStatus); + User::WaitForRequest(aStatus); + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::HandleVodContentGetUpdateTimeL +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::HandleVodContentGetUpdateTimeL(TTime& aTime) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetUpdateTimeL"); + + if (iMsg) + { + RDesReadStream stream; + stream.Open(iMsgPtr); + CleanupClosePushL( stream ); + TUint32 lower = stream.ReadUint32L(); + TUint32 upper = stream.ReadUint32L(); + TInt64 time = 0; + time = (TInt64) lower; + TInt64 longUpper = (TInt64) upper; + longUpper = longUpper << 32; + longUpper &= (0xFFFFFFFF00000000ULL); + time |= longUpper; + aTime = time; + CleanupStack::PopAndDestroy( &stream ); + } + + delete iMsg; + iMsg = NULL; + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::Search +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::Search( + TIptvRssSearchQuery& aQuery + ) + { + TInt retVal = KErrNotSupported; + + if( !IsActive() ) + { + TPckgBuf pckg( aQuery ); + + TIpcArgs args( &pckg ); + + retVal = iSession.SendRequest( EIptvEngineVodContentRssSearch, args ); + } + else + { + retVal = KErrNotReady; + } + + return retVal; + } + +// ----------------------------------------------------------------------------- +// CIptvVodContentClient::CancelSearch +// ----------------------------------------------------------------------------- +EXPORT_C TInt CIptvVodContentClient::CancelSearch() + { + TInt retVal = KErrNotSupported; + + if( !IsActive() ) + { + TRequestStatus status; + iSession.SendRequest( EIptvEngineVodContentRssSearchCancel, status ); + User::WaitForRequest( status ); + retVal = KErrNone; + } + + return retVal; + } + +// ----------------------------------------------------------------------------- +// Reset global Id. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CIptvVodContentClient::ResetGlobalId( + CIptvMyVideosGlobalFileId& aFileId, + TUint32 aServiceId ) + { + if ( !IsActive() ) + { + TRAP_IGNORE( SendRequestL( + EIptvEngineVodContentResetGlobalId, + aFileId, + aServiceId ) ); + } + } + +// ----------------------------------------------------------------------------- +// Check if update needed +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CIptvVodContentClient::UpdateAvailableL( TBool& aAvailable ) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::UpdateAvailableL"); + + TRequestStatus status( KErrNone ); + if (!IsActive()) + { + SendUpdateCheckRequestL( status ); + if ( status.Int() != KErrNone ) + { + CleanupL(); + } + else + { + HandleVodContentUpdateCheckL( aAvailable ); + } + } + return status.Int(); + } + +// ----------------------------------------------------------------------------- +// Cancel ongoing content update +// ----------------------------------------------------------------------------- +// +EXPORT_C void CIptvVodContentClient::CancelUpdate() + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::CancelUpdate()"); + Cancel(); + SendCancelUpdateRequest(); + } + +// ----------------------------------------------------------------------------- +// Send update check request +// ----------------------------------------------------------------------------- +void CIptvVodContentClient::SendUpdateCheckRequestL( TRequestStatus& aStatus ) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendUpdateCheckRequestL"); + + delete iMsg; + iMsg = NULL; + + iMsg = HBufC8::NewL( KIptvVodUpdateCheckRequestSize ); + iMsgPtr.Set(iMsg->Des()); + + iSession.SendRequest( EIptvEngineVodContentCheckUpdate, iMsgPtr, aStatus ); + User::WaitForRequest(aStatus); + } + +// ----------------------------------------------------------------------------- +// Handle content update check +// ----------------------------------------------------------------------------- +// +void CIptvVodContentClient::HandleVodContentUpdateCheckL( TBool& aAvailable ) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentUpdateCheckL"); + + if ( iMsg ) + { + RDesReadStream stream; + stream.Open( iMsgPtr ); + CleanupClosePushL( stream ); + TInt32 updateValue = stream.ReadInt32L(); + TInt32 updateAvailable = (TBool) updateValue; + aAvailable = updateAvailable; + CleanupStack::PopAndDestroy( &stream ); + } + + delete iMsg; + iMsg = NULL; + }