upnpframework/upnpaiwengine/inc/upnpaiwengine.h
changeset 0 7f85d04be362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpframework/upnpaiwengine/inc/upnpaiwengine.h	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,583 @@
+/*
+* Copyright (c) 2005-2007 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:  Header file for the CUPnPAiwEngine class.
+*
+*/
+
+
+#ifndef UPNP_AIW_ENGINE_H
+#define UPNP_AIW_ENGINE_H
+
+//  INCLUDES
+// System
+#include <e32base.h>
+#include <AknProgressDialog.h>
+
+// avcontroller api
+#include "upnpavrenderingsessionobserver.h"
+#include "upnpavdeviceobserver.h"
+#include "upnpitemresolverobserver.h"
+
+// upnpframework / internal api's
+#include "upnpcommonui.h"
+
+// aiwengine internal
+#include "upnpaiwengineobserver.h"
+#include "upnpaiwtimerobserver.h"
+
+
+// ENUMERATIONS
+enum TUPnPEngineState
+    {
+    EUPnPEngineNotConnected = 1,
+    EUPnPEngineConnectionLost,
+    EUPnPEngineConnected,
+    EUPnPEngineActive,
+    EUPnPEngineBrowsingHomeNetwork
+    };
+
+enum TUPnPAiwEngineDeviceType
+    {
+    EUPnPAiwEngineTargetDeviceWithAudioSupport = 1,
+    EUPnPAiwEngineTargetDeviceWithImageAndVideoSupport,
+    EUPnPAiwEngineTargetDeviceWithImageSupport
+    };
+
+enum TUPnPAiwEngineTransferMode
+    {
+    EAiwEngineCopy = 0,
+    EAiwEngineCopyPlaylist,
+    EAiwEngineMove
+    };    
+
+// FORWARD DECLARATIONS
+class CAknWaitDialog;
+class CUPnPAiwTimer;
+class MUPnPAVController;
+class MUPnPAVRenderingSession;
+class MUPnPAVSessionBase;
+
+// CLASS DECLARATION
+
+/**
+*  CUPnPAiwEngine
+*  The class works as an engine component between the UPnP AIW, UPnP Common 
+*  UI components and UPnPAVController components.
+*  @since S60 3.0
+*/
+class CUPnPAiwEngine : public CBase,
+                       public MUPnPAVRenderingSessionObserver,
+                       public MUPnPAiwTimerObserver,
+                       public MProgressDialogCallback,
+                       public MUPnPAVDeviceObserver,
+                       public MUPnPItemResolverObserver
+    {
+
+    public: // Constructors and destructor
+
+        /**
+         * Two-phased constructor.
+         */
+        IMPORT_C static CUPnPAiwEngine* NewL();
+
+        /**
+         * Releases the instance.
+         *
+         * @since S60 3.0
+         */
+        IMPORT_C static void ReleaseInstance();
+        
+        /**
+         * Destructor.
+         */
+        virtual ~CUPnPAiwEngine();
+
+    public: // Methods from MUPnPAVDeviceObserver
+
+        // Unnecessary callback methods
+        void UPnPDeviceDiscovered( const CUpnpAVDevice& /*aDevice*/ ) {}
+        void UPnPDeviceDisappeared (const CUpnpAVDevice& /*aDevice*/ ) {}
+
+        /**
+         * Notifies that the WLAN connection has been lost. All sessions
+         * are now usable and must be closed.
+         *
+         * @since Series 60 3.1
+         * @return None
+         */ 
+        void WLANConnectionLost();
+        
+    public: // UPnP Aiw Engine call back
+
+        /**
+         * Sets the observer instance.
+         *
+         * @since S60 3.0
+         * @param aObserver (MUPnPAiwEngineObserver*) observer instance
+         */
+        IMPORT_C void SetEngineObserver( MUPnPAiwEngineObserver* aObserver );
+
+        /**
+         * Removes the observer instance.
+         *
+         * @since S60 3.0
+         */
+        IMPORT_C void RemoveEngineObserver();
+
+    public:
+
+        /**
+         * Returns the state of the UPnP AIW Engine.
+         *
+         * @since S60 3.0
+         * @return TUPnPEngineState State of the engine
+         */
+        IMPORT_C TUPnPEngineState EngineState();
+
+        /**
+         * Opens the External media UI.
+         *
+         * Leaves if the UpnpAiwEngine is already in use, if the
+         * UpnpAvController instantiation fails, or if the device selection/
+         * browse dialog leaves.
+         *
+         * @since S60 3.0
+         */
+        IMPORT_C void OpenExternalMediaL();
+
+        /**
+         * Enables the showing of local media files on a remote renderer 
+         * device.
+         *
+         * Leaves if the UpnpAiwEngine is already in use, if the
+         * UpnpAvController instantiation fails, or if the device selection
+         * dialog leaves.
+         *
+         * @since S60 3.0
+         */
+        IMPORT_C void EnableExternalL();
+
+        /**
+         * Disables the showing of local media files on remote renderer 
+         * device.
+         *
+         * @since S60 3.0
+         */
+        IMPORT_C void DisableExternal();
+
+        /**
+         * Copies local files to a remote media server.
+         *
+         * @since S60 3.0
+         * @param aFileNames (RPointerArray<TDesC>&) Reference to an array
+         *        of TDesC objects containing the list of file names. All 
+         *        files that are successfully copied are removed from the
+         *        list.
+         */
+        IMPORT_C void CopyToExternalL( RPointerArray<TDesC>& aFileNames );
+
+        /**
+         * Copies a local playlist to a remote media server.
+         *
+         * @since S60 3.0
+         * @param aFileNames (RPointerArray<TDesC>&) Reference to an array
+         *        of TDesC objects containing the list of file names. All
+         *        files that are successfully copied are removed from the 
+         *        list.
+         * @param aPlaylistName (const TDesC&) name of the playlist
+         */
+        IMPORT_C void CopyPlaylistToExternalL(
+                                    const TDesC& aPlaylistName,
+                                    RPointerArray<TDesC>& aFileNames );
+
+        /**
+         * Moves local files to a remote media server.
+         *
+         * @since S60 3.0
+         * @param aFileNames (RPointerArray<TDesC>&) Reference to an array
+         *        of TDesC objects containing the list of file names. All
+         *        files that are successfully moved removed from the list.
+         */
+        IMPORT_C void MoveToExternalL( RPointerArray<TDesC>& aFileNames );
+
+        /**
+         * Plays (sends for rendering) local media file using the selected
+         * UPnP Media renderer. Only image and video files are supported
+         * after Upnp Fw 2.0.
+         *
+         * Leaves if the given filename is not valid, file is not a media
+         * file, if the UpnpAiwEngine is not ready (enable external to done),
+         * or if the bearer or remote upnp device is lost.
+         *
+         * @since S60 3.0
+         * @param aFileName (const TDesC&) reference to the file name of
+         *        the media file.
+         */
+        IMPORT_C void PlayL( const TDesC& aFileName );
+
+        /**
+         * Displays connection error if creating of control point fails.
+         *
+         * @since S60 3.1
+         */
+        IMPORT_C void ShowConnectionErrorL();
+
+    public: // Methods to update the singleton reference counter
+
+        /**
+         * Sets the initial value of the user counter to zero.
+         *
+         * @since S60 3.0
+         */
+        void InitialiseUserCounter();
+
+        /**
+         * Increases the value of the user counter.
+         *
+         * @since S60 3.0
+         */
+        void IncreaseUserCounter();
+
+        /**
+         * Decreases the value of the user counter.
+         *
+         * @since S60 3.0
+         */
+        void DecreaseUserCounter();
+
+        /**
+         * Gets the value of the user counter.
+         *
+         * @since S60 3.0
+         * @return TInt
+         */
+        TInt UserCounter() const;
+
+        /**
+         * Displays connection lost error if copying files fails.
+         *
+         * @since S60 3.2.3
+         */
+        void ShowConnectionLostCopyErrorL();
+
+    private:
+
+        /**
+         * Transfers (copies/moves) local files/playlist to a remote media
+         * server.
+         *
+         * Leaves if the given parameters are not valid, if the UpnpAiwEngine
+         * is already in use, if user cancels the operation, or if the bearer
+         * or remote upnp device is lost.
+         *
+         * @since S60 3.0
+         * @param aMode (TUPnPAiwEngineTransferMode) transfer mode
+         * @param aFileNames (RPointerArray<TDesC>&) Reference to an array
+         *        of TDesC objects containing the list of file names. All
+         *        files that are successfully copied are removed from the
+         *        list.
+         * @param aPlaylistName (const TDesC&) name of the playlist
+         */
+        void TransferToExternalL( TUPnPAiwEngineTransferMode aMode,
+                                  RPointerArray<TDesC>& aFilePaths,
+                                  const TDesC& aPlaylistName );
+
+        /**
+         * Starts a rendering session with UpnpAvController. Queries the
+         * target rendering device.
+         *
+         * Leaves if any instantiation fails or used cancels the device
+         * selection.
+         *
+         * @since S60 3.0
+         * @param aDeviceType (TUPnPAiwEngineDeviceType) type of the device
+         */
+         void StartRenderingSessionL( TUPnPAiwEngineDeviceType aDeviceType );
+
+        /**
+         * Handles the UPnP device disappeared call back method.
+         *
+         * @since S60 3.0
+         * @param aDevice (const CUpnpAVDevice&) pointer to the device info
+         */
+        void HandleUPnPDeviceDisappearedL( const CUpnpAVDevice& aDevice );
+
+        /**
+         * Waits for local media server file sharing activation (or user 
+         * cancel).
+         *
+         * @since S60 3.1
+         * @param aSession (MUPnPAVSessionBase*) pointer to the AVController
+         *        session.
+         */
+        void StartLocalFileSharingL( MUPnPAVSessionBase *aSession );
+
+    public: // Call back methods of MUPnPAVRenderingSessionObserver
+
+        // Unused callback methods
+        void VolumeResult( TInt /*aError*/,
+                           TInt /*aVolumeLevel*/,
+                           TBool /*aActionResponse*/ ) {}
+        void MuteResult( TInt /*aError*/,
+                         TBool /*aMute*/,
+                         TBool /*aActionResponse*/ ) {}
+        void PositionInfoResult( TInt /*aError*/,
+                                 const TDesC8& /*aTrackPosition*/,
+                                 const TDesC8& /*aTrackLength*/ ) {}
+        void SetNextURIResult( TInt /*aError*/ ) {}
+
+        /**
+         * UPnP AV Controller calls this method to indicate that the requested
+         * interaction operation (play, stop, etc.) is complete. In other
+         * words, the target rendering device has changed it's state 
+         * accordingly.
+         *
+         * @since Series 60 3.1
+         * @param aError (TInt) error code
+         * @param aOperation (TAVInteractOperation) operation Id
+         */
+        void InteractOperationComplete( TInt aError,
+                                        TUPnPAVInteractOperation aOperation );
+
+        /**
+         * UPnP AV Controller calls this method as a response to SetUri
+         * action.
+         *
+         * @since Series 60 3.1
+         * @param aError (TInt) error code
+         */
+        void SetURIResult( TInt aError );
+
+        /**
+         * Notifies that the Media Renderer we have a session with has
+         * disappeared. Session is now unusable and must be closed. 
+         *
+         * @since Series 60 3.1
+         * @param aReason (TUPnPDeviceDisconnectedReason) reason code
+         */
+        void MediaRendererDisappeared(
+                            TUPnPDeviceDisconnectedReason aReason );
+
+    public: // Call back methods of MUPnPAVSessionObserverBase
+    
+         /**
+         * Notifies that the Media Server startup has completed. 
+         *
+         * @since Series 60 3.1
+         * @return aError (TInt) error code
+         */        
+        void ReserveLocalMSServicesCompleted( TInt aError );
+
+    public: // Call back methods of MAknProgressDialogCallback
+
+        /**
+         * ProgressDialog call back method.
+         * Get's called when a dialog is dismissed.
+         *
+         * @since S60 3.0
+         * @param aButtonId (TInt) ID of the button pressed
+         */
+        void DialogDismissedL( TInt aButtonId );
+
+    public: // Timer related methods
+
+        /**
+         * Starts the UPnPAiWTimer.
+         *
+         * @since S60 3.0
+         */
+        void StartTimer();
+
+        /**
+         * Stops the UPnPAiWTimer.
+         *
+         * @since S60 3.0
+         */
+        void StopTimer();
+
+        /**
+         * Callback method for the UPnPAiwTimer.
+         *
+         * @since S60 3.0
+         */
+        void TimerCallback();
+
+    private: // Helper methods
+
+        /**
+         * Method for selecting a device.
+         *
+         * Leaves if the engine is not ready (UpnpAvController not 
+         * instantiated), if the user cancels the operation, or if the bearer
+         * is lost during the device selection.
+         *
+         * @since S60 3.1
+         * @param aDeviceType (TUPnPDeviceTypesToSearch) type of device
+         * @param aDlgTitle title used in device selection dialog
+         * @return CUpnpAVDevice* selected upnp av device.
+         */
+        CUpnpAVDevice* SelectDeviceL( 
+                TUPnPDeviceTypesToSearch aDeviceType,
+                TUPnPDialogTitle aDlgTitle );
+        
+        /**
+         * Method for releasing upnp resource.
+         *
+         * @since S60 3.1
+         * @param none
+         * @return none
+         */
+        void ReleaseUpnpResourceL();
+        
+        /**
+         * Method for playing a local file
+         *
+         * @since S60 3.1
+         * @param none
+         * @return none
+         */
+        void InitPlayL();
+        
+        /**
+         * Method for playing a local video
+         *
+         * @since S60 3.1
+         * @param aFilePath file path
+         * @return none
+         */
+        void StartVideoPlayL( const TDesC& aFileName );
+        
+        /**
+         * Shows info note after the file transfer has been completed.
+         * 
+         * @since S60 5.1
+         * @param aMode Type of file transfer (copy or move)
+         * @param aCount Number of files copied to server
+         * @param aDevice Device files were copied to
+         * @return none
+         */
+        void ShowTransferInfoNoteL( 
+                TUPnPAiwEngineTransferMode aMode,
+                TInt aCount, 
+                const CUpnpAVDevice& aServerName ) const;
+
+        /**
+         * creates upnpitem using helper resolve local item
+         * 
+         * @since S60 5.1
+         * @param aFileName 
+         */
+        void CreateUpnpItemAndSetUriL( const TDesC& aFileName );
+        
+        /**
+         * Helper method to create MUPnPItemResolver.
+         * 
+         * @since S60 5.1
+         * @param aFilePath file path
+         * @return Pointer to resolver instance that is put to cleanupstack.
+         */
+        MUPnPItemResolver* CreateResolverLC( const TDesC& aFilePath );
+        
+        /**
+         * Static cleanup function for MUPnPItemResolver.
+         * Method makes sure that MUPnPItemResolver is properly cleaned up.
+         * 
+         * @since S60 5.1
+         * @param aResolver TAny pointer to CUPnPAiwEngine object.
+         */
+        static void CleanupResolver( TAny* aAiwEngine );
+
+        /**
+         * starts asynchronous CActiveSchedulerWait
+         */
+        void Wait();
+        
+        /**
+         * stops asynchronous CActiveSchedulerWait
+         */
+        void StopWait();
+        
+    private: // Construction methods
+
+        // Constructor
+        CUPnPAiwEngine();
+
+        /**
+         * ConstructL.
+         */
+        void ConstructL();
+        
+    private: // from MUPnPItemResolverObserver
+        
+        /**
+         * see MUPnPItemResolverObserver
+         */
+        void ResolveComplete( 
+                const MUPnPItemResolver& aResolver,
+                TInt aError );
+
+    private: // Data members
+
+        // State of the engine
+        TUPnPEngineState iEngineState;
+
+        // Reference to the AV Controller ECom plug-in
+        MUPnPAVController* iAVController;                   // owned
+
+        // Reference to the AIW Provider instance
+        MUPnPAiwEngineObserver* iObserver;                  // not owned
+
+        // File sharing activation wait note and related member vars
+        CAknWaitDialog* iFileSharingActivationWaitNote;     // owned;
+        TBool iLocalFileSharingActivated;
+        TInt iFileSharingError;
+
+        // CoeEnv and the resource offset (needed when loading and
+        // unloading resources)
+        CEikonEnv* iCoeEnv;                                 // not owned
+        TInt iResFileOffset;
+
+        // Wait note dialog
+        CAknWaitDialog* iWaitNoteDialog;                    // owned
+
+        // Timer
+        CUPnPAiwTimer* iUPnPAiwTimer;                       // owned
+
+        MUPnPAVRenderingSession* iRenderingSession;         // owned
+        
+        CUPnPCommonUI* iCommonUI;                            //owned 
+        HBufC16*       iFileName;               
+
+        TBool   iRenderingSessionInUse;
+        TBool   iVideoPlay;
+        TBool    iVideoPlayCancel;
+        TBool   iVideoPlayWait;
+    private: // Singleton data members
+
+         // Counter, which maintains the number of users of this singleton
+        TInt iNumberOfUsers;
+        
+        /**
+         * For async operations
+         */
+        CActiveSchedulerWait             iWait;
+        
+        MUPnPItemResolver*               iResolver;
+        
+        TInt                             iResolveResult;
+    };
+
+#endif // UPNP_AIW_ENGINE_H
+
+// End of file