mmfenh/enhancedmediaclient/Client/src/Components/ClientProgDLSource/ClientProgDLSource.h
branchRCL_3
changeset 20 0ac9a5310753
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/enhancedmediaclient/Client/src/Components/ClientProgDLSource/ClientProgDLSource.h	Wed Sep 01 12:23:00 2010 +0100
@@ -0,0 +1,383 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:  Definition of the ClientProgDLSource class.
+*
+*/
+
+
+#ifndef C_CCLIENTAUDIOPROGDLSOURCE_H
+#define C_CCLIENTAUDIOPROGDLSOURCE_H
+
+#include <e32base.h>
+#include <ProgDLSource.h>
+#include <downloadmgrclient.h>
+#include <mmfcontrollerframework.h>
+#include <MultimediaDataSource.h>
+
+#include "SourceBase.h"
+#include "TransferRateMonitor.h"
+#include "ProgDLSourceCustomCommands.h"
+#include "EventAO.h"
+#include "DownloadGateway.h"
+
+
+class MCustomCommand;
+
+namespace multimedia
+    {
+    
+    class CEventNotifier;
+
+    class MTransferRateMonitor;
+    
+    /**
+    *  Implements the ClientSide Source for the ProgDL Source.
+    *  Provides functionality to the Clients to query attributes
+    *  from the ServerSide source
+    *  @lib EnhancedMediaClient.lib
+    *  @since S60 v3.2
+    */    
+    class CClientProgDLSource : public CSourceBase,
+                                public MProgDLSource,
+                                public MDownloadGatewayObserver,
+                                public MTransferRateObserver,
+                                public MSourceStateObserver
+        {
+        public:
+            /**
+            * Function to Create the Object.
+            */
+            CClientProgDLSource();
+            /**
+            * Destructor.
+            */
+            ~CClientProgDLSource();
+            /**
+            * Post Contructor. This is to Support the new type of Construction
+            * of the Object. Notice there is no Two phased Constructor in this class
+            */
+            TInt PostConstructor();
+            
+            /**
+            * Associates the DownloadGateway with the Progressive Download Source.
+            * This Gateway class sends all the Browser Events to the Source.
+            */
+            TInt SetDownloadGateway(CDownloadGateway* aDownloadGateway);
+            
+            // From MControl begins
+            /**
+            * From MControl.
+            * Adds the Observer to this Object
+            * @since S60 v3.2
+            * @param aObserver Client which set the Observer.             
+            */            
+            TInt AddObserver( MControlObserver& aObserver );
+            /**
+            * From MControl.
+            * Removes the Observer to this Object
+            * @since S60 v3.2
+            * @param aObserver Client which set the Observer.             
+            */            
+            TInt RemoveObserver( MControlObserver& aObserver );
+            /**
+            * From MControl.
+            * Returns the Type of this Object.
+            * request and that it is now outstanding 
+            * @since S60 v3.2
+            */            
+            TUid Type();
+            /**
+            * From MControl.
+            * Returns the Control Type of this Object.
+            *
+            * @since S60 v3.2
+            */            
+            TControlType ControlType();
+            // From MControl ends
+            
+            // From MSourceControl begins
+            /**
+            * From MSourceControl.
+            * Returns the Size in Bytes of the Source.
+            * Since this is ProgDL Source, the size represents
+            * the file size which will be passed by the Client
+            *  to the Source
+            * @since S60 v3.2
+            * @param aSize Size returned by the Source.             
+            */            
+            TInt GetSize( TUint& aSize );
+            /**
+            * From MSourceControl.
+            * Returns the Mime Type of the Data for which
+            * the Source is initialized.
+            * @since S60 v3.2
+            * @param aMimeType MimeType returned by the Source.             
+            */            
+            TInt GetMimeType( TDes8& aMimeType );
+            /**
+            * From MSourceControl.
+            * Closes the Source.
+            *
+            * @since S60 v3.2
+            */            
+            TInt Close();
+            // From MSourceControl ends
+            
+            // From MProgDLSource begins
+            /**
+            * From MProgDLSource.
+            * Opens the Source with the FileName and TransactionID
+            * Here it connects to the Browser and attaches to the 
+            * download corresponding to the TransactionID
+            *
+            * @since S60 v3.2
+            * @param aFileName      FileName to be Opened by the Source
+            * @param aDLTxId        TransactionID to connect to the Browser
+            */            
+            TInt Open( const TDesC& aFileName,TInt32 aDLTxId );
+            /**
+            * From MProgDLSource.
+            * Moves the Finished Download to the new Location. This is done
+            * by calling the browser which is invoked through the Gateway.
+            *
+            * @since S60 v3.2
+            * @param aFileName      FileName to be Opened by the Source
+            */            
+            TInt MoveFile(const TDesC& aDestFileName );
+            /**
+            * From MProgDLSource.
+            * Cancels the Ongoing Download
+            *
+            * @since S60 v3.2
+            */            
+            TInt CancelDownload();
+            /**
+            * From MProgDLSource.
+            * Resumes the Paused download
+            *
+            * @since S60 v3.2
+            */            
+            TInt ResumeDownload();
+            /**
+            * From MProgDLSource.
+            * Gets the Current FileSize from the Browser which is getting 
+            * Downloaded
+            *
+            * @since S60 v3.2
+            * @param aSize  Size of the File already downloaded
+            */            
+            TInt GetCurrentFileSize( TUint& aSize );
+            /**
+            * From MProgDLSource.
+            * Gets the Expected FileSize from the Browser which is getting 
+            * Downloaded
+            *
+            * @since S60 v3.2
+            * @param aSize  Final Size of the File
+            */            
+            TInt GetExpectedFileSize( TUint& aSize );
+            /**
+            * From MProgDLSource.
+            * Return the Current Download Status of the Download
+            *
+            * @since S60 v3.2
+            */            
+            TDownloadStatus GetDownloadStatus();
+            /**
+            * From MProgDLSource.
+            * Queries if the Download is Complete from the Gateway
+            *
+            * @since S60 v3.2
+            * @param aBool      Download Complete Status
+            */            
+            TInt IsDownloadComplete(TBool& aBool);
+            /**
+            * From MProgDLSource.
+            * Gets the Percentage of the File already Downloaded
+            *
+            * @since S60 v3.2
+            * @param aPercent   Percentage of the File downloaded
+            */            
+            TInt GetPercentageDownloaded(TUint& aPercent);
+            /**
+            * From MProgDLSource.
+            * Gets the Percentage of the File Buffered before Playback starts.
+            * This query is to the ServerSide Source which is in Buffering State
+            *   
+            * @since S60 v3.2
+            * @param aPercent      Percentage of Data Buffered before Playback starts.
+            */            
+            TInt GetPercentageBuffered(TUint& aPercent);            
+            /**
+            * From MProgDLSource.
+            * This is the DownloadRate that tells you how fast data is downloaded
+            * by the Download Manager
+            *
+            * @since S60 v3.2
+            * @param aRate  Rate at which Data is Downloaded.
+            */            
+            TInt GetDownloadingRate(TUint& aRate);
+            /**
+            * From MProgDLSource.
+            * Returns the BitRate of the Data played from the Source
+            *
+            * @since S60 v3.2
+            * @param aRate  BitRate of the Data Played from the Source
+            */            
+            TInt GetBitRate(TUint& aRate); 
+            /**
+            * From MProgDLSource.
+            * Returns the FileName associated with the Download.
+            * This value is set by the Client when it calls Open().
+            *
+            * @since S60 v3.2
+            * @param aFileName  FileName to be Opened by the Source
+            */            
+            TInt FileName(TPtr& aFileName);
+            // From MProgDLSource ends
+            
+            // From MDownloadGatewayObserver
+            /**
+            * From MDownloadGatewayObserver.
+            * The Gateway Observer sends event which it receives from the
+            * Download Manager.
+            *
+            * @since S60 v3.2
+            * @param aStatus  Current Download Status
+            */            
+            void Event(TDownloadStatus aStatus);
+            /**
+            * From MDownloadGatewayObserver.
+            * Notifies the Client that the Move of the File Complete
+            * with an ErrorCode returned.
+            *
+            * @since S60 v3.2
+            * @param aError  Move Complete with this ErrorCode.
+            */            
+            void MoveFileComplete(TInt aError);
+            // MDownloadGatewayObserver Ends
+            
+            
+            // From CSourceBase begins
+            /**
+            * From CSourceBase.
+            * Callback from the StreamControl when the Source is Created
+            *
+            * @since S60 v3.2
+            * @param aCustomCommand    Custom Command handle to send message to the Source             
+            * @param aSourceHandle     Handle Identifying the Source             
+            */            
+            void ServerSourceCreated( MCustomCommand& aCustomCommand,
+                                    TMMFMessageDestination& aSourceHandle );
+            /**
+            * From CSourceBase.
+            * Callback from the StreamControl when the ServerSource is Deleted
+            *
+            * @since S60 v3.2
+            */            
+            void ServerSourceDeleted();
+            /**
+            * From CSourceBase.
+            * Returns the Content Protection information to the Stream Control
+            * Currently returns KErrNotSupported 
+            * @since S60 v3.2
+            */            
+            TBool IsEncrypted();
+            /**
+            * From CSourceBase.
+            * Returns the SourceUID
+            *
+            * @since S60 v3.2
+            */            
+            TUid GetSourceUid();
+            /**
+            * From CSourceBase.
+            * Returns the Header Data passed when the Client calls Open
+            *  Currently return KErrNotSupported
+            * @since S60 v3.2
+            */            
+            TInt GetHeaderData(TPtr& aPtr);
+            // From CSourceBase ends
+            
+            //MTransferRateObserver begins
+            /**
+            * From MTransferRateObserver.
+            * Callback from the TransferRate Monitor that the Rate Changed
+            * @since S60 v3.2
+            */            
+            void TransferRateChanged();
+            /**
+            * From MTransferRateObserver
+            * Method from the Transfer Rate Monitor to query CurrentFile Size.
+            * @since S60 v3.2
+            * @param aCurrentSize Current File Size returned to the Caller             
+            */            
+            TInt GetCurrentSize( TUint& aCurrentSize );
+            // MTransferRateObserver ends
+            
+            // MSourceStateObserver begins
+            /**
+            * From MSourceStateObserver.
+            * Callback from the Active Object that the Source State changed.
+            * @since S60 v3.2
+            */            
+            void SourceStateChanged();    
+            // MSourceStateObserver ends		
+            
+        private:
+            // Variable to determine if the ServerSource exists
+            TBool iServerSourceExists;
+
+            // FileSize from the Client
+            TUint iSourceSize;
+            // Current Size from the Browser
+            TInt iCurrentSize;
+            // Destination File Name            
+            TFileName iDestFileName;
+
+            // Handle to send messages to the Server Side Source
+            MCustomCommand* iCustomCommand;
+            // Handle Identifying the Server Side Source
+            TMMFMessageDestination iSourceHandle;
+            
+            // Current State of the Source
+            TPckgBuf<CMultimediaDataSource::TState> iStatePckg;
+            // Observer monitoring the State change event
+            CEventAO* iStateEvent;
+            // Current State of the Source
+            CMultimediaDataSource::TState iSourceState;
+            // Event Notifier to notify Clients
+            CEventNotifier* iEventNotifier;
+            // Storing the Download Complete Status
+            TBool isDownloadComplete;
+            // Storing the Download Paused status
+            TBool isDownloadPaused;
+            // Storing the DownloadID/Transaction ID
+            TInt32 iDownloadId;
+            // FileName passed to Open the Source
+            HBufC* iFileName;
+            // Gateway Attached to this Source to talk to Browser
+            CDownloadGateway* iDownloadGateway;
+            // Transfer Rate monitor
+            CTransferRateMonitor* iMonitor;
+            // Current Size of the File in Bytes.
+            TUint iCurrentBytes;
+            // Is the Playback in Progressive Mode
+            TBool iProgressiveMode;
+        };
+    } // namespace multimedia
+
+#endif // CLIENTAUDIOPROGDLSOURCE_H
+
+// End of file