--- /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 <e32svr.h>
+#include <s32mem.h>
+#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<CIptvVodContentCategoryBriefDetails>& 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<CIptvVodContentContentBriefDetails>& 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<CIptvVodContentContentBriefDetails>& 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<CIptvMediaContent>& 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<CIptvVodContentCategoryBriefDetails>& 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<CIptvMediaContent>& 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<CIptvVodContentContentBriefDetails>& 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<CIptvVodContentContentBriefDetails>& 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<TIptvRssSearchQuery> 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;
+ }