diff -r 000000000000 -r 96612d01cf9f videofeeds/server/IptvScheduledDownload/src/iptvvodscheduleddownloadscheduler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videofeeds/server/IptvScheduledDownload/src/iptvvodscheduleddownloadscheduler.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,187 @@ +/* +* Copyright (c) 2006-2007 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: Scheduled download scheduler.* +*/ + + + + +#include +#include +#include "IptvDebug.h" +#include +#include + +#include "iptvvodscheduleddownloadscheduler.h" +#include "iptvvodscheduleddownloadactivescheduler.h" +#include "CIptvServiceManager.h" +#include "CIptvSmEvent.h" + +const TInt KNoDelay = 0; + +// ----------------------------------------------------------------------------- +// CIptvVODScheduledDownloadScheduler::CIptvVODScheduledDownloadScheduler +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CIptvVODScheduledDownloadScheduler::CIptvVODScheduledDownloadScheduler( + CIptvServiceManager& aServiceManager ) : iServiceManager( aServiceManager ) + { + } + +// ----------------------------------------------------------------------------- +// CIptvVODScheduledDownloadScheduler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CIptvVODScheduledDownloadScheduler::ConstructL() + { + User::LeaveIfError( iServiceManager.RegisterObserver( this ) ); + } + +// ----------------------------------------------------------------------------- +// CIptvVODScheduledDownloadScheduler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CIptvVODScheduledDownloadScheduler* CIptvVODScheduledDownloadScheduler::NewL( + CIptvServiceManager& aServiceManager ) + { + IPTVLOGSTRING_HIGH_LEVEL(">>> CIptvVODScheduledDownloadScheduler::NewL()"); + + CIptvVODScheduledDownloadScheduler* self = + new( ELeave ) CIptvVODScheduledDownloadScheduler( aServiceManager ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + IPTVLOGSTRING_HIGH_LEVEL("<<< CIptvVODScheduledDownloadScheduler::NewL()"); + + return self; + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +CIptvVODScheduledDownloadScheduler::~CIptvVODScheduledDownloadScheduler() + { + IPTVLOGSTRING_HIGH_LEVEL(">>> CIptvVODScheduledDownloadScheduler::~CIptvVODScheduledDownloadScheduler()"); + + iServiceManager.DeRegisterObserver( this ); + + for (TInt i = 0; i < iActiveSchedulers.Count(); i++) + { + iActiveSchedulers[i]->Cancel(); + } + + iActiveSchedulers.ResetAndDestroy(); + + IPTVLOGSTRING_HIGH_LEVEL("<<< CIptvVODScheduledDownloadScheduler::~CIptvVODScheduledDownloadScheduler()"); + } + + +// ----------------------------------------------------------------------------- +// CIptvVODScheduledDownloadScheduler::HandleSmEvent +// ----------------------------------------------------------------------------- +// +void CIptvVODScheduledDownloadScheduler::HandleSmEvent( CIptvSmEvent& aEvent ) + { + TRAP_IGNORE( HandleSmEventL( aEvent ) ); + } + +// ----------------------------------------------------------------------------- +// CIptvVODScheduledDownloadScheduler::HandleSmEventL +// ----------------------------------------------------------------------------- +// +void CIptvVODScheduledDownloadScheduler::HandleSmEventL( + CIptvSmEvent& aEvent ) + { + IPTVLOGSTRING2_HIGH_LEVEL(">>> CIptvVODScheduledDownloadScheduler::HandleSmEvent(), event: %d", aEvent.iEvent); + + switch (aEvent.iEvent) + { + case CIptvSmEvent::EServiceAdded: + case CIptvSmEvent::EServiceScheduleModified: + { + // Only reschedule if there is a service + if (aEvent.iService) + { + // Create, add and activate scheduler object + CIptvVODScheduledDownloadActiveScheduler* active = + CIptvVODScheduledDownloadActiveScheduler::NewL( + *this, + aEvent.iServiceId, + (TIptvVodScheduleConnectionCondition) + aEvent.iService->ScheduleDlNetwork(), + aEvent.iService->ScheduleDlTime(), + aEvent.iService->ScheduleDlType()); + active->After( TTimeIntervalMicroSeconds32( KNoDelay ) ); + + // The scheduling object will remove itself from the list + CleanupStack::PushL( active ); + iActiveSchedulers.AppendL( active ); + CleanupStack::Pop( active ); + } + } + break; + + case CIptvSmEvent::EServiceDeleted: + { + // Create, add and activate scheduler object + // The settings cause all schedules to be deleted + CIptvVODScheduledDownloadActiveScheduler* active = + CIptvVODScheduledDownloadActiveScheduler::NewL( + *this, + aEvent.iServiceId, + EManual, + ENoSchedule, + ENoDownload); + active->After( TTimeIntervalMicroSeconds32( KNoDelay ) ); + + // The scheduling object will remove itself from the list + CleanupStack::PushL( active ); + iActiveSchedulers.AppendL( active ); + CleanupStack::Pop( active ); + } + break; + + default: + break; + } + + IPTVLOGSTRING_HIGH_LEVEL("<<< CIptvVODScheduledDownloadScheduler::HandleSmEvent()"); + } + +// ----------------------------------------------------------------------------- +// CIptvVODScheduledDownloadScheduler::RemoveActive +// ----------------------------------------------------------------------------- +// +void CIptvVODScheduledDownloadScheduler::RemoveActive( + CIptvVODScheduledDownloadActiveScheduler* aActive ) + { + IPTVLOGSTRING_HIGH_LEVEL(">>> CIptvVODScheduledDownloadScheduler::RemoveActive()"); + + TInt index = iActiveSchedulers.Find( aActive ); + if (index != KErrNotFound) + { + iActiveSchedulers.Remove( index ); + } + + IPTVLOGSTRING_HIGH_LEVEL("<<< CIptvVODScheduledDownloadScheduler::RemoveActive()"); + } + +// End of File