diff -r 000000000000 -r 96612d01cf9f homescreenplugins/videochplugin/src/videochiptvserverclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenplugins/videochplugin/src/videochiptvserverclient.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,231 @@ +/* +* 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: CVcxNsChIptvServerClient class definition* +*/ + + +#include +#include "videochiptvserverclient.h" +#include "videochmcategorylistener.h" +#include "CIptvServiceManagementClient.h" +#include "videochpublishabledata.h" +#include "videochpublisher.h" +#include "videoahpluginconstants.h" + +// ----------------------------------------------------------------------------- +// CVcxNsChIptvServerClient::CVcxNsChIptvServerClient +// ----------------------------------------------------------------------------- +// +CVcxNsChIptvServerClient::CVcxNsChIptvServerClient( CVcxNsChPublisher* aPublisher, + CVcxNsChPublishableData* aPublishableData ) : + iPublishableData( aPublishableData ), + iPublisher( aPublisher ) + { + // No implementation required + } + +// ----------------------------------------------------------------------------- +// CVcxNsChIptvServerClient::~CVcxNsChIptvServerClient +// ----------------------------------------------------------------------------- +// +CVcxNsChIptvServerClient::~CVcxNsChIptvServerClient() + { + delete iSmClient; + delete iAhCategoryListener; + } + +// ----------------------------------------------------------------------------- +// CVcxNsChIptvServerClient::NewL +// ----------------------------------------------------------------------------- +// +CVcxNsChIptvServerClient* CVcxNsChIptvServerClient::NewL( + CVcxNsChPublisher* aPublisher, + CVcxNsChPublishableData* aPublishableData ) + { + CVcxNsChIptvServerClient* self = new (ELeave)CVcxNsChIptvServerClient( aPublisher, + aPublishableData ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CVcxNsChIptvServerClient::ConstructL +// ----------------------------------------------------------------------------- +// +void CVcxNsChIptvServerClient::ConstructL() + { + TUid domain = TUid::Uid( KVcxNsAhMediatorDomain ); + TUid category = TUid::Uid( KVcxNsAhMediatorCategory ); + TVersion version = TVersion( KVcxNsAhEventVersion, 0, 0 ); + + iAhCategoryListener = CVcxNsChMCategoryListener::NewL( this, + domain, + category, + version ); + + TInt event = TInt( KVcxNsAhEventSuiteLoaded ); + iAhCategoryListener->RegisterAndSubscribeL( event ); + + event = TInt( KVcxNsAhEventSuiteUnloaded ); + iAhCategoryListener->RegisterAndSubscribeL( event ); + } + +// ----------------------------------------------------------------------------- +// CVcxNsChIptvServerClient::HandleSmEvent +// ----------------------------------------------------------------------------- +// +void CVcxNsChIptvServerClient::HandleSmEvent( CIptvSmEvent& aEvent ) + { + if( aEvent.iEvent == CIptvSmEvent::EServiceDeleted || + aEvent.iEvent == CIptvSmEvent::EServiceAdded ) + { + TInt id( KErrNotFound ); + + TRAPD( err, id = iPublishableData->GetIntDataL( EVCxNsCPContentServiceGroup, + TPtrC8( KTvVideoId ) ) ); + + if( err == KErrNone && id == aEvent.iServiceId ) + { + if( aEvent.iEvent == CIptvSmEvent::EServiceDeleted ) + { + // hide item: + // first backup then delete content + TRAPD( err, iPublisher->BackupContentL( EVCxNsCPContentServiceGroup ) ); + if( err == KErrNone ) + { + TRAP_IGNORE( iPublisher->DeleteContentL( EVCxNsCPContentServiceGroup ) ); + } + } + else + { + // show item, just restore from backup + TRAPD( err, iPublisher->RestoreBackupL( EVCxNsCPContentServiceGroup ) ); + if( err == KErrNone ) + { + TRAP_IGNORE( iPublisher->PublishContentL( EVCxNsCPContentServiceGroup ) ); + } + } + } + } + // other events do not require our attention + } + +// ----------------------------------------------------------------------------- +// CVcxNsChIptvServerClient::StartIPTVServerInterfaceL +// ----------------------------------------------------------------------------- +// +void CVcxNsChIptvServerClient::StartIPTVServerInterfaceL() + { + if( !iSmClient ) + { + iSmClient = CIptvServiceManagementClient::NewL( *this ); + } + } + +// ----------------------------------------------------------------------------- +// CVcxNsChIptvServerClient::StopIPTVServerInterface +// ----------------------------------------------------------------------------- +// +void CVcxNsChIptvServerClient::StopIPTVServerInterface() + { + if( iSmClient ) + { + delete iSmClient; + iSmClient = 0; + } + } + +// ----------------------------------------------------------------------------- +// CVcxNsChIptvServerClient::GetServiceGroupIdL +// ----------------------------------------------------------------------------- +// +TInt CVcxNsChIptvServerClient::GetServiceGroupIdL( const TDesC& aServiceUri ) + { + User::LeaveIfNull( iSmClient ); + + TInt id( KErrNotFound ); + if( aServiceUri.Length() <= 0 ) + { + return id; + } + MIptvServiceManagementClientObserver::TRespStatus respStatus; + CDesC8ArraySeg* services = NULL; + TInt error = iSmClient->GetServicesL( 0, + CIptvServiceManagementClient::EDisplayOrderAscending, + services, + respStatus ); + + if ( error == KErrNone && + respStatus == MIptvServiceManagementClientObserver::ESucceeded ) + { + CleanupStack::PushL( services ); + + CIptvService* service = CIptvService::NewL(); + CleanupStack::PushL( service ); + TInt count( services->Count() ); + for ( TInt i = 0; i < count; i++ ) + { + service->SetL( services->MdcaPoint(i) ); + + if( !aServiceUri.CompareF( service->GetAddress() ) ) + { + id = service->GetId(); + + // service found, make sure it's subscribed + if ( !( service->GetFlags() & CIptvService::ESelected ) ) + { + // factory settings changed to point service + // that is setted as unsubscribed. + // save id, backup data and remove menu content + iPublishableData->SetDataL( EVCxNsCPContentServiceGroup, + TPtrC8( KTvVideoId ), id ); + iPublisher->BackupContentL( EVCxNsCPContentServiceGroup, EFalse ); + iPublisher->DeleteContentL( EVCxNsCPContentServiceGroup ); + id = KErrNotFound; + } + break; + } + } + CleanupStack::PopAndDestroy( service ); + CleanupStack::PopAndDestroy( services ); + } + + return id; + } + +// ----------------------------------------------------------------------------- +// CVcxNsChIptvServerClient::MediatorEventL +// ----------------------------------------------------------------------------- +// +void CVcxNsChIptvServerClient::MediatorEventL( TUid aDomain, + TUid aCategory, + TInt aEventId, + const TDesC8& /* aData */ ) + { + if( aDomain == TUid::Uid( KVcxNsAhMediatorDomain ) && + aCategory == TUid::Uid( KVcxNsAhMediatorCategory ) ) + { + if( aEventId == KVcxNsAhEventSuiteLoaded ) + { + StartIPTVServerInterfaceL(); + } + if( aEventId == KVcxNsAhEventSuiteUnloaded ) + { + StopIPTVServerInterface(); + } + } + }