videofeeds/vcnsuiengine/src/vcxnsservicesettings.cpp
branchRCL_3
changeset 23 befca0ec475f
parent 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/vcnsuiengine/src/vcxnsservicesettings.cpp	Wed Sep 01 12:30:28 2010 +0100
@@ -0,0 +1,460 @@
+/*
+* Copyright (c) 2008 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: 
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <bldvariant.hrh>
+#include "IptvDebug.h"
+#include "CIptvIapList.h"
+
+#include "CIptvServiceManagementClient.h"
+#include "vcxnsservicesettings.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CVcxNsServiceSettings::CVcxNsServiceSettings()
+// 
+// -----------------------------------------------------------------------------
+//
+CVcxNsServiceSettings::CVcxNsServiceSettings( )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsServiceSettings::CVcxNsServiceSettings()
+// 
+// -----------------------------------------------------------------------------
+//
+CVcxNsServiceSettings::~CVcxNsServiceSettings( )
+    {
+    delete iIptvServiceManagementClient;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsServiceSettings::NewL()
+// 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CVcxNsServiceSettings* CVcxNsServiceSettings::NewL( )
+    {
+    IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## CVcxNsServiceSettings::NewL()");
+    
+    return new (ELeave) CVcxNsServiceSettings();
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsServiceSettings::GetAllServicesL()
+// Note: Returns NULL if an error occurs.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CDesC8ArraySeg* CVcxNsServiceSettings::GetAllServicesL()
+    {
+    IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## CVcxNsServiceSettings::GetAllServicesL()");
+
+    MIptvServiceManagementClientObserver::TRespStatus respStatus;
+    CDesC8ArraySeg* services = NULL;
+
+    TInt error = GetServiceManagementClientL()->GetServicesL( 0, 
+                                                              CIptvServiceManagementClient::EDisplayOrderDescending,
+                                                              services,
+                                                              respStatus );
+    if ( error == KErrNone )
+        {
+        return services;
+        }
+    else
+        {
+        return NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsServiceSettings::GetAllSelectedServicesL()
+// Note: Returns NULL if an error occurs.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CDesC8ArraySeg* CVcxNsServiceSettings::GetAllSelectedServicesL( TInt& aError )
+    {
+    IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## CVcxNsServiceSettings::GetAllSelectedServicesL()");
+    
+    MIptvServiceManagementClientObserver::TRespStatus respStatus;
+    CDesC8ArraySeg* services = NULL;
+    
+    aError = GetServiceManagementClientL()->GetServicesL( CIptvServiceManagementClient::ESelectedServices, 
+                                                          CIptvServiceManagementClient::EDisplayOrderDescending,
+                                                          services,
+                                                          respStatus );
+    if ( aError == KErrNone )
+        {
+        return services;
+        }
+    else
+        {
+        return NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsServiceSettings::GetServicesByTypeL()
+// Note: Returns NULL if an error occurs.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CDesC8ArraySeg* CVcxNsServiceSettings::GetServicesByTypeL( CIptvService::TServiceType aServiceType )
+    {
+    IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## CVcxNsServiceSettings::GetServicesByTypeL()");
+
+    MIptvServiceManagementClientObserver::TRespStatus respStatus;
+    CDesC8ArraySeg* services = NULL;
+
+    CIptvServiceManagementClient::TSearchLimitFlag flag = (CIptvServiceManagementClient::TSearchLimitFlag) 0;
+
+    switch ( aServiceType )
+        {
+        case CIptvService::EVod:
+            // using flag EVodServices to also include service groups and vodcasts.
+            flag = CIptvServiceManagementClient::EVodServices;
+            break;
+        case CIptvService::ELiveTv:
+            flag = CIptvServiceManagementClient::ELiveTv;
+            break;
+        case CIptvService::EVodCast:
+            flag = CIptvServiceManagementClient::EVodCast;
+            break;
+        case CIptvService::EBrowser:
+            flag = CIptvServiceManagementClient::EBrowser;
+            break;
+        case CIptvService::EVideoRemote:     
+            flag = CIptvServiceManagementClient::EVideoRemote;
+            break;               
+        case CIptvService::EApplication:
+            flag = CIptvServiceManagementClient::EApplication;
+            break;        
+        case CIptvService::EMobileTv:
+            flag = CIptvServiceManagementClient::EMobileTv;
+            break;
+        case CIptvService::EOther:
+            flag = CIptvServiceManagementClient::EOther;
+            break;        
+        default:     
+            flag = (CIptvServiceManagementClient::TSearchLimitFlag) 0;
+            break;
+        }
+
+    TInt error = GetServiceManagementClientL()->GetServicesL( flag, 
+                                                              CIptvServiceManagementClient::EDisplayOrderDescending,
+                                                              services,
+                                                              respStatus );                                                             
+    if ( error == KErrNone )
+        {
+        return services;
+        }
+    else
+        {
+        return NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsServiceSettings::GetIapListForNewServiceL()
+// Gathers list of IAPs from other user defined services.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CVcxNsServiceSettings::GetIapListForNewServiceL( CIptvIapList& aIapList )
+    {
+    CDesC8ArraySeg* services = GetAllServicesL();
+    
+    if ( services )
+        {
+        CleanupStack::PushL( services );
+
+        CIptvService* service = CIptvService::NewL();
+        CleanupStack::PushL( service );
+
+        // Go through all services.
+        for (TInt i = 0; i < services->Count(); i++)
+            {
+            service->SetL( services->MdcaPoint(i) );
+
+            TUint32 flags = service->GetFlags();
+
+            // Only copy IAPs from user modifiable services (not provisioned).
+            if ( ! (flags & CIptvService::EReadOnlyIaps) )
+                {
+                // Go through all IAPs for this service.
+                for ( TUint8 j = 0; j < service->iIapList->Count(); j++ )
+                    {
+                    TIptvIap& existingIap = service->iIapList->IapL( j ); 
+
+                    // Check that this IAP is not already on user's list.
+                    TBool bFound = EFalse;
+                    for ( TUint8 k = 0; k < aIapList.Count(); k++ )
+                        {
+                        TIptvIap& userIap = aIapList.IapL( k );
+                        
+                        if ( userIap.iId == existingIap.iId )
+                            {
+                            bFound = ETrue;
+                            break;
+                            }
+                        }
+                      
+                    // Add IAP to user's list.  
+                    if ( ! bFound )
+                        {
+                        aIapList.AddIap( existingIap );
+                        }
+                    }
+                }
+            }
+
+        CleanupStack::PopAndDestroy( service );
+        services->Reset();
+        CleanupStack::PopAndDestroy( services );
+
+        if (aIapList.Count() > 0)
+            {
+            return KErrNone;            
+            }
+        }
+
+    return KErrNotFound;
+    }
+// -----------------------------------------------------------------------------
+// CVcxNsServiceSettings::AddServiceL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CVcxNsServiceSettings::AddServiceL( const TDesC& aServiceName,
+                                             const TDesC& aAddress,
+                                             const TDesC& aDescription,
+                                             CIptvIapList& aIapList,
+                                             CIptvService::TServiceType aServiceType,
+                                             const TUid& aEpgPluginUid,
+                                             const TUid& aIptvPluginUid,
+                                             const TUid& aVodPluginUid )
+    {
+    IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## CVcxNsServiceSettings::AddServiceL()");
+
+    if ( aServiceName.Length() == 0 || aAddress.Length() == 0 )
+        {
+        return KErrArgument;
+        }
+
+    MIptvServiceManagementClientObserver::TRespStatus respStatus;
+    CIptvService*                                     iptvService = CIptvService::NewL();
+    CleanupStack::PushL( iptvService );
+
+    iptvService->SetId( 0 );
+    iptvService->SetName( aServiceName );
+    iptvService->SetAddress( aAddress );
+    iptvService->SetIconPath( KNullDesC );
+    iptvService->SetType( aServiceType );
+    iptvService->SetDesc( aDescription );
+    iptvService->SetFlags( CIptvService::ESelected );
+    iptvService->SetApplicationUid( 0 );
+    iptvService->SetDisplayOrder( 0 );
+    iptvService->iIapList->SetL( aIapList );
+    
+    iptvService->SetEpgPluginUid(aEpgPluginUid);
+    iptvService->SetIptvPluginUid(aIptvPluginUid);
+    iptvService->SetVodPluginUid(aVodPluginUid);
+
+    TInt error = GetServiceManagementClientL()->AddServiceL( *iptvService, respStatus );
+
+
+
+    CleanupStack::PopAndDestroy( iptvService );
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsServiceSettings::UpdateServiceL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CVcxNsServiceSettings::UpdateServiceL( CIptvService& aIptvService )
+    {
+    IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## CVcxNsServiceSettings::UpdateServiceL()");
+    
+    MIptvServiceManagementClientObserver::TRespStatus respStatus;
+    
+    GetServiceManagementClientL()->UpdateServiceL( aIptvService, respStatus );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsServiceSettings::DeleteServiceL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CVcxNsServiceSettings::DeleteServiceL( TUint32 aItemId )
+    {
+    IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## CVcxNsServiceSettings::DeleteServiceL()");
+
+    MIptvServiceManagementClientObserver::TRespStatus respStatus;
+
+    GetServiceManagementClientL()->DeleteServiceL( aItemId, respStatus );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsServiceSettings::GetServiceL()
+// Note: Method is not efficient, so use only if absolutely necessary.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CVcxNsServiceSettings::GetServiceL( TUint32 aServiceId, CIptvService& aIptvService )
+    {
+    /*CDesC8ArraySeg* services = NULL;
+    MIptvServiceManagementClientObserver::TRespStatus respStatus;
+
+    if ( ! iIptvServiceManagementClient )
+        {
+        iIptvServiceManagementClient = CIptvServiceManagementClient::NewL( *this );
+        }
+
+    TInt error = iIptvServiceManagementClient->GetServicesL( aServiceId, aServiceId, services, respStatus );
+
+    if ( error == KErrNone && services->MdcaCount() > 0)
+        {
+        CleanupStack::PushL( services );
+        aIptvService.SetL( services->MdcaPoint(0) );
+        CleanupStack::PopAndDestroy( services );
+        return KErrNone;
+        }
+
+    return KErrNotFound;
+    */
+
+    //Get only this specified service   
+    CDesC8ArraySeg* services = GetAllServicesL();
+    TInt            error    = KErrNotFound;
+
+    if ( services )
+        {
+        CleanupStack::PushL( services );
+
+        CIptvService* service = CIptvService::NewL();
+        CleanupStack::PushL( service );
+
+        // Go through all services.
+        for ( TInt i = 0; i < services->Count(); i++ )
+            {
+            service->SetL( services->MdcaPoint(i) );
+            
+            if ( service->GetId() == aServiceId )
+                {
+                aIptvService.SetL( services->MdcaPoint(i) );
+                error = KErrNone;
+                }
+            }
+
+        CleanupStack::PopAndDestroy( service );
+        CleanupStack::PopAndDestroy( services );
+        }
+    
+    return error;    
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsServiceProvider::GetServiceManagementClientL()
+// -----------------------------------------------------------------------------
+//
+CIptvServiceManagementClient* CVcxNsServiceSettings::GetServiceManagementClientL()
+    {
+    if ( ! iIptvServiceManagementClient )
+        {
+        iIptvServiceManagementClient = CIptvServiceManagementClient::NewL( *this );
+        }
+    
+    return iIptvServiceManagementClient;    
+    }
+
+
+// -----------------------------------------------------------------------------
+// CVcxNsServiceSettings::GetScheduledDownloadSettingsL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CVcxNsServiceSettings::GetScheduledDownloadSettingsL(
+    TIptvServiceId aServiceId,
+    TIptvVodScheduleDownloadtimeCombination& aDownloadTime,
+    TIptvVodScheduleConnectionCondition& aCondition,
+    TIptvVodScheduleDownloadTypeCombination& aType )
+    {
+    CIptvService* service = CIptvService::NewL();
+    CleanupStack::PushL( service );
+    
+    TInt err = GetServiceL( aServiceId, *service );
+    
+    if ( err == KErrNone )
+        {
+        aDownloadTime = service->ScheduleDlTime();
+        aCondition = static_cast<TIptvVodScheduleConnectionCondition>(
+                        service->ScheduleDlNetwork() );
+        aType = service->ScheduleDlType();
+        }
+    
+    CleanupStack::PopAndDestroy( service );
+    
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsServiceSettings::SetScheduledDownloadSettingsL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CVcxNsServiceSettings::SetScheduledDownloadSettingsL(
+    TIptvServiceId aServiceId,
+    TIptvVodScheduleDownloadtimeCombination aDownloadTime,
+    TIptvVodScheduleConnectionCondition aCondition,
+    TIptvVodScheduleDownloadTypeCombination aType )
+    {
+    CIptvService* service = CIptvService::NewL();
+    CleanupStack::PushL( service );
+    
+    TInt err = GetServiceL( aServiceId, *service );
+
+    if ( err == KErrNone )
+        {
+        service->SetScheduleDlTime( aDownloadTime );
+        service->SetScheduleDlNetwork( aCondition );
+        service->SetScheduleDlType( aType );
+
+        //  If this is the first time scheduling for this service.
+        if ( service->GetScheduledLastDownloadTime().Int64() == 0 &&
+             aCondition != EManual &&
+             aDownloadTime != ENoSchedule )
+            {
+            TTime current;
+            current.UniversalTime();
+            service->SetScheduledLastDownloadTime( current );
+            }
+        // If we move back to manual download state, let's reset the 'last
+        // scheduled download time' so that old scheduling for service does
+        // not confuse user when he later on sets scheduling on again.
+        else if ( aCondition == EManual )
+            {
+            TTime zero( 0 );
+            
+            service->SetScheduledLastDownloadTime( zero );
+            }
+
+        UpdateServiceL( *service );
+        }
+
+    CleanupStack::PopAndDestroy( service );
+
+    return err;
+    }