videofeeds/server/IptvScheduledDownload/src/iptvvodscheduleddownloadscheduler.cpp
changeset 0 96612d01cf9f
--- /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 <ipvideo/CCseScheduledProgram.h>
+#include <ipvideo/CCseSchedulerAPI.h>
+#include "IptvDebug.h"
+#include <e32math.h>
+#include <s32mem.h>
+
+#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