filebrowser/engine/FBFileUtils.h
branchRCL_3
changeset 21 b3cee849fa46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/engine/FBFileUtils.h	Tue Aug 31 15:15:20 2010 +0300
@@ -0,0 +1,405 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef FILEBROWSER_FILEUTILS_H
+#define FILEBROWSER_FILEUTILS_H
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+#include <w32std.h>
+#include <badesca.h>
+#include <coedef.h>
+#include <msvapi.h>
+#include <tz.h>
+#include "FB.hrh"
+
+_LIT(KIRAppPath, "z:\\sys\\bin\\irapp.exe");
+_LIT(KBTAppPath, "z:\\sys\\bin\\btui.exe");
+_LIT(KUSBAppPath, "z:\\sys\\bin\\usbclasschangeui.exe");
+_LIT(KErrRdPath, "c:\\resource\\ErrRd");
+_LIT(KErrRdDir, "c:\\resource\\");
+
+
+// FORWARD DECLARATIONS
+class CEngine;
+class CFileBrowserFileOps;
+class CDocumentHandler;
+class CEikProgressInfo;
+class CFBFileOpClient;
+class CEikProgressInfo;
+class CMessageDigest;
+
+// CLASS DECLARATIONS
+
+class TSearchAttributes
+	{
+public:
+    TFileName       iSearchDir;
+    TFileName       iWildCards;
+    TFileName       iTextInFile;
+    TUint           iMinSize;
+    TUint           iMaxSize;
+    TTime           iMinDate;
+    TTime           iMaxDate;
+    TBool           iRecurse;
+	};
+
+class TDriveEntry
+	{
+public:
+    TChar           iLetter;
+    TInt            iNumber;
+    TVolumeInfo     iVolumeInfo;
+    TBuf<64>        iMediaTypeDesc;
+    TBuf<128>       iAttributesDesc;
+    TInt            iIconId;
+	};
+
+class TFileEntry
+	{
+public:
+    TFileName       iFullName;	
+    TFileName       iPath;
+    TEntry          iEntry;
+    TInt            iDirEntries;
+    TInt            iIconId;
+	};
+
+class TAppIcon
+	{
+public:
+    TInt            iId;
+    TUid            iUid;
+	};
+
+typedef CArrayFixSeg<TDriveEntry> CDriveEntryList;
+typedef CArrayFixSeg<TFileEntry> CFileEntryList;
+typedef CArrayFixSeg<TAppIcon> CAppIconList;
+
+class TSearchResults
+    {
+public:
+    TInt iNumberOfFoundFiles;
+    //CFileEntryList iFoundFilesList;
+    };
+
+class TOverwriteOptions
+    {
+public:
+    TBool iDoFileOperations/*(ETrue)*/;
+    TInt iQueryIndex/*(0)*/;
+    TFileName iPostFix;
+    TInt iOverWriteFlags/* = CFileMan::EOverWrite*/;
+    };
+
+class CCommandParamsBase : public CBase
+    {
+    };
+
+class CCommandParamsAttribs : public CCommandParamsBase
+    {
+public:
+    TFileEntry iSourceEntry;
+    TUint iSetMask;
+    TUint iClearMask;
+    TTime iTime;
+    TUint iSwitch;
+public:
+    CCommandParamsAttribs(const TFileEntry& aSourceEntry, TUint aSetMask, TUint aClearMask, const TTime& aTime, TUint aSwitch) : iSourceEntry(aSourceEntry), iSetMask(aSetMask), iClearMask(aClearMask), iTime(aTime), iSwitch(aSwitch) {}
+    };
+    
+class CCommandParamsCopyOrMove : public CCommandParamsBase
+    {
+public:
+    TFileEntry iSourceEntry;
+    TFileName iTargetPath;
+    TUint iSwitch;
+public:
+    CCommandParamsCopyOrMove(const TFileEntry& aSourceEntry, const TDesC& aTargetPath, TUint aSwitch) : iSourceEntry(aSourceEntry), iTargetPath(aTargetPath), iSwitch(aSwitch) {}
+    };
+        
+class CCommandParamsRename : public CCommandParamsBase
+    {
+public:
+    TFileEntry iSourceEntry;
+    TFileName iTargetPath;
+    TUint iSwitch;
+public:
+    CCommandParamsRename(const TFileEntry& aSourceEntry, const TDesC& aTargetPath, TUint aSwitch) : iSourceEntry(aSourceEntry), iTargetPath(aTargetPath), iSwitch(aSwitch) {}
+    };
+
+class CCommandParamsDelete : public CCommandParamsBase
+    {
+public:
+    TFileEntry iSourceEntry;
+    TUint iSwitch;
+public:
+    CCommandParamsDelete(const TFileEntry& aSourceEntry, TUint aSwitch) : iSourceEntry(aSourceEntry), iSwitch(aSwitch) {}
+    };
+
+class CCommandParamsDriveSnapShot : public CCommandParamsBase
+    {
+public:
+    TInt iSourceDriveLetter;
+    TInt iTargetDriveLetter;
+public:
+    CCommandParamsDriveSnapShot(TChar aSourceDriveLetter, TChar aTargetDriveLetter) : iSourceDriveLetter(aSourceDriveLetter), iTargetDriveLetter(aTargetDriveLetter) {}
+    };
+    
+class TCommand
+    {
+public:
+    TInt iCommandId;
+    CCommandParamsBase* iParameters;
+public:
+    TCommand(TInt aCommandId, CCommandParamsBase* aParameters) : iCommandId(aCommandId), iParameters(aParameters) {}
+    };
+
+typedef CArrayFixSeg<TCommand> CCommandArray;
+
+
+
+class CFileBrowserFileUtils : public CActive, public MMsvSessionObserver
+	{
+private:
+    enum TState // active object states
+    	{
+    	EIdle = 0,              // do nothing
+    	};
+
+    enum TClipBoardMode
+    	{
+    	EClipBoardModeCut = 0,
+    	EClipBoardModeCopy
+    	};
+
+public:
+	static CFileBrowserFileUtils* NewL(CEngine* aEngine);
+	~CFileBrowserFileUtils();
+
+private:
+	CFileBrowserFileUtils(CEngine* aEngine);
+	void ConstructL();
+
+private: // from CActive
+	void RunL();
+        TInt RunError(TInt aError);
+	void DoCancel();
+
+private: // from MMsvSessionObserver
+    void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3);
+
+public:  //from MProgressDialogCallback
+    void DialogDismissedL(/*TInt aButtonId*/);
+    
+public: // command handling
+    void StartExecutingCommandsL(const TDesC& aLabel);
+private: // command handling
+    void ExecuteCommand();
+    void CheckForMoreCommandsL();
+    void AppendToCommandArrayL(TInt aCommand, CCommandParamsBase* aParameters);
+    TInt CommandArrayCount() const;
+    void ResetCommandArray();       
+
+private: // misc functionality
+    void GenerateDirectoryDataL();
+    void GetDriveListL();
+    void GetDirectoryListingL();
+//    CAknIconArray* GenerateIconArrayL(TBool aGenerateNewBasicIconArray=EFalse);
+//    void AppendGulIconToIconArrayL(CAknIconArray* aIconArray, const TDesC& aIconFile, TInt aIconId, TInt aMaskId, const TAknsItemID aAknsItemId);
+    TInt AppIconIdForUid(TUid aUid);
+    TUid GetAppUid(TFileEntry aFileEntry);
+//    CDesCArray* GenerateItemTextArrayL();
+//    TInt GetSelectedItemsOrCurrentItemL(CFileEntryList* aFileEntryList);
+    TInt SetSelectedItemsOrCurrentItemL(const CArrayFix<TInt>* selectionIndexes,
+                                        CFileEntryList* aFileEntryList);
+
+//    TBool IsDestinationEntriesExists(const CFileEntryList* aEntryList, const TDesC& aTargetDir);
+    void DoCopyToFolderL(CFileEntryList* aEntryList, const TDesC& aTargetDir, const TOverwriteOptions &aOverwriteOptions, TBool aDeleteSource);
+    TInt DoSearchFiles(const TDesC& aFileName, const TDesC& aPath);
+    TInt DoSearchFilesRecursiveL(const TDesC& aFileName, const TDesC& aPath);
+    TInt DoFindFiles(const TDesC& aFileName, const TDesC& aPath);
+    TInt DoFindFilesRecursiveL(const TDesC& aFileName, const TDesC& aPath);
+    void ReadAttachmentPathsRecursiveL(CMsvSession* aSession, CMsvEntry* aContext, CDesCArray* aAttPaths);
+    void WriteMessageEntryInfoRecursiveL(CMsvSession* aSession, CMsvEntry* aContext, RFile& aFile, TInt& aLevel);
+    void DoWriteMessageEntryInfoL(CMsvEntry* aContext, RFile& aFile, TInt aLevel);
+    void ConvertCharsToPwd(const TDesC& aWord, TDes8& aConverted) const;
+    HBufC8* MessageDigestInHexLC(CMessageDigest* aMD, RFile& aFile);
+    void OpenCommonFileActionQueryL(TInt aCurrentItemIndex);
+    
+public: // public interfaces
+    TKeyResponse HandleOfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+    void HandleSettingsChangeL();
+    void SetSortModeL(TInt aSortMode);
+    void SetOrderModeL(TInt aOrderMode);
+    void RefreshViewL();
+    TBool IsCurrentDriveReadOnly();
+    TBool IsItemDirectory(TInt aCurrentItemIndex);
+    void MoveUpOneLevelL();
+    void MoveDownToDirectoryL(TInt aIndex);
+    TInt ClipboardCutL(const CArrayFix<TInt>* aSelectionIndices);
+    TInt ClipboardCopyL(const CArrayFix<TInt>* aSelectionIndices);
+    void ClipboardPasteL(const TOverwriteOptions &aOverwriteOptions);
+    TInt SetCurrentSelection(const CArrayFix<TInt>* aSelectionIndices);
+    void CopyToFolderL(TFileName aTargetDir, const TOverwriteOptions &aOverwriteOptions, TBool aMove=EFalse);
+    void DeleteL();
+    TBool SelectionHasDirs();
+    void TouchL(TBool aRecurse);
+    void RenameL(const TInt aIndex, const TFileName &newName);
+    void SetAttributesL();
+    void SearchL();
+    void NewFileL(const TFileName &aNewFileName);
+    void NewDirectoryL(const TFileName &aNewDirectoryName);
+    void SendToL();
+    void CompressL();
+    void DecompressL();
+    bool PropertiesL(TInt currentItemIndex, CDesCArray* entryLines, TFileName &titleText);
+    void OpenWithApparcL(TFileName aFileName);
+    void OpenWithDocHandlerL(TFileName aFileName, TBool aEmbed);
+    void OpenWithFileServiceL(TInt aCurrentItemIndex);
+    TBool FileExists(const TDesC& aPath);
+    TInt LaunchProgramL(const TDesC& aPath);
+    void MemoryInfoPopupL();
+    void ShowFileCheckSumsL(TInt aCurrentItemIndex, TInt aType);
+    void SetErrRdL(TBool aEnable);
+//    void EnableAvkonIconCacheL(TBool aEnable);
+    void SimulateLeaveL(TInt aLeaveCode);
+    void SimulatePanicL(const TDesC& aPanicCategory, TInt aPanicCode);
+    void SimulateExceptionL(TInt aExceptionCode);
+    TUint32 GetDebugMask();
+    void SetDebugMaskL(TUint32 aDbgMask);
+    void WriteAllAppsL();
+    void WriteAllFilesL();
+    void ListOpenFilesL();
+    void ListMessageAttachmentsL(TInt aType);
+    void WriteMsgStoreWalkL();
+    void FileEditorL(TInt aCurrentItemIndex, TInt aType);
+    void SetDrivePasswordL(TInt aIndex, const TFileName &aOldPassword, const TFileName &aNewPassword);
+    void UnlockDriveL(TInt aIndex, const TFileName &aOldPassword);
+    void ClearDrivePasswordL(TInt aIndex, const TFileName &aOldPassword);
+    void EraseDrivePasswordL(TInt aIndex);
+    void FormatDriveL(TInt aIndex, TBool aQuickFormat);
+    void CheckDiskL(TInt aIndex);
+    void ScanDriveL(TInt aIndex);
+    void SetDriveNameL(TInt aIndex, const TFileName &aDriveName);
+    void SetDriveVolumeLabelL(TInt aIndex, const TFileName &aVolumeLabel);
+    void EjectDriveL(TInt aIndex);
+    void DismountFileSystemL(TInt aIndex);
+    void EraseMBRL(TInt aIndex);
+    void PartitionDriveL(TInt aIndex, TBool aEraseMBR, TInt aAmountOfPartitions);
+    TBool DriveSnapShotPossible();
+    void DriveSnapShotL();
+    void EditDataTypesL();
+    void SecureBackupL(TInt aType);
+
+    TBool IsDestinationEntriesExists(const TDesC& aTargetDir);
+    TBool TargetExists(const TInt aIndex, const TFileName &newName);
+    void GetDriveName(TInt aIndex, TFileName &aDriveName);
+    void GetDriveVolumeLabel(TInt aIndex, TFileName &aVolumeLabel);
+
+    CFileEntryList* FileEntries() const;
+    CDriveEntryList* DriveEntries() const;
+    
+public:    
+    inline TInt SortMode() { return iSortMode; }
+    inline TInt OrderMode() { return iOrderMode; }
+    inline CFileEntryList* ClipBoardList() { return iClipBoardList; }
+    inline CFileEntryList* CurrentSelectionList() { return iCurrentSelectionList; }
+    inline TBool IsDriveListViewActive() { return iCurrentPath==KNullDesC && iListingMode==ENormalEntries; }
+    inline TBool IsNormalModeActive() { return iListingMode==ENormalEntries; }
+    inline TListingMode ListingMode() { return iListingMode; }
+    inline TFileName CurrentPath() { return iCurrentPath; }
+	
+    inline TSearchAttributes GetSearchAttributes(){ return iSearchAttributes; };
+    inline void ChangeAttributes(TSearchAttributes attributes) { iSearchAttributes = attributes; };
+    inline TSearchResults SearchResults(){ return iFileSearchResults; };
+    inline CFileEntryList* FoundFiles() { return iFileEntryList; };    
+    inline void SetAllowProcessing(TBool aAllowProcessing) { iAllowProcessing = aAllowProcessing; }
+	
+private:
+    TState                          iState;
+    CEngine*                        iEngine;
+    CFileBrowserFileOps*            iFileOps;
+
+    TBool                           isWaitDialog;
+    TBool                           isProgressDialog;
+
+    CEikProgressInfo*               iProgressInfo;
+    CCommandArray*                  iCommandArray;
+    TInt                            iCurrentEntry;
+    TInt                            iSucceededOperations;
+    TInt                            iFailedOperations;
+    TInt                            iLastError;
+    RTimer                          iTimer;
+    RFs                             iFs;
+    TListingMode                    iListingMode;
+    CFileMan*                       iFileMan;
+    TInt                            iViewMode;
+    TFileName                       iCurrentPath;
+    TInt                            iSortMode;
+    TInt                            iOrderMode;
+    TInt                            iClipboardMode;
+    CDesCArray*                     iClipboardPaths;
+    CDriveEntryList*                iDriveEntryList;
+    CFileEntryList*                 iFileEntryList;
+    CFileEntryList*                 iFindFileEntryList;
+    CAppIconList*                   iAppIconList;
+    TClipBoardMode                  iClipBoardMode;
+    CFileEntryList*                 iClipBoardList;
+    CFileEntryList*                 iCurrentSelectionList;
+    TSearchAttributes               iSearchAttributes;
+    CDocumentHandler*               iDocHandler;
+
+    RFile                           iMsgStoreWalkFile;
+    TInt                            iPrevFolderIndex;
+    TFileName                       iPrevFolderName;
+    RTz                             iTz;
+    TSearchResults                  iFileSearchResults;
+    CDesCArray*                     iTextArray;
+    TBool                           iAllowProcessing;
+    };
+
+
+// utility class for waiting for asychronous requests
+class CAsyncWaiter : public CActive
+	{
+public:
+	static CAsyncWaiter* NewL( TInt aPriority = EPriorityStandard );
+	static CAsyncWaiter* NewLC( TInt aPriority = EPriorityStandard );
+	~CAsyncWaiter();
+	
+	void StartAndWait();
+	TInt Result() const;
+	
+private:
+	CAsyncWaiter( TInt aPriority );
+	
+	// from CActive
+	void RunL();
+	void DoCancel();
+	
+private:
+    CActiveSchedulerWait iWait;
+	TInt iError;
+	};
+	
+	
+#endif
+
+// End of File
+