diff -r 000000000000 -r 96612d01cf9f videofeeds/clientapi/inc/CIptvVodDlClient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videofeeds/clientapi/inc/CIptvVodDlClient.h Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,406 @@ +/* +* Copyright (c) 2005 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: VoD download API* +*/ + + + + +#ifndef CIPTVVODDLCLIENT_H +#define CIPTVVODDLCLIENT_H + +#include +#include "CIptvUtil.h" +#include "IptvEngineUids.h" + +#include "CIptvClientBase.h" +#include "CIptvMyVideosVideoBriefDetails.h" +#include "CIptvVodDlEventListener.h" +#include "CIptvVodDlDownloadEvent.h" +#include "TIptvVodDlDownloadId.h" +#include "CIptvVodDlDownloadList.h" +#include "CIptvVodDlDownloadListItem.h" +#include "MIptvVodDlClientObserver.h" +#include "CIptvService.h" +#include "MIptvEventListenerObserver.h" + +class CIptvVodDlDownloadReq; +class CIptvVodDlDownloadList; +class CIptvVodDlDownloadWatcher; +class CIptvVodDlCancelDownloadReq; +class CIptvEventListener; + +/** + * VoD download API + * + * Notice, if you set SetWaitForFlushInDestructor(ETrue), then when calling this class' + * destructor, the destructing might take some time and during that time dl events might arrive. + * Client must be able to handle events untill the destruct method has finished. + * This is usually achieved by placing this class as a first in destruction chain + * of the application. One can also use WaitForFlush() method before deleting the object to achieve + * similar functionality. If neither method is used, then all requests which are not sent yet + * to server are lost in deletion. + * + * @lib IptvEngineClient.dll + */ +class CIptvVodDlClient : public CIptvClientBase, + public MIptvEventListenerObserver + { + +public: + + /** + * Two-phased constructor. + */ + static IMPORT_C CIptvVodDlClient* NewL ( + MIptvVodDlClientObserver& aClientObserver ); + + /** + * Two-phased constructor. + */ + static IMPORT_C CIptvVodDlClient* NewLC( + MIptvVodDlClientObserver& aClientObserver ); + + /** + * Destructor. + */ + virtual IMPORT_C ~CIptvVodDlClient(); + + /** + * Purchase content from service. Not Supported. + * @param aServiceId Service provider ID identifier. + * @param aContentId Content ID identifier. + * @return Error code, KErrNone if no errors, + * KErrCouldNotConnect if server needs permission for connection, otherwise one of the system wide error codes. + */ + IMPORT_C TInt PurchaseL( + TIptvServiceId aServiceId, + TIptvContentId aContentId ); + + /** + * Download content from service. + * @param aIapId + * @param aServiceId Service provider ID identifier. + * @param aContentId Content ID identifier. + * @param aIndex Content access index. + * @param aDltype Type of the requested download, currently only EIptvDownloadTypeImmediate + * supported. + * @return Error code, indicates if download is started successfully. If return code is + * EIptvDlNoError, then further download status is reported via events, on error + * no further events will arrive. + */ + IMPORT_C TIptvDlError DownloadL( + TUint32 aIapId, + TIptvServiceId aServiceId, + TIptvContentId aContentId, + TUint32 aIndex, + TIptvDownloadType aDlType ); + + /** + * Download content from service. Download status is reported via events. + * Download requests are buffered on client side. Use WaitForFlush() method + * to ensure that requests have been sent to server. + * @param aIapId. + * @param aServiceId Service provider ID identifier. + * @param aContentId Content ID identifier. + * @param aContentIndex Content access index. + * @param aDltype Type of the requested download, currently only EIptvDownloadTypeImmediate + * supported. + */ + IMPORT_C void DownloadReqL( + TUint32 aIapId, + TIptvServiceId aServiceId, + TIptvContentId aContentId, + TUint32 aContentIndex, + TIptvDownloadType aDlType ); + + /** + * Cancels download. + * Operation includes clean up that removes files from file system, + * deletes data related to aGlobalFileId and releases aGlobalFileId identifier. + * @param aGlobalFileId Download ID identifier, reference to actual file under download. + * @return Error code, KErrNone if no errors, otherwise one of the system wide error codes. + */ + IMPORT_C TInt CancelDownloadL( + CIptvMyVideosGlobalFileId& aGlobalFileId ); + + /** + * Cancels download. + * Operation includes clean up that removes files from file system, + * deletes data related to FileId and releases FileId identifier. + * @param aServiceId + * @param aContentId + * @return Error code, KErrNone if no errors, otherwise one of the system wide error codes. + * KErrNotFound if download was not found from VOD DL Manager, file might still be in + * My Videos. + */ + IMPORT_C TInt CancelDownloadL( + TUint32 aServiceId, + TUint32 aContentId ); + + /** + * Cancels download asynchronously. See CIptvVodDlDownloadEvent::TEvent for + * response events. + * Download cancel requests are buffered on client side. Use WaitForFlush() method + * to ensure that requests have been sent to server. + * Operation includes clean up that removes files from file system, + * deletes data related to FileId and releases FileId identifier. + * @param aDownloadId For cancel to success, either one of iServiceId/iContentId + * OR iFileId&iDriveId pairs must be set. + */ + IMPORT_C void CancelDownloadReqL( + TIptvVodDlDownloadId& aDownloadId ); + + /** + * Pause download. + * @param aFileId Download ID identifier, reference to actual file under download. + * @return Error code, KErrNone if no errors, otherwise one of the system wide error codes. + */ + IMPORT_C TInt PauseDownloadL( + CIptvMyVideosGlobalFileId& aFileId ); + + /** + * Pauses all downloads. + * @return Error code, KErrNone if no errors, otherwise one of the system wide error codes. + */ + IMPORT_C TInt PauseAllDownloads(); + + /** + * Resume download. + * @param aFileId reference to file under download. + * @param aUseUserNameAndPassword if EFalse, aUserName and aPassword are ignored. + * @param aUserName HTTP user name + * @param aPassword HTTP password + * @param aIapId + * @param aUseIapId if EFalse, aIapId is ignored + * @return Error code, KErrNone if no errors, otherwise one of the system wide error codes. + */ + IMPORT_C TInt ResumeDownloadL( + CIptvMyVideosGlobalFileId& aFileId, + TBool aUseUserNameAndPassword, + const TDesC& aUserName, + const TDesC& aPassword, + TUint32 aIapId, + TBool aUseIapId ); + + /** + * Resume download. This is meant to to be used in early download phaze when global + * file ID is not valid yet. + * @param aServiceId + * @param aContentId + * @param aUseUserNameAndPassword if EFalse, aUserName and aPassword are ignored. + * @param aUserName HTTP user name, KIptvVodDlUserNameMaxLength is the maximum length + * @param aPassword HTTP password, KIptvVodDlPasswordMaxLength is the maximum length + * @param aIapId + * @param aUseIapId if EFalse, aIapId is ignored + * @return Error code, KErrNone if no errors, otherwise one of the system wide error codes. + */ + IMPORT_C TInt ResumeDownloadL( + TUint32 aServiceId, + TUint32 aContentId, + TBool aUseUserNameAndPassword, + const TDesC& aUserName, + const TDesC& aPassword, + TUint32 aIapId, + TBool aUseIapId ); + + /** + * Resumes all downloads. + * @return Error code, KErrNone if no errors, otherwise one of the system wide error codes. + */ + IMPORT_C TInt ResumeAllDownloads(); + + /** + * Gets list of items selected for download. + * @param aDownloadList + * @return Error code, KErrNone if no errors, otherwise one of the system wide error codes. + */ + IMPORT_C TInt GetDownloadListL( + CIptvVodDlDownloadList& aDownloadList ); + + /** + * Get download progess percentage for selected download file ID. + * @since + * @param aGlobalFileId Download file ID identifier, reference to actual file under download. + * @return Progress in %. Decimal + * 0 for not started, + * 1-99 for ongoing and + * 100 for completed download. + * If error, one of the system wide error codes returned. + */ + IMPORT_C TInt GetDownloadProgressL( + CIptvMyVideosGlobalFileId& aGlobalFileId ); + + /** + * From MIptvEventListenerObserver. + * Event is routed to Client observer (MIptvVodDlClientObserver). + * @param aEvent + */ + void HandleEvent( MIptvEvent& aEvent ); + + /** + * Configures flush behaviour in destructor. + * @param aWaitForFlushInDestructor If ETrue, then this objects destructor will block until + * all commands have been passed to server. EFalse will discard + * commands and destruct immedetially. EFalse is on as default. + */ + IMPORT_C void SetWaitForFlushInDestructor( + TBool aWaitForFlushInDestructor ); + + /** + * Blocks until all commands have been flushed to server. + */ + IMPORT_C void WaitForFlush(); + + /** + * Updates existing soft notification. + * + * @param aMsg Notification information. + */ + IMPORT_C void UpdateDownloadNotification( const TDesC& aMsg ); + +private: + + /** + * C++ default constructor. + */ + CIptvVodDlClient(MIptvVodDlClientObserver& aClientObserver); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * From CActive, handles an active object’s request completion event + */ + void RunL(); + + /** + * From CActive, implements cancellation of an outstanding request. + * This function is called as part of the active object’s Cancel(). + */ + void DoCancel(); + + /** + * Removes Dl request from the queue. + * @param aServiceId + * @param aContentId + * @param aSendEvent If ETrue, (and the dl req was found from queue) + * the CIptvVodDlDownloadEvent::ECancelReqSucceeded event is sent + * to client. If EFalse, then no event is sent. + * @return ETrue if dl req was removed from the queue, EFalse otherwise. + */ + TBool CancelDlFromQueueL( + TUint32 aServiceId, + TUint32 aContentId, + TBool aSendEvent ); + + /** + * Sends cancel download response event to client. + * @param aSuccess if ETrue then CIptvVodDlDownloadEvent::EDownloadReqSucceeded event is sent, + * if EFalse then CIptvVodDlDownloadEvent::EDownloadReqFailed event is sent. + */ + void SendCancelEventL( + TUint32 aServiceId, + TUint32 aContentId, + TBool aSuccess ); + +#if 0 + /** + * Gets next download request from the queue. Ownership moves. + * Item is removed from the iReqQueue. + * @return pointer to download req, NULL if not found. + */ + CIptvVodDlDownloadReq* GetNextDlReqFromQueueL(); + + /** + * Extracts cancel download req object from request queue. + * @return object extracted, NULL if none found. + */ + CIptvVodDlCancelDownloadReq* GetNextCancelDlReqFromQueueL(); +#endif + + /** + * Sends cancel download request. Active object is set active. + * @aParam aCancelDlReq request object to send. + */ + void SendCancelDownloadReqL( + CIptvVodDlCancelDownloadReq& aCancelDlReq ); + + /** + * Sends download req. Active object is set active. + * @aParam aDownloadReq request object to send. + */ + void SendDownloadReqL( + CIptvVodDlDownloadReq& aDownloadReq ); + + /** + * Sends next request from the queue. + */ + void HandleNextReqInQueueL(); + +public: + + MIptvVodDlClientObserver& iClientObserver; + +private: // Data + + /** + * Listens events from the server side (CIptvEventGenerator sends them). + */ + CIptvEventListener* iEventListener; + + HBufC8* iIpcMsg; + TPtr8 iIpcMsgPtr; + + /** + * The last asynchronous message sent. Negative + * value means that there is no msg pending. + */ + TInt iPendingReq; + + /** + * Used to store download id for the asynchronous request. If asynchronous + * request fails before download object is created + * in VOD DL Manager, this object is used to generate fail event + * to client. + */ + TIptvVodDlDownloadId iReqDownloadId; + + /** + * Asynchronous download requests which can't be sent immedetially are queued here. + */ + RArray iReqQueue; + + /** + * This is ETrue when this object is flush wait pending. + */ + TBool iWaitingForFlush; + + /** + * If ETrue, then destructor will block until commands have been flushed + * to server. + */ + TBool iWaitForFlushInDestructor; + + /** + * Used to send requests on the background, allowing client to continue + * normal activities. + */ + CActiveSchedulerWait* iActiveSchedulerWait; + + }; + +#endif // CIPTVVODDLCLIENT_H