diff -r 000000000000 -r 96612d01cf9f videofeeds/scheduleddlplugin/inc/vcnsscheduleddownloadpluginengine.h --- /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 +#include +#include +#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 iEcgList; + + /** + * A list of categories in a service. Own. + */ + RPointerArray 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.