1 // ExtractCallbackSfx.h 2 3 #ifndef __EXTRACT_CALLBACK_SFX_H 4 #define __EXTRACT_CALLBACK_SFX_H 5 6 #include "resource.h" 7 8 #include "../../../Windows/ResourceString.h" 9 10 #include "../../Archive/IArchive.h" 11 12 #include "../../Common/FileStreams.h" 13 #include "../../ICoder.h" 14 15 #include "../../UI/FileManager/LangUtils.h" 16 17 #ifndef _NO_PROGRESS 18 #include "../../UI/FileManager/ProgressDialog.h" 19 #endif 20 #include "../../UI/Common/ArchiveOpenCallback.h" 21 22 class CExtractCallbackImp: 23 public IArchiveExtractCallback, 24 public IOpenCallbackUI, 25 public CMyUnknownImp 26 { 27 public: 28 29 MY_UNKNOWN_IMP 30 31 INTERFACE_IArchiveExtractCallback(;) 32 INTERFACE_IOpenCallbackUI(;) 33 34 private: 35 CMyComPtr<IInArchive> _archiveHandler; 36 FString _directoryPath; 37 UString _filePath; 38 FString _diskFilePath; 39 40 bool _extractMode; 41 struct CProcessedFileInfo 42 { 43 FILETIME MTime; 44 bool IsDir; 45 UInt32 Attributes; 46 } _processedFileInfo; 47 48 COutFileStream *_outFileStreamSpec; 49 CMyComPtr<ISequentialOutStream> _outFileStream; 50 51 UString _itemDefaultName; 52 FILETIME _defaultMTime; 53 UInt32 _defaultAttributes; 54 55 void CreateComplexDirectory(const UStringVector &dirPathParts); 56 public: 57 #ifndef _NO_PROGRESS 58 CProgressDialog ProgressDialog; 59 #endif 60 61 bool _isCorrupt; 62 UString _message; 63 64 void Init(IInArchive *archiveHandler, 65 const FString &directoryPath, 66 const UString &itemDefaultName, 67 const FILETIME &defaultMTime, 68 UInt32 defaultAttributes); 69 70 #ifndef _NO_PROGRESS StartProgressDialog(const UString & title,NWindows::CThread & thread)71 HRESULT StartProgressDialog(const UString &title, NWindows::CThread &thread) 72 { 73 ProgressDialog.Create(title, thread, 0); 74 { 75 ProgressDialog.SetText(LangString(IDS_PROGRESS_EXTRACTING)); 76 } 77 78 ProgressDialog.Show(SW_SHOWNORMAL); 79 return S_OK; 80 } ~CExtractCallbackImp()81 virtual ~CExtractCallbackImp() { ProgressDialog.Destroy(); } 82 #endif 83 84 }; 85 86 #endif 87