1*f6dc9357SAndroid Build Coastguard Worker // ExtractCallback.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_EXTRACT_CALLBACK_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_EXTRACT_CALLBACK_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../../../C/Alloc.h" 7*f6dc9357SAndroid Build Coastguard Worker 8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyCom.h" 9*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/StringConvert.h" 10*f6dc9357SAndroid Build Coastguard Worker 11*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 12*f6dc9357SAndroid Build Coastguard Worker #include "../Agent/IFolderArchive.h" 13*f6dc9357SAndroid Build Coastguard Worker #endif 14*f6dc9357SAndroid Build Coastguard Worker 15*f6dc9357SAndroid Build Coastguard Worker #include "../Common/ArchiveExtractCallback.h" 16*f6dc9357SAndroid Build Coastguard Worker #include "../Common/ArchiveOpenCallback.h" 17*f6dc9357SAndroid Build Coastguard Worker 18*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO 19*f6dc9357SAndroid Build Coastguard Worker #include "../../IPassword.h" 20*f6dc9357SAndroid Build Coastguard Worker #endif 21*f6dc9357SAndroid Build Coastguard Worker 22*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 23*f6dc9357SAndroid Build Coastguard Worker #include "IFolder.h" 24*f6dc9357SAndroid Build Coastguard Worker #endif 25*f6dc9357SAndroid Build Coastguard Worker 26*f6dc9357SAndroid Build Coastguard Worker #include "ProgressDialog2.h" 27*f6dc9357SAndroid Build Coastguard Worker 28*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 29*f6dc9357SAndroid Build Coastguard Worker 30*f6dc9357SAndroid Build Coastguard Worker class CGrowBuf 31*f6dc9357SAndroid Build Coastguard Worker { 32*f6dc9357SAndroid Build Coastguard Worker Byte *_items; 33*f6dc9357SAndroid Build Coastguard Worker size_t _size; 34*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_NO_COPY(CGrowBuf)35*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_NO_COPY(CGrowBuf) 36*f6dc9357SAndroid Build Coastguard Worker 37*f6dc9357SAndroid Build Coastguard Worker public: 38*f6dc9357SAndroid Build Coastguard Worker void Free() 39*f6dc9357SAndroid Build Coastguard Worker { 40*f6dc9357SAndroid Build Coastguard Worker MyFree(_items); 41*f6dc9357SAndroid Build Coastguard Worker _items = NULL; 42*f6dc9357SAndroid Build Coastguard Worker _size = 0; 43*f6dc9357SAndroid Build Coastguard Worker } 44*f6dc9357SAndroid Build Coastguard Worker 45*f6dc9357SAndroid Build Coastguard Worker // newSize >= keepSize ReAlloc_KeepData(size_t newSize,size_t keepSize)46*f6dc9357SAndroid Build Coastguard Worker bool ReAlloc_KeepData(size_t newSize, size_t keepSize) 47*f6dc9357SAndroid Build Coastguard Worker { 48*f6dc9357SAndroid Build Coastguard Worker void *buf = NULL; 49*f6dc9357SAndroid Build Coastguard Worker if (newSize) 50*f6dc9357SAndroid Build Coastguard Worker { 51*f6dc9357SAndroid Build Coastguard Worker buf = MyAlloc(newSize); 52*f6dc9357SAndroid Build Coastguard Worker if (!buf) 53*f6dc9357SAndroid Build Coastguard Worker return false; 54*f6dc9357SAndroid Build Coastguard Worker } 55*f6dc9357SAndroid Build Coastguard Worker if (keepSize) 56*f6dc9357SAndroid Build Coastguard Worker memcpy(buf, _items, keepSize); 57*f6dc9357SAndroid Build Coastguard Worker MyFree(_items); 58*f6dc9357SAndroid Build Coastguard Worker _items = (Byte *)buf; 59*f6dc9357SAndroid Build Coastguard Worker _size = newSize; 60*f6dc9357SAndroid Build Coastguard Worker return true; 61*f6dc9357SAndroid Build Coastguard Worker } 62*f6dc9357SAndroid Build Coastguard Worker CGrowBuf()63*f6dc9357SAndroid Build Coastguard Worker CGrowBuf(): _items(NULL), _size(0) {} ~CGrowBuf()64*f6dc9357SAndroid Build Coastguard Worker ~CGrowBuf() { MyFree(_items); } 65*f6dc9357SAndroid Build Coastguard Worker 66*f6dc9357SAndroid Build Coastguard Worker operator Byte *() { return _items; } 67*f6dc9357SAndroid Build Coastguard Worker operator const Byte *() const { return _items; } Size()68*f6dc9357SAndroid Build Coastguard Worker size_t Size() const { return _size; } 69*f6dc9357SAndroid Build Coastguard Worker }; 70*f6dc9357SAndroid Build Coastguard Worker 71*f6dc9357SAndroid Build Coastguard Worker 72*f6dc9357SAndroid Build Coastguard Worker struct CVirtFile 73*f6dc9357SAndroid Build Coastguard Worker { 74*f6dc9357SAndroid Build Coastguard Worker CGrowBuf Data; 75*f6dc9357SAndroid Build Coastguard Worker 76*f6dc9357SAndroid Build Coastguard Worker UInt64 ExpectedSize; // size from props request. 0 if unknown 77*f6dc9357SAndroid Build Coastguard Worker size_t WrittenSize; // size of written data in (Data) buffer 78*f6dc9357SAndroid Build Coastguard Worker // use (WrittenSize) only if (CVirtFileSystem::_newVirtFileStream_IsReadyToWrite == false) 79*f6dc9357SAndroid Build Coastguard Worker UString BaseName; // original name of file inside archive, 80*f6dc9357SAndroid Build Coastguard Worker // It's not path. So any path separators 81*f6dc9357SAndroid Build Coastguard Worker // should be treated as part of name (or as incorrect chars) 82*f6dc9357SAndroid Build Coastguard Worker UString AltStreamName; 83*f6dc9357SAndroid Build Coastguard Worker 84*f6dc9357SAndroid Build Coastguard Worker bool CTime_Defined; 85*f6dc9357SAndroid Build Coastguard Worker bool ATime_Defined; 86*f6dc9357SAndroid Build Coastguard Worker bool MTime_Defined; 87*f6dc9357SAndroid Build Coastguard Worker bool Attrib_Defined; 88*f6dc9357SAndroid Build Coastguard Worker 89*f6dc9357SAndroid Build Coastguard Worker // bool IsDir; 90*f6dc9357SAndroid Build Coastguard Worker bool IsAltStream; 91*f6dc9357SAndroid Build Coastguard Worker bool ColonWasUsed; 92*f6dc9357SAndroid Build Coastguard Worker DWORD Attrib; 93*f6dc9357SAndroid Build Coastguard Worker 94*f6dc9357SAndroid Build Coastguard Worker FILETIME CTime; 95*f6dc9357SAndroid Build Coastguard Worker FILETIME ATime; 96*f6dc9357SAndroid Build Coastguard Worker FILETIME MTime; 97*f6dc9357SAndroid Build Coastguard Worker CVirtFileCVirtFile98*f6dc9357SAndroid Build Coastguard Worker CVirtFile(): 99*f6dc9357SAndroid Build Coastguard Worker CTime_Defined(false), 100*f6dc9357SAndroid Build Coastguard Worker ATime_Defined(false), 101*f6dc9357SAndroid Build Coastguard Worker MTime_Defined(false), 102*f6dc9357SAndroid Build Coastguard Worker Attrib_Defined(false), 103*f6dc9357SAndroid Build Coastguard Worker // IsDir(false), 104*f6dc9357SAndroid Build Coastguard Worker IsAltStream(false), 105*f6dc9357SAndroid Build Coastguard Worker ColonWasUsed(false) 106*f6dc9357SAndroid Build Coastguard Worker {} 107*f6dc9357SAndroid Build Coastguard Worker }; 108*f6dc9357SAndroid Build Coastguard Worker 109*f6dc9357SAndroid Build Coastguard Worker 110*f6dc9357SAndroid Build Coastguard Worker /* 111*f6dc9357SAndroid Build Coastguard Worker We use CVirtFileSystem only for single file extraction: 112*f6dc9357SAndroid Build Coastguard Worker It supports the following cases and names: 113*f6dc9357SAndroid Build Coastguard Worker - "fileName" : single file 114*f6dc9357SAndroid Build Coastguard Worker - "fileName" item (main base file) and additional "fileName:altStream" items 115*f6dc9357SAndroid Build Coastguard Worker - "altStream" : single item without "fileName:" prefix. 116*f6dc9357SAndroid Build Coastguard Worker If file is flushed to disk, it uses Get_Correct_FsFile_Name(name). 117*f6dc9357SAndroid Build Coastguard Worker */ 118*f6dc9357SAndroid Build Coastguard Worker 119*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_NOQIB_1( 120*f6dc9357SAndroid Build Coastguard Worker CVirtFileSystem, 121*f6dc9357SAndroid Build Coastguard Worker ISequentialOutStream 122*f6dc9357SAndroid Build Coastguard Worker ) 123*f6dc9357SAndroid Build Coastguard Worker unsigned _numFlushed; 124*f6dc9357SAndroid Build Coastguard Worker public: 125*f6dc9357SAndroid Build Coastguard Worker bool IsAltStreamFile; // in: 126*f6dc9357SAndroid Build Coastguard Worker // = true, if extracting file is alt stream without "fileName:" prefix. 127*f6dc9357SAndroid Build Coastguard Worker // = false, if extracting file is normal file, but additional 128*f6dc9357SAndroid Build Coastguard Worker // alt streams "fileName:altStream" items are possible. 129*f6dc9357SAndroid Build Coastguard Worker private: 130*f6dc9357SAndroid Build Coastguard Worker bool _newVirtFileStream_IsReadyToWrite; // it can non real file (if can't open alt stream) 131*f6dc9357SAndroid Build Coastguard Worker bool _needWriteToRealFile; // we need real writing to open file. 132*f6dc9357SAndroid Build Coastguard Worker bool _wasSwitchedToFsMode; 133*f6dc9357SAndroid Build Coastguard Worker bool _altStream_NeedRestore_Attrib_bool; 134*f6dc9357SAndroid Build Coastguard Worker DWORD _altStream_NeedRestore_AttribVal; 135*f6dc9357SAndroid Build Coastguard Worker 136*f6dc9357SAndroid Build Coastguard Worker CMyComPtr2<ISequentialOutStream, COutFileStream> _outFileStream; 137*f6dc9357SAndroid Build Coastguard Worker public: 138*f6dc9357SAndroid Build Coastguard Worker CObjectVector<CVirtFile> Files; 139*f6dc9357SAndroid Build Coastguard Worker size_t MaxTotalAllocSize; // remain size, including Files.Back() 140*f6dc9357SAndroid Build Coastguard Worker FString DirPrefix; // files will be flushed to this FS directory. 141*f6dc9357SAndroid Build Coastguard Worker UString FileName; // name of file that will be extracted. 142*f6dc9357SAndroid Build Coastguard Worker // it can be name of alt stream without "fileName:" prefix, if (IsAltStreamFile == trye). 143*f6dc9357SAndroid Build Coastguard Worker // we use that name to detect altStream part in "FileName:altStream". 144*f6dc9357SAndroid Build Coastguard Worker CByteBuffer ZoneBuf; 145*f6dc9357SAndroid Build Coastguard Worker int Index_of_MainExtractedFile_in_Files; // out: index in Files. == -1, if expected file was not extracted 146*f6dc9357SAndroid Build Coastguard Worker int Index_of_ZoneBuf_AltStream_in_Files; // out: index in Files. == -1, if no zonbuf alt stream 147*f6dc9357SAndroid Build Coastguard Worker 148*f6dc9357SAndroid Build Coastguard Worker CVirtFileSystem()149*f6dc9357SAndroid Build Coastguard Worker CVirtFileSystem() 150*f6dc9357SAndroid Build Coastguard Worker { 151*f6dc9357SAndroid Build Coastguard Worker _numFlushed = 0; 152*f6dc9357SAndroid Build Coastguard Worker IsAltStreamFile = false; 153*f6dc9357SAndroid Build Coastguard Worker _newVirtFileStream_IsReadyToWrite = false; 154*f6dc9357SAndroid Build Coastguard Worker _needWriteToRealFile = false; 155*f6dc9357SAndroid Build Coastguard Worker _wasSwitchedToFsMode = false; 156*f6dc9357SAndroid Build Coastguard Worker _altStream_NeedRestore_Attrib_bool = false; 157*f6dc9357SAndroid Build Coastguard Worker MaxTotalAllocSize = (size_t)0 - 1; 158*f6dc9357SAndroid Build Coastguard Worker Index_of_MainExtractedFile_in_Files = -1; 159*f6dc9357SAndroid Build Coastguard Worker Index_of_ZoneBuf_AltStream_in_Files = -1; 160*f6dc9357SAndroid Build Coastguard Worker } 161*f6dc9357SAndroid Build Coastguard Worker WasStreamFlushedToFS()162*f6dc9357SAndroid Build Coastguard Worker bool WasStreamFlushedToFS() const { return _wasSwitchedToFsMode; } 163*f6dc9357SAndroid Build Coastguard Worker CloseMemFile()164*f6dc9357SAndroid Build Coastguard Worker HRESULT CloseMemFile() 165*f6dc9357SAndroid Build Coastguard Worker { 166*f6dc9357SAndroid Build Coastguard Worker if (_wasSwitchedToFsMode) 167*f6dc9357SAndroid Build Coastguard Worker return FlushToDisk(true); // closeLast 168*f6dc9357SAndroid Build Coastguard Worker CVirtFile &file = Files.Back(); 169*f6dc9357SAndroid Build Coastguard Worker if (file.Data.Size() != file.WrittenSize) 170*f6dc9357SAndroid Build Coastguard Worker file.Data.ReAlloc_KeepData(file.WrittenSize, file.WrittenSize); 171*f6dc9357SAndroid Build Coastguard Worker return S_OK; 172*f6dc9357SAndroid Build Coastguard Worker } 173*f6dc9357SAndroid Build Coastguard Worker 174*f6dc9357SAndroid Build Coastguard Worker HRESULT FlushToDisk(bool closeLast); 175*f6dc9357SAndroid Build Coastguard Worker }; 176*f6dc9357SAndroid Build Coastguard Worker 177*f6dc9357SAndroid Build Coastguard Worker #endif 178*f6dc9357SAndroid Build Coastguard Worker 179*f6dc9357SAndroid Build Coastguard Worker 180*f6dc9357SAndroid Build Coastguard Worker 181*f6dc9357SAndroid Build Coastguard Worker class CExtractCallbackImp Z7_final: 182*f6dc9357SAndroid Build Coastguard Worker public IFolderArchiveExtractCallback, 183*f6dc9357SAndroid Build Coastguard Worker /* IExtractCallbackUI: 184*f6dc9357SAndroid Build Coastguard Worker before v23.00 : it included IFolderArchiveExtractCallback 185*f6dc9357SAndroid Build Coastguard Worker since v23.00 : it doesn't include IFolderArchiveExtractCallback 186*f6dc9357SAndroid Build Coastguard Worker */ 187*f6dc9357SAndroid Build Coastguard Worker public IExtractCallbackUI, // NON-COM interface since 23.00 188*f6dc9357SAndroid Build Coastguard Worker public IOpenCallbackUI, // NON-COM interface 189*f6dc9357SAndroid Build Coastguard Worker public IFolderArchiveExtractCallback2, 190*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 191*f6dc9357SAndroid Build Coastguard Worker public IFolderOperationsExtractCallback, 192*f6dc9357SAndroid Build Coastguard Worker public IFolderExtractToStreamCallback, 193*f6dc9357SAndroid Build Coastguard Worker public ICompressProgressInfo, 194*f6dc9357SAndroid Build Coastguard Worker public IArchiveRequestMemoryUseCallback, 195*f6dc9357SAndroid Build Coastguard Worker #endif 196*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO 197*f6dc9357SAndroid Build Coastguard Worker public ICryptoGetTextPassword, 198*f6dc9357SAndroid Build Coastguard Worker #endif 199*f6dc9357SAndroid Build Coastguard Worker public CMyUnknownImp 200*f6dc9357SAndroid Build Coastguard Worker { 201*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_BEGIN2(IFolderArchiveExtractCallback) 202*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderArchiveExtractCallback2) 203*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 204*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderOperationsExtractCallback) 205*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderExtractToStreamCallback) 206*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ICompressProgressInfo) 207*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IArchiveRequestMemoryUseCallback) 208*f6dc9357SAndroid Build Coastguard Worker #endif 209*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO 210*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ICryptoGetTextPassword) 211*f6dc9357SAndroid Build Coastguard Worker #endif 212*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_END 213*f6dc9357SAndroid Build Coastguard Worker Z7_COM_ADDREF_RELEASE 214*f6dc9357SAndroid Build Coastguard Worker 215*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_IMP(IExtractCallbackUI) 216*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_IMP(IOpenCallbackUI) 217*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IProgress) 218*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderArchiveExtractCallback) 219*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderArchiveExtractCallback2) 220*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 221*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderOperationsExtractCallback) 222*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderExtractToStreamCallback) 223*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressProgressInfo) 224*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IArchiveRequestMemoryUseCallback) 225*f6dc9357SAndroid Build Coastguard Worker #endif 226*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO 227*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICryptoGetTextPassword) 228*f6dc9357SAndroid Build Coastguard Worker #endif 229*f6dc9357SAndroid Build Coastguard Worker 230*f6dc9357SAndroid Build Coastguard Worker bool _needWriteArchivePath; 231*f6dc9357SAndroid Build Coastguard Worker bool _isFolder; 232*f6dc9357SAndroid Build Coastguard Worker bool _totalFiles_Defined; 233*f6dc9357SAndroid Build Coastguard Worker bool _totalBytes_Defined; 234*f6dc9357SAndroid Build Coastguard Worker public: 235*f6dc9357SAndroid Build Coastguard Worker bool MultiArcMode; 236*f6dc9357SAndroid Build Coastguard Worker bool ProcessAltStreams; 237*f6dc9357SAndroid Build Coastguard Worker bool StreamMode; // set to true, if you want the callee to call GetStream7() 238*f6dc9357SAndroid Build Coastguard Worker bool ThereAreMessageErrors; 239*f6dc9357SAndroid Build Coastguard Worker bool Src_Is_IO_FS_Folder; 240*f6dc9357SAndroid Build Coastguard Worker 241*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO 242*f6dc9357SAndroid Build Coastguard Worker bool PasswordIsDefined; 243*f6dc9357SAndroid Build Coastguard Worker bool PasswordWasAsked; 244*f6dc9357SAndroid Build Coastguard Worker #endif 245*f6dc9357SAndroid Build Coastguard Worker 246*f6dc9357SAndroid Build Coastguard Worker private: 247*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 248*f6dc9357SAndroid Build Coastguard Worker bool _needUpdateStat; 249*f6dc9357SAndroid Build Coastguard Worker bool _newVirtFileWasAdded; 250*f6dc9357SAndroid Build Coastguard Worker bool _isAltStream; 251*f6dc9357SAndroid Build Coastguard Worker // bool _extractMode; 252*f6dc9357SAndroid Build Coastguard Worker // bool _testMode; 253*f6dc9357SAndroid Build Coastguard Worker bool _hashStream_WasUsed; 254*f6dc9357SAndroid Build Coastguard Worker bool _curSize_Defined; 255*f6dc9357SAndroid Build Coastguard Worker bool NeedAddFile; 256*f6dc9357SAndroid Build Coastguard Worker 257*f6dc9357SAndroid Build Coastguard Worker bool _remember; 258*f6dc9357SAndroid Build Coastguard Worker bool _skipArc; 259*f6dc9357SAndroid Build Coastguard Worker #endif 260*f6dc9357SAndroid Build Coastguard Worker 261*f6dc9357SAndroid Build Coastguard Worker public: 262*f6dc9357SAndroid Build Coastguard Worker bool YesToAll; 263*f6dc9357SAndroid Build Coastguard Worker bool TestMode; 264*f6dc9357SAndroid Build Coastguard Worker 265*f6dc9357SAndroid Build Coastguard Worker UInt32 NumArchiveErrors; 266*f6dc9357SAndroid Build Coastguard Worker NExtract::NOverwriteMode::EEnum OverwriteMode; 267*f6dc9357SAndroid Build Coastguard Worker 268*f6dc9357SAndroid Build Coastguard Worker private: 269*f6dc9357SAndroid Build Coastguard Worker UString _currentArchivePath; 270*f6dc9357SAndroid Build Coastguard Worker UString _currentFilePath; 271*f6dc9357SAndroid Build Coastguard Worker UString _filePath; // virtual path than will be sent via IFolderExtractToStreamCallback 272*f6dc9357SAndroid Build Coastguard Worker 273*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 274*f6dc9357SAndroid Build Coastguard Worker UInt64 _curSize; 275*f6dc9357SAndroid Build Coastguard Worker CMyComPtr2<ISequentialOutStream, COutStreamWithHash> _hashStream; 276*f6dc9357SAndroid Build Coastguard Worker IHashCalc *_hashCalc; // it's for stat in Test operation 277*f6dc9357SAndroid Build Coastguard Worker #endif 278*f6dc9357SAndroid Build Coastguard Worker 279*f6dc9357SAndroid Build Coastguard Worker public: 280*f6dc9357SAndroid Build Coastguard Worker CProgressDialog *ProgressDialog; 281*f6dc9357SAndroid Build Coastguard Worker 282*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 283*f6dc9357SAndroid Build Coastguard Worker CVirtFileSystem *VirtFileSystemSpec; 284*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<ISequentialOutStream> VirtFileSystem; 285*f6dc9357SAndroid Build Coastguard Worker UInt64 NumFolders; 286*f6dc9357SAndroid Build Coastguard Worker UInt64 NumFiles; 287*f6dc9357SAndroid Build Coastguard Worker #endif 288*f6dc9357SAndroid Build Coastguard Worker 289*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO 290*f6dc9357SAndroid Build Coastguard Worker UString Password; 291*f6dc9357SAndroid Build Coastguard Worker #endif 292*f6dc9357SAndroid Build Coastguard Worker 293*f6dc9357SAndroid Build Coastguard Worker UString _lang_Extracting; 294*f6dc9357SAndroid Build Coastguard Worker UString _lang_Testing; 295*f6dc9357SAndroid Build Coastguard Worker UString _lang_Skipping; 296*f6dc9357SAndroid Build Coastguard Worker UString _lang_Reading; 297*f6dc9357SAndroid Build Coastguard Worker UString _lang_Empty; 298*f6dc9357SAndroid Build Coastguard Worker 299*f6dc9357SAndroid Build Coastguard Worker CExtractCallbackImp(): 300*f6dc9357SAndroid Build Coastguard Worker _totalFiles_Defined(false) 301*f6dc9357SAndroid Build Coastguard Worker , _totalBytes_Defined(false) 302*f6dc9357SAndroid Build Coastguard Worker , MultiArcMode(false) 303*f6dc9357SAndroid Build Coastguard Worker , ProcessAltStreams(true) 304*f6dc9357SAndroid Build Coastguard Worker , StreamMode(false) 305*f6dc9357SAndroid Build Coastguard Worker , ThereAreMessageErrors(false) 306*f6dc9357SAndroid Build Coastguard Worker , Src_Is_IO_FS_Folder(false) 307*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO 308*f6dc9357SAndroid Build Coastguard Worker , PasswordIsDefined(false) 309*f6dc9357SAndroid Build Coastguard Worker , PasswordWasAsked(false) 310*f6dc9357SAndroid Build Coastguard Worker #endif 311*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 312*f6dc9357SAndroid Build Coastguard Worker , _remember(false) 313*f6dc9357SAndroid Build Coastguard Worker , _skipArc(false) 314*f6dc9357SAndroid Build Coastguard Worker #endif 315*f6dc9357SAndroid Build Coastguard Worker , YesToAll(false) 316*f6dc9357SAndroid Build Coastguard Worker , TestMode(false) 317*f6dc9357SAndroid Build Coastguard Worker , OverwriteMode(NExtract::NOverwriteMode::kAsk) 318*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 319*f6dc9357SAndroid Build Coastguard Worker , _hashCalc(NULL) 320*f6dc9357SAndroid Build Coastguard Worker #endif 321*f6dc9357SAndroid Build Coastguard Worker {} 322*f6dc9357SAndroid Build Coastguard Worker 323*f6dc9357SAndroid Build Coastguard Worker ~CExtractCallbackImp(); 324*f6dc9357SAndroid Build Coastguard Worker void Init(); 325*f6dc9357SAndroid Build Coastguard Worker 326*f6dc9357SAndroid Build Coastguard Worker HRESULT SetCurrentFilePath2(const wchar_t *filePath); 327*f6dc9357SAndroid Build Coastguard Worker void AddError_Message(LPCWSTR message); 328*f6dc9357SAndroid Build Coastguard Worker void AddError_Message_ShowArcPath(LPCWSTR message); 329*f6dc9357SAndroid Build Coastguard Worker HRESULT MessageError(const char *message, const FString &path); 330*f6dc9357SAndroid Build Coastguard Worker void Add_ArchiveName_Error(); 331*f6dc9357SAndroid Build Coastguard Worker 332*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 333*f6dc9357SAndroid Build Coastguard Worker void SetHashCalc(IHashCalc *hashCalc) { _hashCalc = hashCalc; } 334*f6dc9357SAndroid Build Coastguard Worker 335*f6dc9357SAndroid Build Coastguard Worker void SetHashMethods(IHashCalc *hash) 336*f6dc9357SAndroid Build Coastguard Worker { 337*f6dc9357SAndroid Build Coastguard Worker if (!hash) 338*f6dc9357SAndroid Build Coastguard Worker return; 339*f6dc9357SAndroid Build Coastguard Worker _hashStream.Create_if_Empty(); 340*f6dc9357SAndroid Build Coastguard Worker _hashStream->_hash = hash; 341*f6dc9357SAndroid Build Coastguard Worker } 342*f6dc9357SAndroid Build Coastguard Worker #endif 343*f6dc9357SAndroid Build Coastguard Worker 344*f6dc9357SAndroid Build Coastguard Worker bool IsOK() const { return NumArchiveErrors == 0 && !ThereAreMessageErrors; } 345*f6dc9357SAndroid Build Coastguard Worker }; 346*f6dc9357SAndroid Build Coastguard Worker 347*f6dc9357SAndroid Build Coastguard Worker #endif 348