1*f6dc9357SAndroid Build Coastguard Worker // FSFolder.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_FS_FOLDER_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_FS_FOLDER_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyCom.h" 7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyBuffer.h" 8*f6dc9357SAndroid Build Coastguard Worker 9*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/FileFind.h" 10*f6dc9357SAndroid Build Coastguard Worker 11*f6dc9357SAndroid Build Coastguard Worker #include "../../Archive/IArchive.h" 12*f6dc9357SAndroid Build Coastguard Worker 13*f6dc9357SAndroid Build Coastguard Worker #include "IFolder.h" 14*f6dc9357SAndroid Build Coastguard Worker #include "TextPairs.h" 15*f6dc9357SAndroid Build Coastguard Worker 16*f6dc9357SAndroid Build Coastguard Worker namespace NFsFolder { 17*f6dc9357SAndroid Build Coastguard Worker 18*f6dc9357SAndroid Build Coastguard Worker class CFSFolder; 19*f6dc9357SAndroid Build Coastguard Worker 20*f6dc9357SAndroid Build Coastguard Worker #define FS_SHOW_LINKS_INFO 21*f6dc9357SAndroid Build Coastguard Worker // #define FS_SHOW_CHANGE_TIME 22*f6dc9357SAndroid Build Coastguard Worker 23*f6dc9357SAndroid Build Coastguard Worker struct CDirItem: public NWindows::NFile::NFind::CFileInfo 24*f6dc9357SAndroid Build Coastguard Worker { 25*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE 26*f6dc9357SAndroid Build Coastguard Worker UInt64 PackSize; 27*f6dc9357SAndroid Build Coastguard Worker #endif 28*f6dc9357SAndroid Build Coastguard Worker 29*f6dc9357SAndroid Build Coastguard Worker #ifdef FS_SHOW_LINKS_INFO 30*f6dc9357SAndroid Build Coastguard Worker FILETIME ChangeTime; 31*f6dc9357SAndroid Build Coastguard Worker UInt64 FileIndex; 32*f6dc9357SAndroid Build Coastguard Worker UInt32 NumLinks; 33*f6dc9357SAndroid Build Coastguard Worker bool FileInfo_Defined; 34*f6dc9357SAndroid Build Coastguard Worker bool FileInfo_WasRequested; 35*f6dc9357SAndroid Build Coastguard Worker bool ChangeTime_Defined; 36*f6dc9357SAndroid Build Coastguard Worker bool ChangeTime_WasRequested; 37*f6dc9357SAndroid Build Coastguard Worker #endif 38*f6dc9357SAndroid Build Coastguard Worker 39*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE 40*f6dc9357SAndroid Build Coastguard Worker bool PackSize_Defined; 41*f6dc9357SAndroid Build Coastguard Worker #endif 42*f6dc9357SAndroid Build Coastguard Worker 43*f6dc9357SAndroid Build Coastguard Worker bool FolderStat_Defined; 44*f6dc9357SAndroid Build Coastguard Worker int Parent; 45*f6dc9357SAndroid Build Coastguard Worker 46*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE 47*f6dc9357SAndroid Build Coastguard Worker CByteBuffer Reparse; 48*f6dc9357SAndroid Build Coastguard Worker #endif 49*f6dc9357SAndroid Build Coastguard Worker 50*f6dc9357SAndroid Build Coastguard Worker UInt64 NumFolders; 51*f6dc9357SAndroid Build Coastguard Worker UInt64 NumFiles; 52*f6dc9357SAndroid Build Coastguard Worker }; 53*f6dc9357SAndroid Build Coastguard Worker 54*f6dc9357SAndroid Build Coastguard Worker /* 55*f6dc9357SAndroid Build Coastguard Worker struct CAltStream 56*f6dc9357SAndroid Build Coastguard Worker { 57*f6dc9357SAndroid Build Coastguard Worker UInt64 Size; 58*f6dc9357SAndroid Build Coastguard Worker UInt64 PackSize; 59*f6dc9357SAndroid Build Coastguard Worker bool PackSize_Defined; 60*f6dc9357SAndroid Build Coastguard Worker int Parent; 61*f6dc9357SAndroid Build Coastguard Worker UString Name; 62*f6dc9357SAndroid Build Coastguard Worker }; 63*f6dc9357SAndroid Build Coastguard Worker */ 64*f6dc9357SAndroid Build Coastguard Worker 65*f6dc9357SAndroid Build Coastguard Worker struct CFsFolderStat 66*f6dc9357SAndroid Build Coastguard Worker { 67*f6dc9357SAndroid Build Coastguard Worker UInt64 NumFolders; 68*f6dc9357SAndroid Build Coastguard Worker UInt64 NumFiles; 69*f6dc9357SAndroid Build Coastguard Worker UInt64 Size; 70*f6dc9357SAndroid Build Coastguard Worker IProgress *Progress; 71*f6dc9357SAndroid Build Coastguard Worker FString Path; 72*f6dc9357SAndroid Build Coastguard Worker CFsFolderStatCFsFolderStat73*f6dc9357SAndroid Build Coastguard Worker CFsFolderStat(): NumFolders(0), NumFiles(0), Size(0), Progress(NULL) {} 74*f6dc9357SAndroid Build Coastguard Worker CFsFolderStat(const FString &path, IProgress *progress = NULL): 75*f6dc9357SAndroid Build Coastguard Worker NumFolders(0), NumFiles(0), Size(0), Progress(progress), Path(path) {} 76*f6dc9357SAndroid Build Coastguard Worker 77*f6dc9357SAndroid Build Coastguard Worker HRESULT Enumerate(); 78*f6dc9357SAndroid Build Coastguard Worker }; 79*f6dc9357SAndroid Build Coastguard Worker 80*f6dc9357SAndroid Build Coastguard Worker class CFSFolder Z7_final: 81*f6dc9357SAndroid Build Coastguard Worker public IFolderFolder, 82*f6dc9357SAndroid Build Coastguard Worker public IArchiveGetRawProps, 83*f6dc9357SAndroid Build Coastguard Worker public IFolderCompare, 84*f6dc9357SAndroid Build Coastguard Worker #ifdef USE_UNICODE_FSTRING 85*f6dc9357SAndroid Build Coastguard Worker public IFolderGetItemName, 86*f6dc9357SAndroid Build Coastguard Worker #endif 87*f6dc9357SAndroid Build Coastguard Worker public IFolderWasChanged, 88*f6dc9357SAndroid Build Coastguard Worker public IFolderOperations, 89*f6dc9357SAndroid Build Coastguard Worker // public IFolderOperationsDeleteToRecycleBin, 90*f6dc9357SAndroid Build Coastguard Worker public IFolderCalcItemFullSize, 91*f6dc9357SAndroid Build Coastguard Worker public IFolderClone, 92*f6dc9357SAndroid Build Coastguard Worker public IFolderGetSystemIconIndex, 93*f6dc9357SAndroid Build Coastguard Worker public IFolderSetFlatMode, 94*f6dc9357SAndroid Build Coastguard Worker // public IFolderSetShowNtfsStreamsMode, 95*f6dc9357SAndroid Build Coastguard Worker public CMyUnknownImp 96*f6dc9357SAndroid Build Coastguard Worker { 97*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_BEGIN2(IFolderFolder) 98*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IArchiveGetRawProps) 99*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderCompare) 100*f6dc9357SAndroid Build Coastguard Worker #ifdef USE_UNICODE_FSTRING 101*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderGetItemName) 102*f6dc9357SAndroid Build Coastguard Worker #endif 103*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderWasChanged) 104*f6dc9357SAndroid Build Coastguard Worker // Z7_COM_QI_ENTRY(IFolderOperationsDeleteToRecycleBin) 105*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderOperations) 106*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderCalcItemFullSize) 107*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderClone) 108*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderGetSystemIconIndex) 109*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderSetFlatMode) 110*f6dc9357SAndroid Build Coastguard Worker // Z7_COM_QI_ENTRY(IFolderSetShowNtfsStreamsMode) 111*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_END 112*f6dc9357SAndroid Build Coastguard Worker Z7_COM_ADDREF_RELEASE 113*f6dc9357SAndroid Build Coastguard Worker 114*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderFolder) 115*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IArchiveGetRawProps) 116*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderCompare) 117*f6dc9357SAndroid Build Coastguard Worker #ifdef USE_UNICODE_FSTRING 118*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderGetItemName) 119*f6dc9357SAndroid Build Coastguard Worker #endif 120*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderWasChanged) 121*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderOperations) 122*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderCalcItemFullSize) 123*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderClone) 124*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderGetSystemIconIndex) 125*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderSetFlatMode) 126*f6dc9357SAndroid Build Coastguard Worker // Z7_IFACE_COM7_IMP(IFolderSetShowNtfsStreamsMode) 127*f6dc9357SAndroid Build Coastguard Worker 128*f6dc9357SAndroid Build Coastguard Worker bool _flatMode; 129*f6dc9357SAndroid Build Coastguard Worker bool _commentsAreLoaded; 130*f6dc9357SAndroid Build Coastguard Worker // bool _scanAltStreams; 131*f6dc9357SAndroid Build Coastguard Worker 132*f6dc9357SAndroid Build Coastguard Worker FString _path; 133*f6dc9357SAndroid Build Coastguard Worker CObjectVector<CDirItem> Files; 134*f6dc9357SAndroid Build Coastguard Worker FStringVector Folders; 135*f6dc9357SAndroid Build Coastguard Worker // CObjectVector<CAltStream> Streams; 136*f6dc9357SAndroid Build Coastguard Worker // CMyComPtr<IFolderFolder> _parentFolder; 137*f6dc9357SAndroid Build Coastguard Worker 138*f6dc9357SAndroid Build Coastguard Worker CPairsStorage _comments; 139*f6dc9357SAndroid Build Coastguard Worker 140*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN32 141*f6dc9357SAndroid Build Coastguard Worker NWindows::NFile::NFind::CFindChangeNotification _findChangeNotification; 142*f6dc9357SAndroid Build Coastguard Worker #endif 143*f6dc9357SAndroid Build Coastguard Worker 144*f6dc9357SAndroid Build Coastguard Worker // HRESULT GetItemFullSize(unsigned index, UInt64 &size, IProgress *progress); 145*f6dc9357SAndroid Build Coastguard Worker void GetAbsPath(const wchar_t *name, FString &absPath); 146*f6dc9357SAndroid Build Coastguard Worker HRESULT BindToFolderSpec(CFSTR name, IFolderFolder **resultFolder); 147*f6dc9357SAndroid Build Coastguard Worker 148*f6dc9357SAndroid Build Coastguard Worker bool LoadComments(); 149*f6dc9357SAndroid Build Coastguard Worker bool SaveComments(); 150*f6dc9357SAndroid Build Coastguard Worker HRESULT LoadSubItems(int dirItem, const FString &path); 151*f6dc9357SAndroid Build Coastguard Worker 152*f6dc9357SAndroid Build Coastguard Worker #ifdef FS_SHOW_LINKS_INFO 153*f6dc9357SAndroid Build Coastguard Worker bool ReadFileInfo(CDirItem &di); 154*f6dc9357SAndroid Build Coastguard Worker void ReadChangeTime(CDirItem &di); 155*f6dc9357SAndroid Build Coastguard Worker #endif 156*f6dc9357SAndroid Build Coastguard Worker 157*f6dc9357SAndroid Build Coastguard Worker public: 158*f6dc9357SAndroid Build Coastguard Worker HRESULT Init(const FString &path /* , IFolderFolder *parentFolder */); 159*f6dc9357SAndroid Build Coastguard Worker #if !defined(_WIN32) || defined(UNDER_CE) InitToRoot()160*f6dc9357SAndroid Build Coastguard Worker HRESULT InitToRoot() { return Init((FString) FSTRING_PATH_SEPARATOR /* , NULL */); } 161*f6dc9357SAndroid Build Coastguard Worker #endif 162*f6dc9357SAndroid Build Coastguard Worker CFSFolder()163*f6dc9357SAndroid Build Coastguard Worker CFSFolder(): 164*f6dc9357SAndroid Build Coastguard Worker _flatMode(false), 165*f6dc9357SAndroid Build Coastguard Worker _commentsAreLoaded(false) 166*f6dc9357SAndroid Build Coastguard Worker // , _scanAltStreams(false) 167*f6dc9357SAndroid Build Coastguard Worker {} 168*f6dc9357SAndroid Build Coastguard Worker GetFullPath(const CDirItem & item,FString & path)169*f6dc9357SAndroid Build Coastguard Worker void GetFullPath(const CDirItem &item, FString &path) const 170*f6dc9357SAndroid Build Coastguard Worker { 171*f6dc9357SAndroid Build Coastguard Worker // FString prefix; 172*f6dc9357SAndroid Build Coastguard Worker // GetPrefix(item, prefix); 173*f6dc9357SAndroid Build Coastguard Worker path = _path; 174*f6dc9357SAndroid Build Coastguard Worker if (item.Parent >= 0) 175*f6dc9357SAndroid Build Coastguard Worker path += Folders[item.Parent]; 176*f6dc9357SAndroid Build Coastguard Worker path += item.Name; 177*f6dc9357SAndroid Build Coastguard Worker } 178*f6dc9357SAndroid Build Coastguard Worker 179*f6dc9357SAndroid Build Coastguard Worker // void GetPrefix(const CDirItem &item, FString &prefix) const; 180*f6dc9357SAndroid Build Coastguard Worker 181*f6dc9357SAndroid Build Coastguard Worker FString GetRelPath(const CDirItem &item) const; 182*f6dc9357SAndroid Build Coastguard Worker Clear()183*f6dc9357SAndroid Build Coastguard Worker void Clear() 184*f6dc9357SAndroid Build Coastguard Worker { 185*f6dc9357SAndroid Build Coastguard Worker Files.Clear(); 186*f6dc9357SAndroid Build Coastguard Worker Folders.Clear(); 187*f6dc9357SAndroid Build Coastguard Worker // Streams.Clear(); 188*f6dc9357SAndroid Build Coastguard Worker } 189*f6dc9357SAndroid Build Coastguard Worker }; 190*f6dc9357SAndroid Build Coastguard Worker 191*f6dc9357SAndroid Build Coastguard Worker struct CCopyStateIO 192*f6dc9357SAndroid Build Coastguard Worker { 193*f6dc9357SAndroid Build Coastguard Worker IProgress *Progress; 194*f6dc9357SAndroid Build Coastguard Worker UInt64 TotalSize; 195*f6dc9357SAndroid Build Coastguard Worker UInt64 StartPos; 196*f6dc9357SAndroid Build Coastguard Worker UInt64 CurrentSize; 197*f6dc9357SAndroid Build Coastguard Worker bool DeleteSrcFile; 198*f6dc9357SAndroid Build Coastguard Worker 199*f6dc9357SAndroid Build Coastguard Worker int ErrorFileIndex; 200*f6dc9357SAndroid Build Coastguard Worker UString ErrorMessage; 201*f6dc9357SAndroid Build Coastguard Worker CCopyStateIOCCopyStateIO202*f6dc9357SAndroid Build Coastguard Worker CCopyStateIO(): TotalSize(0), StartPos(0), DeleteSrcFile(false) {} 203*f6dc9357SAndroid Build Coastguard Worker 204*f6dc9357SAndroid Build Coastguard Worker HRESULT MyCopyFile(CFSTR inPath, CFSTR outPath, DWORD attrib = INVALID_FILE_ATTRIBUTES); 205*f6dc9357SAndroid Build Coastguard Worker }; 206*f6dc9357SAndroid Build Coastguard Worker 207*f6dc9357SAndroid Build Coastguard Worker HRESULT SendLastErrorMessage(IFolderOperationsExtractCallback *callback, const FString &fileName); 208*f6dc9357SAndroid Build Coastguard Worker 209*f6dc9357SAndroid Build Coastguard Worker /* destDirPrefix is allowed to be: 210*f6dc9357SAndroid Build Coastguard Worker "full_path\" or "full_path:" for alt streams */ 211*f6dc9357SAndroid Build Coastguard Worker 212*f6dc9357SAndroid Build Coastguard Worker HRESULT CopyFileSystemItems( 213*f6dc9357SAndroid Build Coastguard Worker const UStringVector &itemsPaths, 214*f6dc9357SAndroid Build Coastguard Worker const FString &destDirPrefix, 215*f6dc9357SAndroid Build Coastguard Worker bool moveMode, 216*f6dc9357SAndroid Build Coastguard Worker IFolderOperationsExtractCallback *callback); 217*f6dc9357SAndroid Build Coastguard Worker 218*f6dc9357SAndroid Build Coastguard Worker } 219*f6dc9357SAndroid Build Coastguard Worker 220*f6dc9357SAndroid Build Coastguard Worker #endif 221