homesync/contentmanager/cmserver/cmstoremanager/inc/cmsmtransferengine.h
changeset 0 7f85d04be362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homesync/contentmanager/cmserver/cmstoremanager/inc/cmsmtransferengine.h	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,470 @@
+/*
+* Copyright (c) 2008 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:  Manages Upnp actions needed by Store Manager
+*  Version     : %version: tr1ido#1.1.6 % << Don't touch!
+*
+*/
+
+
+
+#ifndef __CMSMTRANSFERENGINE_H
+#define __CMSMTRANSFERENGINE_H
+
+#include <e32base.h>
+#include <badesca.h>
+#include <f32file.h>
+#include "upnpfiletransfersessionobserver.h"
+
+// Forward declarations
+class MUPnPAVController;
+class MCmSmTransferObserver;
+class CCmDmMain;
+class CCmStoreListItem;
+class MCmSqlMain;
+
+// CLASS DECLARATION
+ /**
+ *  Class represents methods to communication with AV Controller API.
+ *
+ *  @lib cmstoremanager.lib
+ *
+ *  @since S60 5.1
+ */
+NONSHARABLE_CLASS( CCmSmTransferEngine ): public CBase,
+                            public MUPnPFileTransferSessionObserver
+    {
+
+public:
+
+    // panic codes
+    enum TCmSmTransferEnginePanic
+        {
+        ECmSmTransferQueueMessedUp = 30
+        };
+
+    // Copy statuses        
+    enum TCmSmCopyStatus
+        {
+        ECmSmCopyNever,
+        ECmSmCopyContinued,
+        ECmSmCopySuccess
+        }; 
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @since S60 5.1
+     * @param aObserver, observer pointer
+     * @param aDBMngr, database manager
+     * @param aItems, reference to items array
+     * @param aItemIds, reference to item id array
+     * @return  pointer to CCmSmTransferEngine class
+     */
+    static CCmSmTransferEngine* NewL( MCmSmTransferObserver* aObserver, 
+        CCmDmMain* aDBMngr, RPointerArray<CCmStoreListItem>& aItems, 
+        RArray<TInt>& aItemIds );
+    
+    /**
+     * Two-phased constructor.
+     *
+     * @since S60 5.1
+     * @param aObserver, observer pointer
+     * @param aDBMngr, database manager
+     * @param aItems, reference to items array
+     * @param aItemIds, reference to item id array
+     * @return  pointer to CCmSmTransferEngine class
+     */
+    static CCmSmTransferEngine* NewLC( MCmSmTransferObserver* aObserver, 
+        CCmDmMain* aDBMngr, RPointerArray<CCmStoreListItem>& aItems,
+        RArray<TInt>& aItemIds );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CCmSmTransferEngine();
+
+public: 
+
+    /**
+     * Sets av controller
+     *
+     * @since S60 5.1
+     * @param aAVControl, pointer to av controller
+     * @return  None
+     */        
+    void SetAvController( MUPnPAVController* aAVController );
+        
+    /**
+     * Lists media servers 
+     *
+     * @since S60 5.1
+     * @param aDevices, device list
+     * @return None
+     */
+    void GetMediaServersL( CUpnpAVDeviceList*& aDevices );
+    
+    /**
+     * Resets file arrays
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */    
+    void ResetFileArrays();
+       
+    /**
+     * Cancel UPnP copy operation
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */    
+    void CancelCopy();
+    
+    /**
+     * Copy files
+     *
+     * @since S60 5.1
+     * @param aDevId, device identifier
+     * @param aDevice, device
+     * @return None
+     */    
+    void CopyFilesL( TUint8 aDevId, CUpnpAVDevice* aDevice );
+    
+    /**
+     * Continue Copying files
+     *
+     * @since S60 5.1
+     * @return None
+     */    
+    void ContinueCopyFilesL();
+    
+    /**
+     * Transferred data
+     *
+     * @since S60 5.1
+     * @param None
+     * @return data amount
+     */      
+    TInt DataAmount() const;
+    
+    /**
+     * Returns file list
+     *
+     * @since S60 5.1
+     * @param None
+     * @return file array
+     */ 
+    CDesCArray& FilesToBeRemoved();
+
+    /**
+     * Delete file list
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */     
+    void DeleteToBeRemoved();
+    
+    /**
+     * Returns file list
+     *
+     * @since S60 5.1
+     * @param None
+     * @return file array
+     */     
+    CDesCArray& FilesToBeShrinked();
+    
+    /**
+     * Delete file list
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */    
+    void DeleteToBeShrinked();
+
+    /**
+     * Returns item ids which need to be deleted
+     *
+     * @since S60 5.1
+     * @param None
+     * @return Item ids
+     */     
+    RArray<TInt>& ToBeDeleted();    
+    
+    /**
+     * Cancel operation
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */
+    void CancelOperation();    
+
+protected:
+
+// From base class MUPnPFileTransferSessionObserver
+
+    /**
+     * From MUPnPFileTransferSessionObserver 
+     * See base class definition
+     */
+    void TransferStarted( TInt aKey, TInt aStatus );
+ 
+    /**
+     * From MUPnPFileTransferSessionObserver 
+     * See base class definition
+     */    
+    void TransferCompleted( TInt aKey, TInt aStatus,
+        const TDesC& aFilePath );
+    
+    /**
+     * From MUPnPFileTransferSessionObserver 
+     * See base class definition
+     */
+    void TransferProgress( TInt aKey, TInt aBytes,
+        TInt aTotalBytes );   
+
+    /**
+     * From MUPnPFileTransferSessionObserver 
+     * See base class definition
+     */
+    void MediaServerDisappeared(
+        TUPnPDeviceDisconnectedReason aReason );  
+            
+private:
+
+    /**
+     * Copying one file
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */
+    void CopySingleFileL();
+
+    /**
+     * Connects to device
+     *
+     * @since S60 5.1
+     * @param aDevice to be connected
+     * @return None
+     */    
+    void ConnectedToDeviceL( const CUpnpAVDevice& aDevice );
+    
+    /**
+     * Wait
+     *
+     * @since S60 5.1
+     * @param aDelay, delay in seconds
+     * @return None
+     */        
+    void WaitForProgress( TInt aDelay );
+    
+    /**
+     * Abort operation
+     *
+     * @since S60 5.1
+     * @param aError, error code
+     * @return None
+     */
+    void AbortTransfer( TInt aError );
+    
+    /**
+     * Adds stored item to database
+     *
+     * @since S60 5.1
+     * @param aFileName, name of the stored file
+     * @param aUDN, where file was stored
+     * @param aTimeStamp, time stamp for store
+     * @return None
+     */       
+    void AddStoredL( const TDesC& aFileName, const TDesC8& aUDN, 
+        TTime aTimeStamp );
+
+    /**
+     * Handles item status values
+     * @param aKey, database id of item
+     * @return  None
+     */        
+    void HandleItemStatusL( const TInt aKey );
+
+     /**
+     * Updates status
+     *
+     * @since S60 5.1
+     * @param aStatus, status to be set
+     * @param aFid, file id
+     * @param aMsId, media server id
+     * @return None
+     */    
+    void UpdateStoreTransferStatus( TUint aStatus, TInt64 aFid, 
+        TInt64 aMsId );
+        
+     /**
+     * Returns index to transferred items array
+     *
+     * @since S60 5.1
+     * @param aKey, database id
+     * @return index to item array
+     */  
+    TInt GetArrayIndex( TInt aKey );
+
+     /**
+     * Returns ETrue if file is already on server
+     *
+     * @since S60 5.1
+     * @param aIndex, index to iItems array
+     * @return ETrue if file is duplicate
+     */     
+    TBool IsDuplicateL( const TInt aIndex );
+
+    /**
+     * Handle to copying files once
+     *
+     * @since S60 3.2
+     * @param None
+     * @return None
+     */  
+    void CopyFilesOnceL();
+
+    /**
+     * Complete the copy process
+     *
+     * @since S60 3.2
+     * @param None
+     * @return None
+     */  
+    void FinishCopy();   
+
+    /**
+     * Performs the first phase of two phase construction.
+     *
+     * @since S60 5.1
+     * @param aObserver, transfer observer
+     * @param aDBMngr, database manager
+     * @param aItems, store items
+     * @param aItemIds, item ids
+     * @return None
+     */
+    CCmSmTransferEngine( MCmSmTransferObserver* aObserver, 
+        CCmDmMain* aDBMngr, RPointerArray<CCmStoreListItem>& aItems,
+        RArray<TInt>& aItemIds );
+
+    /**
+     * Performs the second phase construction.
+     */
+    void ConstructL();
+    
+
+private:
+
+    /**
+     * Pointer to AV Controller
+     */
+    MUPnPAVController* iAVController;               // not owned
+
+    /**
+     * Browse action Observer
+     */
+    MCmSmTransferObserver* iObserver;               // not owned
+    
+    /**
+     * Database manager
+     */
+    CCmDmMain* iDBManager;                          // not owned  
+    
+    /**
+     * File transfer started
+     */
+    TTime iTransferStarted;
+    
+    /**
+     * Device
+     */  
+    CUpnpAVDevice* iDevice;                         // not owned            
+
+    /**
+     * File Data amount in kbytes
+     */
+    TInt iTransferredData;
+    
+    /**
+     * Total transferred data amount in kbytes
+     */
+    TInt iTotalTransferredData;
+    
+    /**
+     * Items to store
+     */
+    RPointerArray<CCmStoreListItem>& iItems;
+    
+    /**
+     * Ids of the selected store items
+     */
+    RArray<TInt>& iItemIds;
+    
+    /**
+     * Item ids to be deleted
+     */
+    RArray<TInt> iToBeDeleted;                      // owned
+    
+    /**
+     * Index of the processed file
+     */
+    TInt iIndex;
+    
+    /**
+     * Index of the current mediaserver
+     */
+    TUint8 iDevId;
+    
+    /**
+     * File to be removed
+     */
+    CDesCArray* iFilesToBeRemoved;                  // owned
+
+    /**
+     * File to be shrinked
+     */
+    CDesCArray* iFilesToBeShrinked;                 // owned
+    
+    /**
+     * Database wrapper ( member variable because of performance issues )
+     */
+    MCmSqlMain* iDbWrapper; // owned
+    
+    /** Browse session */
+    MUPnPFileUploadSession* iUploadSession; // not owned
+    
+    /**
+     * Transfer queue
+     */    
+    RArray<TInt> iTransferQueue;    
+    
+    /**
+     * Copy status
+     */
+    TCmSmCopyStatus iCopyStatus;
+    
+    /**
+     * File server session
+     */
+    RFs iFSession;
+    
+    };
+
+#endif //  __CMSMTRANSFERENGINE_H