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