diff -r 000000000000 -r 96612d01cf9f homescreenplugins/videochplugin/src/videocontentharvesterplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenplugins/videochplugin/src/videocontentharvesterplugin.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,235 @@ +/* +* 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: CVcxNsContentHarvesterPlugin class definition* +*/ + + +// INCLUDE FILES +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include + +#include "IptvDebug.h" + + +#include "videocontentharvesterplugin.h" +#include "videocontentharvestermpxclient.h" +#include "videocontentharvesterservicelistener.h" +#include "videonotificationlauncher.h" +#include "videochpublishabledata.h" +#include "videochpublisher.h" +#include "vcxnsmediatorids.h" +#include "videochmcategorylistener.h" +#include "videochiptvserverclient.h" +#include "videochlastwatchedupdater.h" +#include "iptvlastwatchedapi.h" +#include "iptvlastwatcheddata.h" + +// ============================ MEMBER FUNCTIONS ============================== + +// ---------------------------------------------------------------------------- +// Constructor +// ---------------------------------------------------------------------------- +// +CVcxNsContentHarvesterPlugin::CVcxNsContentHarvesterPlugin( MLiwInterface* aCPSInterface ) : + iCPSInterface( aCPSInterface ) + { + } + +// ---------------------------------------------------------------------------- +// Symbian 2nd phase constructor can leave. +// ---------------------------------------------------------------------------- +// +void CVcxNsContentHarvesterPlugin::ConstructL() + { + IPTVLOGSTRING_LOW_LEVEL("CVcxNsContentHarvesterPlugin::ConstructL IN"); + + iPublishableData = CVcxNsChPublishableData::NewL(); + + iPublisher = CVcxNsChPublisher::NewL( iCPSInterface, iPublishableData ); + + iMpxClient = CVcxNsContentHarvesterMpxClient::NewL( iPublisher, iPublishableData, this ); + + iServiceListener = CVcxNsContentHarvesterServiceListener::NewL( iPublisher, iPublishableData ); + + iNotificationLauncer = CVcxNsNotificationLauncher::NewL( iPublishableData, iPublisher ); + + iLwUpdater = CVcxNsChLastWatchedUpdater::NewL( iPublishableData, iPublisher ); + + iIptvServerClient = CVcxNsChIptvServerClient::NewL( iPublisher, iPublishableData ); + + IPTVLOGSTRING_LOW_LEVEL("CVcxNsContentHarvesterPlugin::ConstructL OUT"); + } + +// ---------------------------------------------------------------------------- +// Two-phased constructor. +// ---------------------------------------------------------------------------- +// +CVcxNsContentHarvesterPlugin* CVcxNsContentHarvesterPlugin::NewL( MLiwInterface* aCPSInterface ) + { + CVcxNsContentHarvesterPlugin* self = new ( ELeave ) CVcxNsContentHarvesterPlugin( + aCPSInterface ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CVcxNsContentHarvesterPlugin::~CVcxNsContentHarvesterPlugin() + { + delete iIptvServerClient; + delete iLwUpdater; + delete iNotificationLauncer; + delete iServiceListener; + delete iMpxClient; + delete iPublisher; + delete iPublishableData; + } + +// ---------------------------------------------------------------------------- +// CVcxNsContentHarvesterPlugin::UpdateL() +// ---------------------------------------------------------------------------- +// +void CVcxNsContentHarvesterPlugin::UpdateL() + { + IPTVLOGSTRING_LOW_LEVEL("CVcxNsContentHarvesterPlugin::UpdateL in"); + // check and update data content that needs refreshing during boot. + // in case something fails, there's nothing to do + + // last watched + UpdateLastWatchedL(); + + // preloaded video + UpdatePreloadedVideoL(); + + // predefined service group + iIptvServerClient->StartIPTVServerInterfaceL(); + TRAPD( err, UpdatePredefinedServiceL() ); + iIptvServerClient->StopIPTVServerInterface(); + User::LeaveIfError( err ); + + IPTVLOGSTRING_LOW_LEVEL("CVcxNsContentHarvesterPlugin::UpdateL out"); + } + +// ---------------------------------------------------------------------------- +// CVcxNsContentHarvesterPlugin::UpdateLastWatchedL() +// ---------------------------------------------------------------------------- +// +void CVcxNsContentHarvesterPlugin::UpdateLastWatchedL() + { + iPublisher->ReadContentL( EVCxNsCPContentLastWatched ); + + TPtrC name = iPublishableData->GetDesCDataL( EVCxNsCPContentLastWatched, + TPtrC8( KTvVideoName ) ); + TInt lastWType = + iPublishableData->GetIntDataL( EVCxNsCPContentLastWatched, + TPtrC8( KTvVideoLastWatchedType ) ); + + if( name.Length() > 0 && lastWType == EVCxNsCPContentLastWatched ) + { + // check last watched from the filesystem + CIptvLastWatchedData* data = CIptvLastWatchedData::NewL(); + CleanupStack::PushL( data ); + iPublishableData->LastWatchedApi().GetLastWatchedDataL( *data ); + + if( data->MpxId() != KIdUndefined && + !iPublishableData->FileExists( data->Uri() ) ) + { + // clear and publish empty content + iPublishableData->ClearData( EVCxNsCPContentLastWatched ); + iPublisher->PublishContentL( EVCxNsCPContentLastWatched ); + } + CleanupStack::PopAndDestroy( data ); + } + else + { + // clear and publish empty content + iPublishableData->ClearData( EVCxNsCPContentLastWatched ); + iPublisher->PublishContentL( EVCxNsCPContentLastWatched ); + } + } + +// ---------------------------------------------------------------------------- +// CVcxNsContentHarvesterPlugin::UpdatePreloadedVideoL() +// ---------------------------------------------------------------------------- +// +void CVcxNsContentHarvesterPlugin::UpdatePreloadedVideoL() + { + // read preloaded content from the CP and from the filesystem + iPublisher->ReadContentL( EVCxNsCPContentPreloaded ); + + TPtrC preName = + iPublishableData->GetDesCDataL( EVCxNsCPContentPreloaded, + TPtrC8( KTvVideoName ) ); + TPtrC prePath = + iPublishableData->GetDesCDataL( EVCxNsCPContentPreloaded, + TPtrC8( KTvVideoPath ) ); + + if( preName.Length() == 0 || + !iPublishableData->FileExists( prePath ) ) + { + // file does not exists, remove it's data from the CP so + // that item is not shown + iPublisher->DeleteContentL( EVCxNsCPContentPreloaded ); + } + } + +// ---------------------------------------------------------------------------- +// CVcxNsContentHarvesterPlugin::UpdatePredefinedServiceL() +// ---------------------------------------------------------------------------- +// +void CVcxNsContentHarvesterPlugin::UpdatePredefinedServiceL() + { + iPublisher->ReadContentL( EVCxNsCPContentServiceGroup ); + + TPtrC serviceUri = iPublishableData->GetDesCDataL( EVCxNsCPContentServiceGroup, + TPtrC8( KTvVideoPath ) ); + TInt id = iIptvServerClient->GetServiceGroupIdL( serviceUri ); + + if(id != KErrNotFound ) + { + // save ID and publish + iPublishableData->SetDataL( EVCxNsCPContentServiceGroup, + TPtrC8( KTvVideoId ), id); + iPublisher->PublishContentL( EVCxNsCPContentServiceGroup ); + } + else + { + // Restore backed up data + iPublisher->RestoreBackupL( EVCxNsCPContentServiceGroup ); + } + } + +// ---------------------------------------------------------------------------- +// CVcxNsContentHarvesterPlugin::NotificationLauncher() +// ---------------------------------------------------------------------------- +// +CVcxNsNotificationLauncher* CVcxNsContentHarvesterPlugin::NotificationLauncher() + { + return iNotificationLauncer; + } +