videofeeds/server/IptvScheduledDownload/inc/iptvvodscheduleddownloadactivescheduler.h
branchRCL_3
changeset 23 befca0ec475f
parent 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/server/IptvScheduledDownload/inc/iptvvodscheduleddownloadactivescheduler.h	Wed Sep 01 12:30:28 2010 +0100
@@ -0,0 +1,238 @@
+/*
+* Copyright (c) 2006 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 active object.*
+*/
+
+
+
+
+#ifndef CIPTVVODSCHEDULEDDOWNLOADACTIVESCHEDULER_H
+#define CIPTVVODSCHEDULEDDOWNLOADACTIVESCHEDULER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include "CIptvUtil.h"
+#include "iptvvodscheduleddownloaddefinitions.h"
+
+// CONSTANTS
+
+// CLASS DECLARATION
+class CCseScheduledProgram;
+class CCseSchedulerApi;
+class CIptvVODScheduledDownloadScheduler;
+
+/**
+*  Scheduled download scheduler. This class handles the calculating new
+*  schedules to the CSE when settings have been changed.
+*
+*  @lib IptvServer.exe
+*  @since 
+*/
+NONSHARABLE_CLASS ( CIptvVODScheduledDownloadActiveScheduler ):
+        public CTimer
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * @param aScheduler The owning scheduler.
+        * @param aServiceId The service id.
+        * @param aNetworkCondition The network type to use when downloading.
+        * @param aDownloadTime The download time.
+        * @param aDownloadType The download type.
+        */
+        static CIptvVODScheduledDownloadActiveScheduler* NewL(
+                CIptvVODScheduledDownloadScheduler& aScheduler,
+                TIptvServiceId aServiceId,
+                TIptvVodScheduleConnectionCondition aNetworkCondition,
+                TIptvVodScheduleDownloadtimeCombination aDownloadTime,
+                TIptvVodScheduleDownloadTypeCombination aDownloadType );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CIptvVODScheduledDownloadActiveScheduler( );
+
+    public: // From CTimer
+
+    	void RunL();
+
+    private: // New functions
+
+        /**
+        *  Internal helper class representing one shcedule slot.
+        *
+        *  @lib iptvuiengine.lib
+        *  @since 
+        */
+        class TScheduleSlot
+            {
+            public:
+                /**
+                * C++ constructor.
+                * @param aStartTime The start time of the slot.
+                * @param aEndTime The end time of the slot.
+                * @param aShouldHave Should the slot have a schedule.
+                */
+                TScheduleSlot(
+                    const TTime& aStartTime,
+                    const TTime& aEndTime,
+                    TBool aShouldHave ) :
+                    iStartTime( aStartTime), iEndTime( aEndTime ),
+                    iShouldHaveSchedule( aShouldHave ),
+                    iAlreadyHasSchedule( EFalse )
+                    {
+                    }
+
+            private:
+                TScheduleSlot() {}
+
+            public:
+                /**
+                * The start time of the slot.
+                */
+                TTime   iStartTime;
+
+                /**
+                * The end time of the slot.
+                */
+                TTime   iEndTime;
+
+                /**
+                * Should the slot have a schedule.
+                */
+                TBool   iShouldHaveSchedule;
+
+                /**
+                * Does the slot have a schedule.
+                */
+                TBool   iAlreadyHasSchedule;
+            };
+
+        /**
+        * Get existing schedules for this service and resechedule them.
+        */
+        void UpdateScheduleL();
+
+        /**
+        * Add new schedules and remove the found schedules if needed.
+        */
+        void ReScheduleL();
+
+        /**
+        * Create a list of time slots from now to KNumberOfDaysToSchedule
+        * days forward midnight.
+        * 
+        * @param aScheduleSlots The scheduled download slots.
+        */
+        void BuildScheduleSlotsL(
+            RArray<TScheduleSlot>& aScheduleSlots ) const;
+
+        /**
+        * Get the application data from the scheduled download
+        * and return the service id from it.
+        * 
+        * @return The service id.
+        */
+        TIptvServiceId GetServiceIdFromScheduledProgramL(
+            CCseScheduledProgram& aProgram ) const;
+
+        /**
+        * Create application data from the service id.
+        * 
+        * @return The created applicatiuon data. Caller will delete the data.
+        */
+        HBufC8* WriteApplicationDataL() const;
+
+        /**
+        * Get the service id from the application data.
+        * 
+        * @param aDataPtr The data to read from.
+        * @return The service id.
+        */
+        TIptvServiceId ReadApplicationDataL( TPtrC8 aDataPtr ) const;
+
+        /**
+        * Return randomized time which fits the given slot. Also take into
+        * account the current time.
+        * 
+        * @param aSlot The time slot to randomize between.
+        * @return The randomized time.
+        */
+        TTime RandomizeRunTime( const TScheduleSlot& aSlot ) const;
+
+    private:
+
+        /**
+        * C++ constructor.
+        *
+        * @param aScheduler The owning scheduler.
+        * @param aServiceId The service id.
+        * @param aNetworkCondition The network type to use when downloading.
+        * @param aDownloadTime The download time.
+        * @param aDownloadType The download type.
+        */
+        CIptvVODScheduledDownloadActiveScheduler(
+                CIptvVODScheduledDownloadScheduler& aScheduler,
+                TIptvServiceId aServiceId,
+                TIptvVodScheduleConnectionCondition aNetworkCondition,
+                TIptvVodScheduleDownloadtimeCombination aDownloadTime,
+                TIptvVodScheduleDownloadTypeCombination aDownloadType );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private:    // Data
+
+        /**
+        * The schedule how created us and has a pointer to us.
+        */
+        CIptvVODScheduledDownloadScheduler& iScheduler;
+
+        /**
+        * The service to use.
+        */
+        TIptvServiceId iServiceId;
+
+        /**
+        * The network condition.
+        */
+        TIptvVodScheduleConnectionCondition iNetworkCondition;
+
+        /**
+        * The download time.
+        */
+        TIptvVodScheduleDownloadtimeCombination iDownloadTime;
+
+        /**
+        * The download type.
+        */
+        TIptvVodScheduleDownloadTypeCombination iDownloadType;
+
+        /**
+        * Common Scheduling Engine API. Owned.
+        */
+        CCseSchedulerApi*    iCse;
+
+        /**
+        * Temporary holding place for scheduled downloads. Owned.
+        */
+        RPointerArray<CCseScheduledProgram> iScheduledDownloads;
+    };
+
+#endif      // CIPTVVODSCHEDULEDDOWNLOADACTIVESCHEDULER_H
+            
+// End of File