mmfenh/enhancedmediaclient/Client/src/Components/ClientProgDLSource/ClientProgDLSource.h
--- /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