videofeeds/scheduleddlplugin/inc/vcnsscheduleddownloadpluginengine.h
changeset 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/scheduleddlplugin/inc/vcnsscheduleddownloadpluginengine.h	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,458 @@
+/*
+* 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:    Implementation of the scheduled download plugin engine.*
+*/
+
+
+
+#ifndef CIPTVSCHEDULEDDOWNLOADPLUGINENGINE_H
+#define CIPTVSCHEDULEDDOWNLOADPLUGINENGINE_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <e32cmn.h>
+#include "iptvvodscheduleddownloaddefinitions.h"
+
+#include "CIptvVodDlDownloadList.h"
+#include "CIptvVodDlDownloadListItem.h"
+#include "CIptvVodDlDownloadEvent.h"
+#include "CIptvVodDlClient.h"
+#include "MIptvVodDlClientObserver.h"
+#include "iptvbatterywatcherobserver.h"
+#include "iptvphoneregistrationobserver.h"
+#include "CIptvServiceManagementClient.h"
+#include "MIptvServiceManagementClientObserver.h"
+#include "CIptvVodContentClient.h"
+#include "MIptvVodContentClientObserver.h"
+#include "CIptvVodContentContentBriefDetails.h"
+#include "CIptvVodContentCategoryBriefDetails.h"
+#include "vcnsscheduleddownloadmpxclient.h"
+
+// CONSTANTS
+
+
+// MACROS
+// None.
+
+// DATA TYPES
+// None.
+
+// FUNCTION PROTOTYPES
+// None.
+
+// FORWARD DECLARATIONS
+class CCseScheduledProgram;
+class MCsePluginObserver;
+class CIptvServiceManagementClient;
+class CIptvVodContentClient;
+class CIptvServices;
+class CIptvVodDlDownloadEvent;
+class CIptvService;
+class CIptvBatteryWatcher;
+class CProfileChangeNotifyHandler;
+class CIptvPhoneRegistrationWatcher;
+class CVcxNsScheduledDownloadMpxClient;
+class CIptvVodContentContentBriefDetails;
+
+// CLASS DECLARATION    
+/**
+*  Plugin for IPTV to handle reminders
+*
+*  @lib iptvscheduleddownloadplugin.lib
+*/
+class CIptvScheduledDownloadPluginEngine :
+            public CTimer, 
+			public MIptvServiceManagementClientObserver,
+			public MIptvVodContentClientObserver,
+			public MVcxNsMpxClientObserver,
+			public MBatteryWatcherObserver,
+			public MProfileChangeObserver,
+			public MPhoneRegistrationWatcherObserver
+	{
+	public:
+
+        /**
+         * Enumerations for return values.
+         */
+	    enum TPluginResult
+	        {
+	        ENoErr = 0,
+	        EReschedule,
+	        EDontReschedule
+	        };
+	    
+    public: // Constructors and destructor
+
+        /**
+         * Two-phased constructor.        
+         */
+    	static CIptvScheduledDownloadPluginEngine* NewL( MCsePluginObserver& aObserver );
+    	
+    	/**
+         * C+ destructor
+         */
+    	virtual ~CIptvScheduledDownloadPluginEngine();
+
+    public: // New methods
+
+    	/**
+         * Runs scheduled task. Actions to be taken depends on given schedule
+         *
+         * @param aProg Schedule that has fired.
+         * @return ENoErr, EReschedule or general error code.
+         */
+    	void RunTaskL( CCseScheduledProgram& aProg,
+    	               TInt& aEngineReturnValue );
+
+    private: // from CTimer, CActive
+
+        /**
+         * Timeout, too long time has been gone without anything going on.
+         */
+        void RunL();
+
+    private: // from MIptvServiceManagementClientObserver
+
+        /**
+         * AddServiceResp.
+         * Callback function for AddServiceReq operation.
+         * @param aRespStatus
+         */
+        void AddServiceResp(TRespStatus aRespStatus);
+
+        /**
+         * UpdateServiceResp.
+         * Callback function for UpdateServiceReq.
+         * @param aRespStatus
+         */
+        void UpdateServiceResp(TRespStatus aRespStatus);
+
+        /**
+         * DeleteServiceResp.
+         * Callback function for DeleteServiceReq operation.
+         * @param aRespStatus
+         */        
+        void DeleteServiceResp(TRespStatus aRespStatus);
+
+        /**
+         * GetServicesResp.
+         * Callback function for GetServicesReq() methods.
+         * @param aRespStatus ESucceeded is returned even if no matching
+         *        services were found. In that case the aServicesArray contains
+         *        empty array. If aRespStatus != ESucceeded, aServicesArray
+         *        pointer is NULL.
+         * @param aServicesArray contains array of pointers to descriptors.
+         *        aServicesArray ownership moves from server to client, ie client
+         *        is responsible for freeing the array.
+         *        Array elements are binary descriptors built with CIptvService::GetL() method.
+         *        CIptvService::SetL() method can be used to init CIptvService class with
+         *        array element data.
+         *        In case of error, aServicesArray is NULL.
+         */
+        void GetServicesResp(TRespStatus aRespStatus, 
+                                     CDesC8ArraySeg* aServicesArray);
+
+        /**
+         * GetUsedIapResp.
+         * Callback function for GetUsedIapReq() method.
+         * @param aIapId IAP ID which client should use when connecting to service.
+         * @param aIapName
+         * @param aConnectionPermission
+         * @param aRespStatus If != ESucceeded, aIapId, aIapName and aConnectionPermission
+         *                    do not contain valid data.
+         */
+        void GetUsedIapResp( TUint32 aIapId,
+            const TDesC& aIapName,
+            CIptvNetworkSelection::TConnectionPermission aConnectionPermission,
+            TBool aWlanWhenGPRS,
+            CIptvNetworkSelection::TRespStatus aRespStatus );
+
+        /**
+         * ServerShutdownResp.
+         * Callback function for ServerShutdownReq operation.
+         * @param aRespStatus
+         */
+        void ServerShutdownResp(TRespStatus aRespStatus);
+
+        /**
+         * Service Manager generated events handle function.
+         * @param aEvent 
+         */        
+        void HandleSmEvent(CIptvSmEvent& aEvent);
+
+
+    private: // from MIptvVodContentClientObserver
+
+        /**
+         * Messages from EPG manager are handled here. Messages are defined in CIptvUtil.h
+         * @since            Engine 1.1
+         * @param aMsg       Message 
+         * @param aServiceId Service id.
+         */
+    	void HandleEpgManagerMsgL(
+    	    TInt aMsg,
+    	    TInt aInfo,
+    	    TIptvServiceId aServiceId);
+
+
+    private: // from MIptvVodDlClientObserver
+
+        /**
+         * NOTE: It is not allowed to delete CIptvVodDlClient object from this callback
+         * function. Do it from other event (for example user initiated event or timer event).
+         */
+    	void HandleVodDlDownloadEvent(CIptvVodDlDownloadEvent& aEvent);
+
+    private: // from MBatteryWatcherObserver
+
+        /**
+         * This callback will be called when the battery level is low.
+         */
+        void BatteryLow();
+
+    private: // from MProfileChangeObserver
+
+        /**
+         * This is a callback function which is called when a active profile event
+         * completes. User must derive his class from MProfileChangeObserver
+         * and implement this method if he is to use notify services.
+         * @since 2.0
+         * @param aProfileEvent Profile event
+         * @param aProfileId Active profile id
+         */
+        void HandleActiveProfileEventL(
+            TProfileEvent aProfileEvent,
+            TInt aProfileId );
+
+    private: // from MPhoneRegistrationWatcherObserver
+        /**
+         * This callback will be called when the home network state of the phone
+         * registration changes.
+         */
+        void OnHomeNetwork( TBool aOnHomeNetwork );
+
+
+    private: // new methods
+    
+   
+
+        /**
+         * C++ constructor
+         * 
+         * @param aObserver The observer.
+         */
+    	CIptvScheduledDownloadPluginEngine( MCsePluginObserver& aObserver );
+    	
+    	/**
+         * By default Symbian 2nd phase constructor is private.        
+         */
+    	void ConstructL();
+    	
+        /**
+         * Check that battery is ok.
+         * If not, set the error code to KErrBadPower.
+         */
+        void GetBatteryStatus();
+
+        /**
+         * Cancel downloads. This will be called usually in low power situation.
+         */
+        void CancelDownloads();
+
+        /**
+         * Get the used IAP and check that it can be used to connect.
+         * @return KErrNone if all is well, system wide error otherwise.
+         */
+        void GetUsableIapL();
+
+        /**
+         * Get the service id from the scheduled program.
+         *
+         * @param The program where to get the service.
+         * @return The service id.
+         */
+        TInt GetServiceIdL( CCseScheduledProgram& aProg ) const;
+
+ 		/**
+         * Asks server to update the epg.
+         * Blocks until it is either updated or the update failed.
+         * Calls ActiveWait.
+         */
+    	void UpdateEpgL();
+    	
+    	/**
+         * Start or stop active wait. Does not start or stop unnecessarily.
+         *
+         * @param aStart ETrue tor start, EFalse to stop.
+         */
+    	void ActiveWait( TBool aStart );
+
+    	/**
+         * Start download for single file.
+         *
+         * @param  CIptvVodContentContentBriefDetails*  aContent 
+         * @return General error code.
+         */
+    	TInt StartDownloadL( CIptvVodContentContentBriefDetails*  aContent );
+
+        /**
+         * Delete the download from the download list if it is there.
+         *
+         * @param aServiceId The service of the downloaded file.
+         * @param aContentId The content id of the downloaded file.
+         * @return ETrue if the download was in the list.
+         */
+        TBool DeleteFromList( TUint32 aServiceId, TUint32 aContentId );
+
+        /**
+         * Get the service.
+         */
+        void FetchServiceL();
+
+        /**
+         * Update the epg and start downloads.
+         *
+         * @return Error code if something goes wrong.
+         */
+        TInt LoadContentL();
+
+        /**
+         * Return ETrue if the given content contains downloadable content.
+         *
+         * @param aContentId The content id.
+         * @return ETrue if the content can be downloaded, EFalse otherwise.
+         */
+        TBool IsDownloadableL( TIptvContentId aContentId );
+
+        /**
+         * Update the the last successfull download time.
+         *
+         * @param aTimestamp The time when the download started.
+         */
+        void UpdateLastDownloadTimeL( const TTime& aTimestamp );
+
+        /**
+         * Restart the timeout. If the timeout occurs,
+         * the plugin will be close all downloads and quit with error
+         * KErrTimedOut.
+         * Calling this method prevents timeout occuring.
+         */
+        void RestartTimeoutTimer();
+
+        /**
+         * Check if we are in offline mode and if so, cause rescheduling.
+         */
+        void CheckOfflineModeL();
+
+    private: // data
+
+        /**
+         * The state of the download.
+         */
+        enum TState
+            {
+            EStarted,
+            EUpdatingContentGuide,
+            EGettingContent,
+            ECheckingDownloadedFiles,
+            EDownloadingFiles,
+            EFinished
+            };
+
+        /**
+         * The state of the download.
+         */
+        TState  iState;
+
+ 		/**
+         * A list of downloads started. Own.
+         */
+    	CIptvVodDlDownloadList* iVodDownloads;
+    	 	
+    	/**
+         * The download client to use. Own.
+         */
+    	CVcxNsScheduledDownloadMpxClient* iVodDlClient;
+
+        /**
+         * Pointer back to scheduler.
+         */
+    	MCsePluginObserver& iObserver;
+
+    	/**
+         * Content API client to use. Own.
+         */
+    	CIptvVodContentClient* iIptvVodContentClient;
+
+    	/**
+         * The Service ID.
+         */
+    	TInt iServiceID;
+
+        /**
+         * The service management client to use. Own.
+         */
+        CIptvServiceManagementClient* iIptvServiceManagementClient;
+
+        /**
+         * Member for the callback and other methods to set in error situation.
+         */
+        TInt* iErrorReason;
+
+        /**
+         * A list of entries under one category. Own.
+         */
+        RPointerArray<CIptvVodContentContentBriefDetails> iEcgList;
+
+        /**
+         * A list of categories in a service. Own.
+         */
+        RPointerArray<CIptvVodContentCategoryBriefDetails> iCategoryList;
+
+    	/**
+         * The IAP to use.
+         */
+    	TUint32 iIapId;
+
+    	/**
+         * The active scheduler wait to use when something needs to be waited.
+         * Own.
+         */
+    	CActiveSchedulerWait* iActiveSchedulerWait;
+
+        /**
+         * The service. Own.
+         */
+        CIptvService* iService;
+
+        /**
+         * The battery watcher. Own.
+         */
+         CIptvBatteryWatcher* iBatteryWatcher;
+
+        /**
+         * The progilfe change watcher. Own.
+         */
+         CProfileChangeNotifyHandler* iProfChangeHandler;
+
+        /**
+         * The phone registration watcher. Own.
+         */
+         CIptvPhoneRegistrationWatcher* iPhoneRegistrationWatcher;
+	};
+
+#endif // CIPTVSCHEDULEDDOWNLOADPLUGINENGINE_H
+
+// End of file.