1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ArchiveExtractCallback.h
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#ifndef __ARCHIVE_EXTRACT_CALLBACK_H
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define __ARCHIVE_EXTRACT_CALLBACK_H
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "Common/MyCom.h"
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "Common/Wildcard.h"
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "../../IPassword.h"
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "../../Common/FileStreams.h"
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "../../Common/ProgressUtils.h"
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "../../Archive/IArchive.h"
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "../../Archive/Common/OutStreamWithCRC.h"
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ExtractMode.h"
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "IFileExtractCallback.h"
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "OpenArchive.h"
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass CArchiveExtractCallback:
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  public IArchiveExtractCallback,
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // public IArchiveVolumeExtractCallback,
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  public ICryptoGetTextPassword,
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  public ICompressProgressInfo,
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  public CMyUnknownImp
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const CArc *_arc;
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const NWildcard::CCensorNode *_wildcardCensor;
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  CMyComPtr<IFolderArchiveExtractCallback> _extractCallback2;
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  CMyComPtr<ICompressProgressInfo> _compressProgress;
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  CMyComPtr<ICryptoGetTextPassword> _cryptoGetTextPassword;
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UString _directoryPath;
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  NExtract::NPathMode::EEnum _pathMode;
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  NExtract::NOverwriteMode::EEnum _overwriteMode;
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UString _diskFilePath;
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UString _filePath;
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UInt64 _position;
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  bool _isSplit;
4259d709d503bab6e2b61931737e662dd293b40578ccornelius
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  bool _extractMode;
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  bool WriteCTime;
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  bool WriteATime;
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  bool WriteMTime;
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  bool _encrypted;
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  struct CProcessedFileInfo
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  {
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FILETIME CTime;
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FILETIME ATime;
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FILETIME MTime;
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UInt32 Attrib;
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    bool CTimeDefined;
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    bool ATimeDefined;
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    bool MTimeDefined;
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    bool AttribDefined;
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    bool IsDir;
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  } _fi;
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UInt32 _index;
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UInt64 _curSize;
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  bool _curSizeDefined;
69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  COutFileStream *_outFileStreamSpec;
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  CMyComPtr<ISequentialOutStream> _outFileStream;
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  COutStreamWithCRC *_crcStreamSpec;
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  CMyComPtr<ISequentialOutStream> _crcStream;
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UStringVector _removePathParts;
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  bool _stdOutMode;
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  bool _testMode;
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  bool _crcMode;
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  bool _multiArchives;
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  CMyComPtr<ICompressProgressInfo> _localProgress;
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UInt64 _packTotal;
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UInt64 _unpTotal;
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  void CreateComplexDirectory(const UStringVector &dirPathParts, UString &fullPath);
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  HRESULT GetTime(int index, PROPID propID, FILETIME &filetime, bool &filetimeIsDefined);
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  HRESULT GetUnpackSize();
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic:
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  CLocalProgress *LocalProgressSpec;
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UInt64 NumFolders;
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UInt64 NumFiles;
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UInt64 UnpackSize;
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UInt32 CrcSum;
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  MY_UNKNOWN_IMP2(ICryptoGetTextPassword, ICompressProgressInfo)
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // COM_INTERFACE_ENTRY(IArchiveVolumeExtractCallback)
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  INTERFACE_IArchiveExtractCallback(;)
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // IArchiveVolumeExtractCallback
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // STDMETHOD(GetInStream)(const wchar_t *name, ISequentialInStream **inStream);
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  STDMETHOD(CryptoGetTextPassword)(BSTR *password);
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  CArchiveExtractCallback():
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      WriteCTime(true),
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      WriteATime(true),
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      WriteMTime(true),
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      _multiArchives(false)
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  {
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    LocalProgressSpec = new CLocalProgress();
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    _localProgress = LocalProgressSpec;
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  void InitForMulti(bool multiArchives,
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      NExtract::NPathMode::EEnum pathMode,
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      NExtract::NOverwriteMode::EEnum overwriteMode)
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  {
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    _multiArchives = multiArchives;
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    _pathMode = pathMode;
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    _overwriteMode = overwriteMode;
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumFolders = NumFiles = UnpackSize = 0;
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CrcSum = 0;
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  void Init(
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      const NWildcard::CCensorNode *wildcardCensor,
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      const CArc *arc,
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      IFolderArchiveExtractCallback *extractCallback2,
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      bool stdOutMode, bool testMode, bool crcMode,
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      const UString &directoryPath,
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      const UStringVector &removePathParts,
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      UInt64 packSize);
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru