diff -r 95243422089a -r 491b3ed49290 filemanager/Engine/inc/CFileManagerActiveExecute.h --- a/filemanager/Engine/inc/CFileManagerActiveExecute.h Thu Aug 19 09:42:45 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,284 +0,0 @@ -/* -* Copyright (c) 2002-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: Handles the copy/move operation -* -*/ - - - -#ifndef CFILEMANAGERACTIVEEXECUTE_H -#define CFILEMANAGERACTIVEEXECUTE_H - -// INCLUDES -#include -#include -#include -#include "FileManagerEngine.hrh" -#include "MFileManagerProcessObserver.h" -#include "MFileManagerThreadFunction.h" - -// FORWARD DECLARATIONS -class CFileManagerEngine; -class MFileManagerItemIterator; -//class CMGXFileManager; -class CFileManagerThreadWrapper; - -/** -* CFileManagerActiveExecute -* -* Handles the copy and move operations. -* -* @lib FileManagerEngine.lib -* @since 2.0 -*/ -NONSHARABLE_CLASS(CFileManagerActiveExecute) : public CActive, - public MFileManagerThreadFunction - - { - - public: - - /** - * Overwrite file switch - */ - enum TFileManagerSwitch - { - ENoOverWrite = 1, - EOverWrite - }; - - /** - * Two-phased constructor. - * @since 2.0 - * @param aEngine reference to CFileManagerEngine instance - * @param aOperation defines type of operation copy or move - * @param aObserver reference to MFileManagerProcess implemented - * instance - * @param aIndexList list of indexes from current view which needs operation - * @param aToFolder folder where items are moved or copied - * @return Newly constructed CFileManagerActiveExecute - */ - IMPORT_C static CFileManagerActiveExecute* NewL( - CFileManagerEngine& aEngine, - MFileManagerProcessObserver::TFileManagerProcess aOperation, - MFileManagerProcessObserver& aObserver, - CArrayFixFlat& aIndexList, - const TDesC& aToFolder ); - - /** - * Destructor - */ - IMPORT_C ~CFileManagerActiveExecute(); - - /** - * Executes one operation at time, one file copy/move or directory creation - * @since 2.0 - * @param aOverWrite Over write the file or not - */ - IMPORT_C void ExecuteL( TFileManagerSwitch aOverWrite ); - - /** - * Cancel the operation - * @since 2.0 - */ - IMPORT_C void CancelExecution(); - - /** - * Gets destination folder - * @since 3.2 - */ - IMPORT_C TPtrC ToFolder(); - - private: - - // From CActive - void DoCancel(); - void RunL(); - TInt RunError(TInt aError); - - private: - /** - * C++ default constructor. - */ - CFileManagerActiveExecute( CFileManagerEngine& aEngine, - MFileManagerProcessObserver::TFileManagerProcess aOperation, - MFileManagerProcessObserver& aObserver ); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL( CArrayFixFlat& aIndexList, - const TDesC& aToFolder ); - - private: - - /** - * Item operation was succesfully carried on, move to next item - */ - void KErrNoneActionL(); - - /** - * Item operation was not succesful because there was target item already - * This function deals that situation - */ - void KErrAlreadyExistsActionL(); - - /** - * Takes last folder name on other string and appends it to other - * @param aResult Stores the result as full path - * @param aSrc source full path which last folder name is taken - * @param aDst target path where source last path is appended - */ - void AddLastFolder( TDes& aResult, const TDesC& aSrc, const TDesC& aDst ); - - /** - * Performs a copy or move operation - * - * @param aSwitch indicate destination file to be overwritten or not - * @return system wide error code - */ - TInt DoOperation( TInt aSwitch ); - - /** - * Checks if directory is empty - * - * @param aDir Full path of the directory - * @return ETrue if directory is empty, otherwise EFalse - */ - TBool IsEmptyDir( const TDesC& aDir ); - - /** - * Completes operation - * - * @param aError Operation result - */ - void CompleteL( TInt aError ); - - /** - * Updates MG2 notifications - * - * @param aForceFlush Indicates if notications are flushed - * @param aError Indicates the result - */ - void UpdateNotifications( TBool aFlush, TInt aError ); - - static void AppendArrayIfNotFound( - CDesCArray& aArray, const TDesC& aFullPath ); - - void FlushArray( CDesCArray& aArray ); - - void ThreadCopyOrMoveStepL(); - - void ThreadFinalizeMoveStepL(); - - private: // From MFileManagerThreadFunction - - void ThreadStepL(); - - TBool IsThreadDone(); - - void NotifyThreadClientL( TNotifyType aType, TInt aValue ); - - private: - - // index to current CDir array - TInt iCurrentIndex; - - // Own: Source item with full path - HBufC* iFullPath; - - // Own: Destination item with full path - HBufC* iDestination; - - // Has user cancelled the operation - TBool iCancelled; - - // Source directory is empty so special operations are needed - TBool iEmptyDir; - - // Needed to get the item locations behind given index(es) - CFileManagerEngine& iEngine; - - // Ref: Shareable file server session - RFs& iFs; - - // Move or copy operation - MFileManagerProcessObserver::TFileManagerProcess iOperation; - - // Own: Array of user selected items to be copied/moved - CArrayFixFlat< TInt >* iIndexList; - - // Own: user given destination folder - HBufC* iToFolder; - - // Own: This is either CFileManagerIndexIterator or CFileManagerFileSystemIterator - // depending of source item type, file or folder - MFileManagerItemIterator* iItemIterator; - - // Ref: File operation phases are signaled through this interface - MFileManagerProcessObserver& iObserver; - - // Ref: Current source item with full path - // Needed for file already exist situations. - HBufC* iSrc; - - // Ref: Current destination item with full path - // Needed for file already exist situations. - HBufC* iDst; - - // Total transferred bytes, used for progress note - // except in same drive move operation - TUint iBytesTransferredTotal; - - // Total transferred files, used for progress note - // This is used if move operation is done inside drive - TInt iFilesTransferredTotal; - - // Current error - TInt iError; - - // Ref: MG2 update notification object - //CMGXFileManager* iMgxFileManager; - - // Own: Thread wrapper for the operation - CFileManagerThreadWrapper* iThreadWrapper; - - // Indicates the used operation switches - TInt iSwitch; - - // Own: Buffer for storing changed items for MG2 notifications - CDesCArray* iChangedSrcItems; - - // Own: Buffer for storing changed items for MG2 notifications - CDesCArray* iChangedDstItems; - - // Indicates that the operation is done inside same drive - TBool iOperationOnSameDrive; - - // Indicates that move operation is finalizing - TBool iFinalizeMove; - - // Indicates that source of the operation is on remote drive - TBool iIsSrcRemoteDrive; - - // Indicates that destination of the operation is on remote drive - TBool iIsDstRemoteDrive; - - // Stores type of the current item - TFileManagerTypeOfItem iItemType; - }; - -#endif // CFILEMANAGERACTIVEEXECUTE_H - - // End of File