Home | History | Annotate | Download | only in SFXSetup
      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
     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   }
     81   virtual ~CExtractCallbackImp() { ProgressDialog.Destroy(); }
     82   #endif
     83 
     84 };
     85 
     86 #endif
     87