videofeeds/server/tsrc/IptvTestUtility/src/CIptvTestVCApiUtil.cpp
changeset 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/server/tsrc/IptvTestUtility/src/CIptvTestVCApiUtil.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,492 @@
+/*
+* Copyright (c) 2002-2004 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:   Object to offer some common utility functions to Iptv engine testing*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <e32Base.h>
+#include <mmf/common/mmfcontrollerpluginresolver.h> // CleanupResetAndDestroyPushL
+
+#include "VCXTestLog.h"
+#include "CIptvTestVCApiUtil.h"
+#include "CIptvVodContentClient.h"
+#include "CIptvVodContentContentFullDetails.h"
+#include "CIptvVodContentContentBriefDetails.h"
+#include "CIptvVodContentCategoryBriefDetails.h"
+#include "CIptvMediaContent.h"
+#include "VCXTestLog.h"
+#include "CIptvTestVodContentAllDetails.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CIptvTestVCApiUtil::CIptvTestVCApiUtil
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CIptvTestVCApiUtil::CIptvTestVCApiUtil()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestVCApiUtil::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CIptvTestVCApiUtil::ConstructL()
+    {
+    iActiveSchedulerWait = new (ELeave) CActiveSchedulerWait;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvServicesFromFile::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIptvTestVCApiUtil* CIptvTestVCApiUtil::NewL()
+    {
+    VCXLOGLO1(">>>CIptvTestVCApiUtil::NewL");
+    CIptvTestVCApiUtil* self = new( ELeave ) CIptvTestVCApiUtil;
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+	VCXLOGLO1("<<<CIptvTestVCApiUtil::NewL");
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvServicesFromFile::NewL
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CIptvTestVCApiUtil::~CIptvTestVCApiUtil()
+    {
+    VCXLOGLO1(">>>CIptvTestVCApiUtil::~CIptvTestSMApiUtil");
+    if(iActiveSchedulerWait)
+	    {
+	    ActiveWait(EActiveWaitStop);
+	    delete iActiveSchedulerWait;
+	    iActiveSchedulerWait = NULL;
+	  	}
+    delete iIptvVodContentClient;
+    iIptvVodContentClient = NULL;
+    VCXLOGLO1("<<<CIptvTestVCApiUtil::~CIptvTestVCApiUtil");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestVCApiUtil::GetContentIdsL
+// Creates CIptvServiceInstance from parameters
+// returns pointer to service if succeeded, otherwise NULL
+// -----------------------------------------------------------------------------
+//
+TBool CIptvTestVCApiUtil::GetContentIdsL(TIptvServiceId aServiceId, TUint32 aIAPId, RArray<TIptvContentId>& aContentIdArray, TUint32 aMaxSize, TUint32 aMaxPlaytime)
+    {
+   	VCXLOGLO1(">>>CIptvTestVCApiUtil::GetContentIdsL");
+    TBool rv = TRUE;
+    TInt resp = KErrNone;
+
+    TUint32 total=0;
+
+    TBuf<255> string;
+    string.Append(_L(""));
+
+    TTime currentTime;
+    TTime lastUpdateTime;
+    TTimeIntervalMinutes minutes;
+
+    iEpgUpdateError = KErrNone;
+
+    currentTime.HomeTime();
+    CheckVodContentClient( aServiceId );
+
+    //Set IAP
+    TRAPD(error,resp = iIptvVodContentClient->SetIapL(aIAPId));
+    if(KErrNone != error || KErrNone != resp)
+        {
+        VCXLOGLO1("CIptvTestVCApiUtil: Couldn't set IAP!!");
+        return FALSE;
+        }
+
+    resp = iIptvVodContentClient->GetUpdateTimeL(lastUpdateTime);
+
+    if(resp != KErrNone)
+        {
+        VCXLOGLO2("CIptvTestVCApiUtil: GetUpdateTimeL error = %d", resp);
+        VCXLOGLO1("<<<CIptvTestVCApiUtil::GetContentIdsL");
+        return FALSE;
+        }
+
+    currentTime.MinutesFrom(lastUpdateTime, minutes);
+
+    if(minutes.Int() > 60)
+	    {
+	    VCXLOGLO1("Epg update starts");
+	    resp = iIptvVodContentClient->UpdateEcgL();
+	    if(resp != KErrNone)
+            {
+            VCXLOGLO2("CIptvTestVCApiUtil: UpdateEcgL error = %d", resp);
+            VCXLOGLO1("<<<CIptvTestVCApiUtil::GetContentIdsL");
+            return FALSE;
+            }
+
+	    ActiveWait(EActiveWaitStart);//wait for Epg download
+	    if(iEpgUpdateError != KIptvErrorEpgUpdateSuccessed)
+            {//update failed!!
+            VCXLOGLO2("CIptvTestVCApiUtil: EpgUpdate error = %d", iEpgUpdateError);
+            VCXLOGLO1("<<<CIptvTestVCApiUtil::GetContentIdsL");
+            return FALSE;
+            }
+	    }
+
+   	RPointerArray<CIptvVodContentContentBriefDetails> data;
+	CleanupResetAndDestroyPushL(data);
+
+	VCXLOGLO2("count = %d", data.Count());
+
+    resp = iIptvVodContentClient->GetEcgAllListL(string, 0, 1500, total, data);
+    if(resp == KErrNone)
+        {
+        VCXLOGLO2("totalAmount = %d", total);
+
+        for (TInt i = 0; i < data.Count(); i++)
+            {
+            VCXLOGLO2("Content id = %d",data[i]->iContentId);
+            VCXLOGLO2("Content name = %S", &data[i]->iName);
+            if( (data[i]->iSize <= aMaxSize || aMaxSize == 0) && (data[i]->iPlaytime < aMaxPlaytime || aMaxPlaytime == 0) )
+            	{
+            	aContentIdArray.Append(data[i]->iContentId);
+            	}
+            }
+        }
+    else
+        {
+        VCXLOGLO2("CIptvTestVCApiUtil: GetEcgAllListL error = %d", resp);
+        rv = FALSE;
+        }
+
+    VCXLOGLO2("Added %d videos", aContentIdArray.Count());
+
+    CleanupStack::PopAndDestroy(&data);
+	data.Close();
+
+    VCXLOGLO1("<<<CIptvTestVCApiUtil::GetContentIdsL");
+    // check rv!!
+    return rv;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestVCApiUtil::GetEcgCategoryListL
+// -----------------------------------------------------------------------------
+//
+void CIptvTestVCApiUtil::GetEcgCategoryListL(TUint32 aServiceId, TUint32 aParentCategoryId, RPointerArray<CIptvVodContentCategoryBriefDetails>& aCategoryList)
+    {
+    VCXLOGLO1(">>>CIptvTestVCApiUtil::GetEcgCategoryListL");
+    CheckVodContentClient( aServiceId );
+    User::LeaveIfError( iIptvVodContentClient->GetEcgCategoryListL(aParentCategoryId, aCategoryList) );
+    for( TInt i = 0; i < aCategoryList.Count(); i++)
+        {
+        VCXLOGLO3("CIptvTestVCApiUtil:: Category '%S' with id '%d'", &aCategoryList[i]->iName, aCategoryList[i]->iCategoryId);        
+        }
+    VCXLOGLO1("<<<CIptvTestVCApiUtil::GetEcgCategoryListL");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestVCApiUtil::GetEcgListL
+// -----------------------------------------------------------------------------
+//
+void CIptvTestVCApiUtil::GetEcgListL(TUint32 aServiceId, TUint32 aCategoryId, RPointerArray<CIptvVodContentContentBriefDetails>& aEcgList )
+    {
+    VCXLOGLO1(">>>CIptvTestVCApiUtil::GetEcgListL");
+    TBuf<10> searchString(_L("") );
+    TUint32 totalAmount = 0;
+    CheckVodContentClient( aServiceId );
+    User::LeaveIfError( iIptvVodContentClient->GetEcgListL( aCategoryId, searchString, 0, 0, totalAmount, aEcgList ) );
+    for( TInt i = 0; i < aEcgList.Count(); i++ )
+        {
+        VCXLOGLO4("CIptvTestVCApiUtil:: Content '%S' at index '%d' with id '%d'.", &aEcgList[i]->iName, i, aEcgList[i]->iContentId);                    
+        }
+    VCXLOGLO1("<<<CIptvTestVCApiUtil::GetEcgListL");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestVCApiUtil::GetVodContentContentDetailsL
+// -----------------------------------------------------------------------------
+//
+TInt CIptvTestVCApiUtil::GetVodContentContentDetailsL(TUint32 aServiceId, TUint32 aContentId, CIptvVodContentContentFullDetails& aContentDetails)
+	{
+    VCXLOGLO1(">>>CIptvTestVCApiUtil::GetVodContentContentDetailsL");
+    CheckVodContentClient( aServiceId );
+    TInt ret = iIptvVodContentClient->GetContentDetailsL(aContentId, aContentDetails);        
+    VCXLOGLO1("<<<CIptvTestVCApiUtil::GetVodContentContentDetailsL");
+    return ret;
+	}
+
+// -----------------------------------------------------------------------------
+// CIptvTestVCApiUtil::GetContentAccessListL
+// -----------------------------------------------------------------------------
+//
+TInt CIptvTestVCApiUtil::GetContentAccessListL(TUint32 aServiceId, TUint32 aContentId, RPointerArray<CIptvMediaContent>& aCAList)
+	{
+    VCXLOGLO1(">>>CIptvTestVCApiUtil::GetContentAccessListL");
+    CheckVodContentClient( aServiceId );
+    TInt ret = iIptvVodContentClient->GetContentAccessListL(aContentId, aCAList);
+    for( TInt a = 0; a < aCAList.Count(); a++ )
+        {
+        VCXLOGLO3("CIptvTestVCApiUtil:: mediaContent index: %d, expression: %d", a, aCAList[a]->iExpression);
+        }    
+    VCXLOGLO1("<<<CIptvTestVCApiUtil::GetContentAccessListL");
+    return ret;
+	}
+
+// -----------------------------------------------------------------------------
+// CIptvTestVCApiUtil::GetVodContentAllDetailsListL
+// -----------------------------------------------------------------------------
+//
+void CIptvTestVCApiUtil::GetVodContentAllDetailsListL( TUint32 aServiceId, RPointerArray<CIptvTestVodContentAllDetails>& aDetailsList )
+	{
+    VCXLOGLO1(">>>CIptvTestVCApiUtil::GetVodContentAllDetailsListL");
+
+    CheckVodContentClient( aServiceId );
+    RPointerArray<CIptvVodContentCategoryBriefDetails> categoryList;
+    CleanupResetAndDestroyPushL( categoryList );
+
+    User::LeaveIfError( iIptvVodContentClient->GetEcgCategoryListL( 0, categoryList) );
+
+    TInt count = categoryList.Count();
+
+    // Loop categories
+    for (TInt i = 0; i < count; i++)
+        {
+        VCXLOGLO3("CIptvTestVCApiUtil:: Category '%S' with id '%d'", &categoryList[i]->iName, categoryList[i]->iCategoryId);
+
+        RPointerArray<CIptvVodContentContentBriefDetails> ecgList;
+        CleanupResetAndDestroyPushL( ecgList );
+
+        TBuf<10> searchString(_L("") );
+        TUint32 totalAmount = 0;
+        User::LeaveIfError( iIptvVodContentClient->GetEcgListL( categoryList[i]->iCategoryId, searchString, 0, 0, totalAmount, ecgList ) );
+
+        // Loop ECG brief details
+        for (TInt e = 0; e < ecgList.Count(); e++)
+            {
+            CIptvVodContentContentFullDetails* contentDetails = CIptvVodContentContentFullDetails::NewL();
+            CleanupStack::PushL( contentDetails );
+
+            VCXLOGLO4("CIptvTestVCApiUtil:: Get full details, content '%S' at index '%d' with id '%d'.", &ecgList[e]->iName, e, ecgList[e]->iContentId);            
+            User::LeaveIfError( iIptvVodContentClient->GetContentDetailsL( ecgList[e]->iContentId, *contentDetails ) );
+
+            // Construct all details 
+            CIptvTestVodContentAllDetails* allDetails = CIptvTestVodContentAllDetails::NewL();
+            aDetailsList.Append( allDetails );
+
+            User::LeaveIfError( iIptvVodContentClient->GetContentAccessListL( ecgList[e]->iContentId, allDetails->iMediaContents) );
+
+            TInt mediaCount = allDetails->iMediaContents.Count();
+            for( TInt a = 0; a < mediaCount; a++ )
+                {
+                VCXLOGLO3("CIptvTestVCApiUtil:: mediaContent index: %d, expression: %d", a, allDetails->iMediaContents[a]->iExpression);
+                }
+            
+            allDetails->iCategoryId = categoryList[i]->iCategoryId;
+            allDetails->iFullDetails = contentDetails;
+            allDetails->iBriefDetails = ecgList[e];
+
+            CleanupStack::Pop( contentDetails );
+            }
+
+        CleanupStack::Pop( &ecgList );
+        ecgList.Reset();
+        }
+
+    CleanupStack::PopAndDestroy( &categoryList );
+    VCXLOGLO1("<<<CIptvTestVCApiUtil::GetVodContentAllDetailsListL");
+	}
+
+// -----------------------------------------------------------------------------
+// CIptvTestVCApiUtil::CheckVodContentClient
+// -----------------------------------------------------------------------------
+//
+void CIptvTestVCApiUtil::CheckVodContentClient( TInt aServiceId )
+    {
+    if( !iIptvVodContentClient || iCurrentService != aServiceId )
+        {
+        delete iIptvVodContentClient;
+        iIptvVodContentClient = NULL;
+        iCurrentService = aServiceId;
+        iIptvVodContentClient = CIptvVodContentClient::NewL( aServiceId, *this );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestVCApiUtil::ActiveWait
+// Starts or stops CActiveSchedulerWait.
+// -----------------------------------------------------------------------------
+//
+void CIptvTestVCApiUtil::ActiveWait( TIptvTestActiveWaitCmd aActiveWaitCmd )
+    {
+    VCXLOGLO1(">>>CIptvTestVCApiUtil::ActiveWait");
+    VCXLOGLO2("aActiveWaitCmd=%d", aActiveWaitCmd );
+
+    switch( aActiveWaitCmd )
+        {
+        case EActiveWaitStart:
+            {
+            if( !iActiveSchedulerWait->IsStarted() )
+                {
+                VCXLOGLO1("iActiveSchedulerWait->Start()");
+                iActiveSchedulerWait->Start();
+                }
+            else
+                {
+                VCXLOGLO1("ActiveSchedulerWait already started");
+                }
+            }
+            break;
+        case EActiveWaitStop:
+            {
+            if( iActiveSchedulerWait->IsStarted() )
+                {
+            VCXLOGLO1("iActiveSchedulerWait->AsyncStop()");
+                iActiveSchedulerWait->AsyncStop();
+                }
+            else
+                {
+                VCXLOGLO1("ActiveSchedulerWait already stopped");
+                }
+            }
+            break;
+        default:
+            break;
+        }
+
+    VCXLOGLO1("<<<CIptvTestVCApiUtil::ActiveWait");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestVCApiUtil::
+//
+// -----------------------------------------------------------------------------
+//
+void CIptvTestVCApiUtil::HandleEpgManagerMsgL(TInt aMsg, TInt aInfo, TIptvServiceId aServiceId)
+    {
+    VCXLOGLO1(">>>CIptvTestVCApiUtil::HandleEpgManagerMsgL");
+    VCXLOGLO2("CIptvTestVCApiUtil::HandleEpgManagerMsgL: aMsg = %d", aMsg);
+    VCXLOGLO2("CIptvTestVCApiUtil::HandleEpgManagerMsgL: aInfo = %d", aInfo);
+    VCXLOGLO2("CIptvTestVCApiUtil::HandleEpgManagerMsgL: aServiceId = %d", aServiceId);
+
+     switch (aMsg)
+        {
+        case KIptvErrorEpgUpdateFailed:
+            {
+            VCXLOGLO1("CIptvTestVCApiUtil:Epg Update failed");
+            iEpgUpdateError = aMsg;
+            ActiveWait(EActiveWaitStop);
+            /*****
+            typedef enum
+            {
+            EIptvDlNoError,
+
+            //errors before the download starts
+            EIptvDlMessageAlreadyPending,
+            EIptvDlTypeNotSupported,
+              EIptvDlMaxDownloadsExceeded,
+              KIptvDlCouldNotGetServiceData, //wrong service id?
+              EIptvDlEpgManagerNotReady,
+              EIptvDlCouldNotGetContentFullDetails,
+              EIptvDlFailedToAddNewVideoToMyVideos,
+              EIptvDlCouldNotConnectToS60DlMgr,
+              EIptvDlCouldNotSetIapAttrToS60DlMgr,
+              EIptvDlCouldNotCreateS60Download,
+              EIptvDlCouldNotStartS60Download,
+
+            //errors during & after download
+              EIptvDlConnectionFailed, //IAP wrong or no network coverage
+              EIptvDlAuthFailed,
+              EIptvDlProxyAuthFailed,
+              EIptvDlContentNotFound, // HTTP 402
+              EIptvDlDiskFull,
+              EIptvDlDestFileInUse,
+              EIptvDlBadUrl,          //syntax error in url
+              EIptvDlMmcRemoved,
+              EIptvDlGeneral          //wrong url, content removed, network does not work, ...
+              } TIptvDlError;
+
+            *****/
+            }
+            break;
+        case KIptvErrorEpgUpdateSuccessed:
+            {
+            VCXLOGLO1("CIptvTestVCApiUtil:Epg Update succeeded");
+            iEpgUpdateError = aMsg;
+            ActiveWait(EActiveWaitStop);
+            }
+            break;
+        case KIptvVodUpdateStarted:
+            {
+            VCXLOGLO1("CIptvTestVCApiUtil:Epg Update started");
+            iEpgUpdateError = aMsg;
+            }
+            break;
+        case KIptvVodUpdateNotStarted:
+            {
+            VCXLOGLO1("CIptvTestVCApiUtil:Epg Update not started");
+            iEpgUpdateError = aMsg;
+            ActiveWait(EActiveWaitStop);
+            }
+            break;
+
+        case KIptvErrorVodNoIap:
+            {
+            VCXLOGLO1("CIptvTestVCApiUtil:Epg No Iap");
+            iEpgUpdateError = aMsg;
+            ActiveWait(EActiveWaitStop);
+            }
+            break;
+
+        default:
+            {
+             VCXLOGLO1("CIptvTestVCApiUtil::aMsg default case");
+            iEpgUpdateError = aMsg;
+            //ActiveWait(EActiveWaitStop);
+            }
+        }
+
+    /**********/
+    VCXLOGLO1("<<<CIptvTestVCApiUtil::aMsg");
+    }
+
+//  End of File