diff -r 839377eedc2b -r befca0ec475f videofeeds/vcnsuiengine/src/vcxnsservicesettings.cpp --- /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 +#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( + 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; + }