homesync/contentmanager/cmserver/cmstoremanager/inc/cmsmtransferengine.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:00 +0200
changeset 0 7f85d04be362
permissions -rw-r--r--
Revision: 200947 Kit: 200951

/*
* 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