upnpframework/upnpfiletransferengine/inc/upnpfiletransferhandler.h
changeset 0 7f85d04be362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpframework/upnpfiletransferengine/inc/upnpfiletransferhandler.h	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,371 @@
+/*
+* Copyright (c) 2006-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 CUpnpFileTransferHandler class
+*
+*/
+
+
+#ifndef UPNP_FILE_TRANSFER_HANDLER_H
+#define UPNP_FILE_TRANSFER_HANDLER_H
+
+// INCLUDES
+// System
+#include <AknProgressDialog.h>
+
+// upnpavcotnroller api
+#include "upnpavbrowsingsessionobserver.h"
+#include "upnpfiletransfersessionobserver.h"
+
+// upnpframework / internal api's
+#include "upnpcommonutils.h"                    // TUPnPItemType
+
+// filetransferengine internal
+#include "upnpplaylisthandler.h"
+
+// CONSTANTS
+enum TUpnpFileTransferMode
+    {
+    EUpnpIdleTransferMode = 0,
+    EUpnpCopyRemoteItemsToDefaultLocation,
+    EUpnpCopyRemoteContainerToDefaultLocation,
+    EUpnpCopyRemotePlaylistToDefaultLocation
+    };
+
+enum TUpnpAlbumType
+    {
+    EUpnpFileCopyImageAlbum = 0,
+    EUpnpFileCopyVideoAlbum
+    };
+
+// FORWARD DECLARATIONS
+class CEikonEnv;
+class MUPnPFileDownloadSession;
+
+// CLASS DECLARATION
+
+/**
+* CUpnpFileTransferHandler
+* The class works as an engine component, providing file transfer features
+* of the UpnpFileTransferEngine component.
+*
+* @since S60 3.1
+*/
+NONSHARABLE_CLASS( CUpnpFileTransferHandler ) :
+                                 public CBase,
+                                 public MUPnPAVBrowsingSessionObserver,
+                                 public MUPnPFileTransferSessionObserver,
+                                 public MProgressDialogCallback
+    {
+
+    public: // Constructors and destructor
+
+        /**
+         * Two-phased constructor.
+         * @param aBrowsingSession (MUPnPAVBrowsingSession*) pointer to the
+         *        browsing session
+         */
+         static CUpnpFileTransferHandler* NewL(
+                            MUPnPAVBrowsingSession* aBrowsingSession );
+
+        /**
+         * Destructor.
+         */
+        virtual ~CUpnpFileTransferHandler();
+
+    public: // Business logic methods
+
+        /**
+         * Transfers items from a remote Upnp Media Server to the handset.
+         * Removes files from the array which are succesfully transferred.
+         *
+         * @since S60 3.1
+         * @param aTransferMode (TUpnpFileTransferMode) the transfer mode
+         * @param aItems (RPointerArray<CUpnpItem>&) reference to the array
+         *       of CUpnpItems, the items to copy
+         */
+        void TransferRemoteItemsToHandsetL(
+                            TUpnpFileTransferMode aTransferMode,
+                            RPointerArray<CUpnpItem>& aItems );
+
+        /**
+         * Transfers a container/playlist from a remote Upnp Media Server to
+         * the handset.
+         *
+         * @since S60 3.1
+         * @param aTransferMode (TUpnpFileTransferMode) the transfer mode
+         * @param aContainer (CUpnpContainer*) pointer to the source Upnp
+         *        Container object
+         */
+        void TransferRemoteContainerToHandsetL(
+                            TUpnpFileTransferMode aTransferMode,
+                            CUpnpContainer* aSourceContainer );
+
+        /**
+         * Return the number of items copied from a container
+         *
+         * @since S60 3.1
+         * @param none
+         * @return TInt number of items copied
+         */
+        TInt ItemCopiedFromContainer();
+
+    public: // Call back methods of MAknProgressDialogCallback
+
+        /**
+         * ProgressDialog call back method.
+         * Get's called when a dialog is dismissed.
+         *
+         * @since S60 3.1
+         * @param aButtonId (TInt) ID of the button pressed
+         */
+        void DialogDismissedL( TInt aButtonId );
+
+    public: // Call back methods of MUPnPAVBrowsingSessionObserver
+
+        /**
+         * Returns a browse result received from a Media Server.
+         *         
+         * @since Series 60 3.1
+         * @param aBrowseResponse browse response xml document
+         * @param aError system wide error code
+         * @param aMatches number of returned items
+         * @param aTotalCount total number of objects on container
+         * @param aUpdateId update id number
+         * @return None
+         */
+        void BrowseResponse(
+                        const TDesC8& aBrowseResponse,
+                        TInt aError,
+                        TInt aMatches,
+                        TInt aTotalCount,
+                        const TDesC8& aUpdateId
+                        );
+
+        /**
+         * Returns a search result received from a Media Server.
+         *
+         * @param aSearchResponse search response xml document
+         * @param aError system wide error code
+         * @param aMatches number of returned items
+         * @param aTotalCount total number of resulted items
+         * @param aUpdateId update id number
+         * @return None
+         */
+        void SearchResponse( 
+                        const TDesC8& /*aSearchResponse*/,
+                        TInt /*aError*/,
+                        TInt /*aMatches*/,
+                        TInt /*aTotalCount*/,
+                        const TDesC8& /*aUpdateId*/
+                        ){}
+
+        /**
+         * Returns search capabilities of the requested Media Server.
+         *
+         * @since S60 3.1
+         * @param aError Status information
+         * @param aSearchCapabilities Reference to the search capabilities
+         *        string in HBufC8 format.
+         */
+        void SearchCapabilitiesResponse( TInt /*aError*/,
+                                         const TDesC8& /*aSearchCapabilities*/ )
+                                         {}
+        
+
+        
+        /**
+         * Notifies that the create container operation is complete.
+         *
+         * @since S60 3.1
+         * @param aError Status information
+         * @param aObjectId (const TDesC8&) object ID of the new container
+         */
+        void CreateContainerResponse( TInt /*aError*/,
+                                      const TDesC8& /*aObjectId = KNullDesC8*/ )
+                                      {}
+
+        /**
+         * Notifies that the requested Upnp Object deletion is complete.
+         *
+         * @since S60 3.1
+         * @param aError Status information
+         */
+        void DeleteObjectResponse( TInt /*aError*/ ){}
+
+        /**
+         * Notifies that the Media Server we have a session with has
+         * disappeared. Session is now unusable and must be closed. 
+         *
+         * @since S60 3.1
+         * @param aReason reason code
+         */
+        void MediaServerDisappeared( TUPnPDeviceDisconnectedReason aReason );
+
+         /**
+         * Notifies that the Media Server startup has completed. 
+         *
+         * @since S60 3.1
+         * @return aError (TInt), error code
+         */
+        void ReserveLocalMSServicesCompleted( TInt aError );
+
+    public: // Call back methods of MUPnPFileTransferSessionObserver
+        
+        /**
+         * Notifies that the transfer has been started
+         *
+         * @since S60 3.1
+         * @param aKey identifies the transfer
+         * @param aStatus status (error) code
+         */ 
+        void TransferStarted( TInt aKey,
+                              TInt aStatus );
+        /**
+         * Notifies that the transfer has been completed
+         *
+         * @since S60 3.1
+         * @param aKey identifies the transfer
+         * @param aStatus status (error) code
+         * @param aFilePath 
+         */  
+        void TransferCompleted( TInt aKey,
+                                TInt aStatus,
+                                const TDesC& aFilePath );
+    
+        /**
+         * Notifies transfer progress
+         * NOTE: Transfer progress is not guaranteed
+         *
+         * @since S60 3.1
+         * @param aKey identifies the transfer
+         * @param aBytes amount of bytes downloaded
+         * @param aTotalBytes total amount of bytes
+         */ 
+        void TransferProgress( TInt aKey,
+                               TInt aBytes,
+                               TInt aTotalBytes );
+
+    private: // private business methods
+
+        /**
+         * Handles the copy complete callback when copying files
+         *
+         * @since S60 3.1
+         * @param aError (TInt) Status information
+         * @param aFilepath (const TDesC&) filepath for a downloaded file
+         */
+        void CopyCompleteFilesL( TInt aError, 
+                                 const TDesC& aFilepath );
+
+        /**
+         * Handles the copy complete callback when copying containers
+         *
+         * @since S60 3.1
+         * @param aError (TInt) Status information
+         * @param aFilepath (const TDesC&) filepath for a downloaded file
+         */
+        void CopyCompleteContainersL( TInt aError, 
+                                      const TDesC& aFilepath );
+
+        /**
+         * Initialises and runs the progress note.
+         *
+         * @since S60 5.1
+         * @param aCount A Count used for initialized increment values of dialog.
+         *        Zero creates dialog as uninitialized.
+         */
+        void RunCopyNoteL( TInt aCount = 0 );
+        
+        /**
+         * Finishes the progress and wait note if they are running.
+         *
+         * @since S60 3.1
+         */
+        void FinishNotes();
+
+        /**
+         * Resolves the media type of the given file.
+         *
+         * @since S60 3.1
+         * @param aFilepath (const TDesC&) filename
+         * @return TUPnpItemType the type of the item
+         */
+        TUPnPItemType ResolveFileType( const TDesC& aFilepath );
+
+    private: // Construction methods (private)
+
+        // Constructor
+        CUpnpFileTransferHandler();
+
+        /**
+         * ConstructL.
+         * @param aController (MUPnPAVBrowsingSession*) pointer to a valid
+         *        UpnpAvController BrowsingsSession
+         */
+        void ConstructL( MUPnPAVBrowsingSession* aBrowsingSession );
+
+    private: // Data members
+
+        // CoeEnv and the resource offset (needed when loading and
+        // unloading resources)
+        CEikonEnv* iCoeEnv;                             // not owned
+        TInt iResFileOffset;
+
+        // Browsing session handles (not owned)
+        MUPnPAVBrowsingSession* iBrowsingSession;
+        MUPnPAVBrowsingSessionObserver *iBrowsingSessionObserverBackup;
+
+        // Progess note dialog and progress info
+        CAknProgressDialog* iProgressNoteDialog;        // owned
+        CEikProgressInfo* iProgressInfo;                // not owned
+        TInt iCurrentProgressValue;
+        TInt iProgressIncrement;
+
+        TUpnpFileTransferMode iFileTransferMode;
+        TInt iCopyPosition;
+
+        // Status code to store the operation status information
+        TInt iStatusCode;
+
+        //used to copy from remote to local
+        RPointerArray<CUpnpItem>* iCopyItems;           // owned
+        CUpnpItem* iCopyItem;                           // owned
+
+        // Container copy
+        TBool iContainerCopyFirstBrowse;
+        TInt iContainerCopyBrowseIndex;
+        TInt iContainerCopyBrowseTotalCount;
+        CUpnpContainer* iCopyFromContainer;             // not owned
+
+        // Playlist handler
+        CUpnpPlaylistHandler* iPlaylistHandler;         // owned
+
+        //number of items copied from a container
+        TInt iNumCopiedItemFromContainer;
+
+        /*
+         * UpnpAvControllerClient. Owned.
+         */
+        MUPnPAVController*              iAvController;
+        
+        /*
+         * File download session handle.
+         */
+        MUPnPFileDownloadSession*       iDownloadSession;
+        
+    };
+
+#endif // UPNP_FILE_TRANSFER_HANDLER_H
+
+// End of file