3 #ifndef __EXTRACT_CALLBACK_H
\r
4 #define __EXTRACT_CALLBACK_H
\r
6 #include "Common/MyCom.h"
\r
8 #include "Windows/ResourceString.h"
\r
10 #include "../Agent/IFolderArchive.h"
\r
11 #include "../Common/ArchiveOpenCallback.h"
\r
14 #include "../../IPassword.h"
\r
17 #include "IFolder.h"
\r
19 #include "ProgressDialog2.h"
\r
22 #include "LangUtils.h"
\r
25 class CExtractCallbackImp:
\r
26 public IExtractCallbackUI,
\r
27 public IOpenCallbackUI,
\r
28 public IFolderOperationsExtractCallback,
\r
29 // public IFolderArchiveExtractCallback, // mkultiple from IProgress
\r
31 public ICompressProgressInfo,
\r
34 public ICryptoGetTextPassword,
\r
36 public CMyUnknownImp
\r
39 MY_QUERYINTERFACE_BEGIN2(IFolderOperationsExtractCallback)
\r
40 MY_QUERYINTERFACE_ENTRY(IFolderArchiveExtractCallback)
\r
42 MY_QUERYINTERFACE_ENTRY(ICompressProgressInfo)
\r
45 MY_QUERYINTERFACE_ENTRY(ICryptoGetTextPassword)
\r
47 MY_QUERYINTERFACE_END
\r
51 STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
\r
54 INTERFACE_IProgress(;)
\r
55 INTERFACE_IOpenCallbackUI(;)
\r
57 // IFolderArchiveExtractCallback
\r
58 // STDMETHOD(SetTotalFiles)(UInt64 total);
\r
59 // STDMETHOD(SetCompletedFiles)(const UInt64 *value);
\r
60 STDMETHOD(AskOverwrite)(
\r
61 const wchar_t *existName, const FILETIME *existTime, const UInt64 *existSize,
\r
62 const wchar_t *newName, const FILETIME *newTime, const UInt64 *newSize,
\r
64 STDMETHOD (PrepareOperation)(const wchar_t *name, bool isFolder, Int32 askExtractMode, const UInt64 *position);
\r
66 STDMETHOD(MessageError)(const wchar_t *message);
\r
67 STDMETHOD(SetOperationResult)(Int32 operationResult, bool encrypted);
\r
69 // IExtractCallbackUI
\r
71 HRESULT BeforeOpen(const wchar_t *name);
\r
72 HRESULT OpenResult(const wchar_t *name, HRESULT result, bool encrypted);
\r
73 HRESULT ThereAreNoFiles();
\r
74 HRESULT ExtractResult(HRESULT result);
\r
77 HRESULT SetPassword(const UString &password);
\r
80 // IFolderOperationsExtractCallback
\r
81 STDMETHOD(AskWrite)(
\r
82 const wchar_t *srcPath,
\r
84 const FILETIME *srcTime,
\r
85 const UInt64 *srcSize,
\r
86 const wchar_t *destPathRequest,
\r
87 BSTR *destPathResult,
\r
88 Int32 *writeAnswer);
\r
89 STDMETHOD(ShowMessage)(const wchar_t *message);
\r
90 STDMETHOD(SetCurrentFilePath)(const wchar_t *filePath);
\r
91 STDMETHOD(SetNumFiles)(UInt64 numFiles);
\r
93 // ICryptoGetTextPassword
\r
95 STDMETHOD(CryptoGetTextPassword)(BSTR *password);
\r
99 UString _currentArchivePath;
\r
100 bool _needWriteArchivePath;
\r
102 UString _currentFilePath;
\r
105 HRESULT SetCurrentFilePath2(const wchar_t *filePath);
\r
106 void AddErrorMessage(LPCWSTR message);
\r
108 CProgressDialog *ProgressDialog;
\r
114 UInt32 NumArchiveErrors;
\r
115 bool ThereAreMessageErrors;
\r
116 NExtract::NOverwriteMode::EEnum OverwriteMode;
\r
119 bool PasswordIsDefined;
\r
120 bool PasswordWasAsked;
\r
124 CExtractCallbackImp():
\r
126 PasswordIsDefined(false),
\r
127 PasswordWasAsked(false),
\r
129 OverwriteMode(NExtract::NOverwriteMode::kAskBefore)
\r
132 ~CExtractCallbackImp();
\r
135 bool IsOK() const { return NumArchiveErrors == 0 && !ThereAreMessageErrors; }
\r