videofeeds/clientapi/inc/CIptvVodDlClient.h
changeset 0 96612d01cf9f
--- /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