--- /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.