--- /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 <e32base.h>
+#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<MIptvStreamObject*> 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