1*f6dc9357SAndroid Build Coastguard Worker // HashGUI.cpp
2*f6dc9357SAndroid Build Coastguard Worker
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker
5*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/IntToString.h"
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/StringConvert.h"
7*f6dc9357SAndroid Build Coastguard Worker
8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/ErrorMsg.h"
9*f6dc9357SAndroid Build Coastguard Worker
10*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/FormatUtils.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/LangUtils.h"
12*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/ListViewDialog.h"
13*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/OverwriteDialogRes.h"
14*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/ProgressDialog2.h"
15*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/ProgressDialog2Res.h"
16*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/PropertyNameRes.h"
17*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/resourceGui.h"
18*f6dc9357SAndroid Build Coastguard Worker
19*f6dc9357SAndroid Build Coastguard Worker #include "HashGUI.h"
20*f6dc9357SAndroid Build Coastguard Worker
21*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
22*f6dc9357SAndroid Build Coastguard Worker
23*f6dc9357SAndroid Build Coastguard Worker
24*f6dc9357SAndroid Build Coastguard Worker
25*f6dc9357SAndroid Build Coastguard Worker class CHashCallbackGUI Z7_final: public CProgressThreadVirt, public IHashCallbackUI
26*f6dc9357SAndroid Build Coastguard Worker {
27*f6dc9357SAndroid Build Coastguard Worker UInt64 NumFiles;
28*f6dc9357SAndroid Build Coastguard Worker bool _curIsFolder;
29*f6dc9357SAndroid Build Coastguard Worker UString FirstFileName;
30*f6dc9357SAndroid Build Coastguard Worker // UString MainPath;
31*f6dc9357SAndroid Build Coastguard Worker
32*f6dc9357SAndroid Build Coastguard Worker CPropNameValPairs PropNameValPairs;
33*f6dc9357SAndroid Build Coastguard Worker
34*f6dc9357SAndroid Build Coastguard Worker HRESULT ProcessVirt() Z7_override;
35*f6dc9357SAndroid Build Coastguard Worker virtual void ProcessWasFinished_GuiVirt() Z7_override;
36*f6dc9357SAndroid Build Coastguard Worker
37*f6dc9357SAndroid Build Coastguard Worker public:
38*f6dc9357SAndroid Build Coastguard Worker const NWildcard::CCensor *censor;
39*f6dc9357SAndroid Build Coastguard Worker const CHashOptions *options;
40*f6dc9357SAndroid Build Coastguard Worker
41*f6dc9357SAndroid Build Coastguard Worker DECL_EXTERNAL_CODECS_LOC_VARS_DECL
42*f6dc9357SAndroid Build Coastguard Worker
Z7_IFACE_IMP(IDirItemsCallback)43*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_IMP(IDirItemsCallback)
44*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_IMP(IHashCallbackUI)
45*f6dc9357SAndroid Build Coastguard Worker
46*f6dc9357SAndroid Build Coastguard Worker /*
47*f6dc9357SAndroid Build Coastguard Worker void AddErrorMessage(DWORD systemError, const wchar_t *name)
48*f6dc9357SAndroid Build Coastguard Worker {
49*f6dc9357SAndroid Build Coastguard Worker Sync.AddError_Code_Name(systemError, name);
50*f6dc9357SAndroid Build Coastguard Worker }
51*f6dc9357SAndroid Build Coastguard Worker */
52*f6dc9357SAndroid Build Coastguard Worker void AddErrorMessage(HRESULT systemError, const wchar_t *name)
53*f6dc9357SAndroid Build Coastguard Worker {
54*f6dc9357SAndroid Build Coastguard Worker Sync.AddError_Code_Name(systemError, name);
55*f6dc9357SAndroid Build Coastguard Worker }
56*f6dc9357SAndroid Build Coastguard Worker };
57*f6dc9357SAndroid Build Coastguard Worker
58*f6dc9357SAndroid Build Coastguard Worker
AddValuePair(CPropNameValPairs & pairs,UINT resourceID,UInt64 value)59*f6dc9357SAndroid Build Coastguard Worker void AddValuePair(CPropNameValPairs &pairs, UINT resourceID, UInt64 value)
60*f6dc9357SAndroid Build Coastguard Worker {
61*f6dc9357SAndroid Build Coastguard Worker CProperty &pair = pairs.AddNew();
62*f6dc9357SAndroid Build Coastguard Worker AddLangString(pair.Name, resourceID);
63*f6dc9357SAndroid Build Coastguard Worker char sz[32];
64*f6dc9357SAndroid Build Coastguard Worker ConvertUInt64ToString(value, sz);
65*f6dc9357SAndroid Build Coastguard Worker pair.Value = sz;
66*f6dc9357SAndroid Build Coastguard Worker }
67*f6dc9357SAndroid Build Coastguard Worker
68*f6dc9357SAndroid Build Coastguard Worker
AddSizeValuePair(CPropNameValPairs & pairs,UINT resourceID,UInt64 value)69*f6dc9357SAndroid Build Coastguard Worker void AddSizeValuePair(CPropNameValPairs &pairs, UINT resourceID, UInt64 value)
70*f6dc9357SAndroid Build Coastguard Worker {
71*f6dc9357SAndroid Build Coastguard Worker CProperty &pair = pairs.AddNew();
72*f6dc9357SAndroid Build Coastguard Worker LangString(resourceID, pair.Name);
73*f6dc9357SAndroid Build Coastguard Worker AddSizeValue(pair.Value, value);
74*f6dc9357SAndroid Build Coastguard Worker }
75*f6dc9357SAndroid Build Coastguard Worker
76*f6dc9357SAndroid Build Coastguard Worker
StartScanning()77*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::StartScanning()
78*f6dc9357SAndroid Build Coastguard Worker {
79*f6dc9357SAndroid Build Coastguard Worker CProgressSync &sync = Sync;
80*f6dc9357SAndroid Build Coastguard Worker sync.Set_Status(LangString(IDS_SCANNING));
81*f6dc9357SAndroid Build Coastguard Worker return CheckBreak();
82*f6dc9357SAndroid Build Coastguard Worker }
83*f6dc9357SAndroid Build Coastguard Worker
ScanProgress(const CDirItemsStat & st,const FString & path,bool isDir)84*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::ScanProgress(const CDirItemsStat &st, const FString &path, bool isDir)
85*f6dc9357SAndroid Build Coastguard Worker {
86*f6dc9357SAndroid Build Coastguard Worker return Sync.ScanProgress(st.NumFiles, st.GetTotalBytes(), path, isDir);
87*f6dc9357SAndroid Build Coastguard Worker }
88*f6dc9357SAndroid Build Coastguard Worker
ScanError(const FString & path,DWORD systemError)89*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::ScanError(const FString &path, DWORD systemError)
90*f6dc9357SAndroid Build Coastguard Worker {
91*f6dc9357SAndroid Build Coastguard Worker AddErrorMessage(HRESULT_FROM_WIN32(systemError), fs2us(path));
92*f6dc9357SAndroid Build Coastguard Worker return CheckBreak();
93*f6dc9357SAndroid Build Coastguard Worker }
94*f6dc9357SAndroid Build Coastguard Worker
FinishScanning(const CDirItemsStat & st)95*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::FinishScanning(const CDirItemsStat &st)
96*f6dc9357SAndroid Build Coastguard Worker {
97*f6dc9357SAndroid Build Coastguard Worker return ScanProgress(st, FString(), false); // isDir
98*f6dc9357SAndroid Build Coastguard Worker }
99*f6dc9357SAndroid Build Coastguard Worker
CheckBreak()100*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::CheckBreak()
101*f6dc9357SAndroid Build Coastguard Worker {
102*f6dc9357SAndroid Build Coastguard Worker return Sync.CheckStop();
103*f6dc9357SAndroid Build Coastguard Worker }
104*f6dc9357SAndroid Build Coastguard Worker
SetNumFiles(UInt64 numFiles)105*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::SetNumFiles(UInt64 numFiles)
106*f6dc9357SAndroid Build Coastguard Worker {
107*f6dc9357SAndroid Build Coastguard Worker CProgressSync &sync = Sync;
108*f6dc9357SAndroid Build Coastguard Worker sync.Set_NumFilesTotal(numFiles);
109*f6dc9357SAndroid Build Coastguard Worker return CheckBreak();
110*f6dc9357SAndroid Build Coastguard Worker }
111*f6dc9357SAndroid Build Coastguard Worker
SetTotal(UInt64 size)112*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::SetTotal(UInt64 size)
113*f6dc9357SAndroid Build Coastguard Worker {
114*f6dc9357SAndroid Build Coastguard Worker CProgressSync &sync = Sync;
115*f6dc9357SAndroid Build Coastguard Worker sync.Set_NumBytesTotal(size);
116*f6dc9357SAndroid Build Coastguard Worker return CheckBreak();
117*f6dc9357SAndroid Build Coastguard Worker }
118*f6dc9357SAndroid Build Coastguard Worker
SetCompleted(const UInt64 * completed)119*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::SetCompleted(const UInt64 *completed)
120*f6dc9357SAndroid Build Coastguard Worker {
121*f6dc9357SAndroid Build Coastguard Worker return Sync.Set_NumBytesCur(completed);
122*f6dc9357SAndroid Build Coastguard Worker }
123*f6dc9357SAndroid Build Coastguard Worker
BeforeFirstFile(const CHashBundle &)124*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::BeforeFirstFile(const CHashBundle & /* hb */)
125*f6dc9357SAndroid Build Coastguard Worker {
126*f6dc9357SAndroid Build Coastguard Worker return S_OK;
127*f6dc9357SAndroid Build Coastguard Worker }
128*f6dc9357SAndroid Build Coastguard Worker
GetStream(const wchar_t * name,bool isFolder)129*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::GetStream(const wchar_t *name, bool isFolder)
130*f6dc9357SAndroid Build Coastguard Worker {
131*f6dc9357SAndroid Build Coastguard Worker if (NumFiles == 0)
132*f6dc9357SAndroid Build Coastguard Worker FirstFileName = name;
133*f6dc9357SAndroid Build Coastguard Worker _curIsFolder = isFolder;
134*f6dc9357SAndroid Build Coastguard Worker CProgressSync &sync = Sync;
135*f6dc9357SAndroid Build Coastguard Worker sync.Set_FilePath(name, isFolder);
136*f6dc9357SAndroid Build Coastguard Worker return CheckBreak();
137*f6dc9357SAndroid Build Coastguard Worker }
138*f6dc9357SAndroid Build Coastguard Worker
OpenFileError(const FString & path,DWORD systemError)139*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::OpenFileError(const FString &path, DWORD systemError)
140*f6dc9357SAndroid Build Coastguard Worker {
141*f6dc9357SAndroid Build Coastguard Worker // if (systemError == ERROR_SHARING_VIOLATION)
142*f6dc9357SAndroid Build Coastguard Worker {
143*f6dc9357SAndroid Build Coastguard Worker AddErrorMessage(HRESULT_FROM_WIN32(systemError), fs2us(path));
144*f6dc9357SAndroid Build Coastguard Worker return S_FALSE;
145*f6dc9357SAndroid Build Coastguard Worker }
146*f6dc9357SAndroid Build Coastguard Worker // return systemError;
147*f6dc9357SAndroid Build Coastguard Worker }
148*f6dc9357SAndroid Build Coastguard Worker
SetOperationResult(UInt64,const CHashBundle &,bool)149*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::SetOperationResult(UInt64 /* fileSize */, const CHashBundle & /* hb */, bool /* showHash */)
150*f6dc9357SAndroid Build Coastguard Worker {
151*f6dc9357SAndroid Build Coastguard Worker CProgressSync &sync = Sync;
152*f6dc9357SAndroid Build Coastguard Worker if (!_curIsFolder)
153*f6dc9357SAndroid Build Coastguard Worker NumFiles++;
154*f6dc9357SAndroid Build Coastguard Worker sync.Set_NumFilesCur(NumFiles);
155*f6dc9357SAndroid Build Coastguard Worker return CheckBreak();
156*f6dc9357SAndroid Build Coastguard Worker }
157*f6dc9357SAndroid Build Coastguard Worker
158*f6dc9357SAndroid Build Coastguard Worker static const unsigned k_DigestStringSize = k_HashCalc_DigestSize_Max * 2 + k_HashCalc_ExtraSize * 2 + 16;
159*f6dc9357SAndroid Build Coastguard Worker
AddHashString(CProperty & s,const CHasherState & h,unsigned digestIndex)160*f6dc9357SAndroid Build Coastguard Worker static void AddHashString(CProperty &s, const CHasherState &h, unsigned digestIndex)
161*f6dc9357SAndroid Build Coastguard Worker {
162*f6dc9357SAndroid Build Coastguard Worker char temp[k_DigestStringSize];
163*f6dc9357SAndroid Build Coastguard Worker h.WriteToString(digestIndex, temp);
164*f6dc9357SAndroid Build Coastguard Worker s.Value = temp;
165*f6dc9357SAndroid Build Coastguard Worker }
166*f6dc9357SAndroid Build Coastguard Worker
AddHashResString(CPropNameValPairs & s,const CHasherState & h,unsigned digestIndex,UInt32 resID)167*f6dc9357SAndroid Build Coastguard Worker static void AddHashResString(CPropNameValPairs &s, const CHasherState &h, unsigned digestIndex, UInt32 resID)
168*f6dc9357SAndroid Build Coastguard Worker {
169*f6dc9357SAndroid Build Coastguard Worker CProperty &pair = s.AddNew();
170*f6dc9357SAndroid Build Coastguard Worker UString &s2 = pair.Name;
171*f6dc9357SAndroid Build Coastguard Worker LangString(resID, s2);
172*f6dc9357SAndroid Build Coastguard Worker UString name (h.Name);
173*f6dc9357SAndroid Build Coastguard Worker s2.Replace(L"CRC", name);
174*f6dc9357SAndroid Build Coastguard Worker s2.Replace(L":", L"");
175*f6dc9357SAndroid Build Coastguard Worker AddHashString(pair, h, digestIndex);
176*f6dc9357SAndroid Build Coastguard Worker }
177*f6dc9357SAndroid Build Coastguard Worker
178*f6dc9357SAndroid Build Coastguard Worker
AddHashBundleRes(CPropNameValPairs & s,const CHashBundle & hb)179*f6dc9357SAndroid Build Coastguard Worker void AddHashBundleRes(CPropNameValPairs &s, const CHashBundle &hb)
180*f6dc9357SAndroid Build Coastguard Worker {
181*f6dc9357SAndroid Build Coastguard Worker if (hb.NumErrors != 0)
182*f6dc9357SAndroid Build Coastguard Worker AddValuePair(s, IDS_PROP_NUM_ERRORS, hb.NumErrors);
183*f6dc9357SAndroid Build Coastguard Worker
184*f6dc9357SAndroid Build Coastguard Worker if (hb.NumFiles == 1 && hb.NumDirs == 0 && !hb.FirstFileName.IsEmpty())
185*f6dc9357SAndroid Build Coastguard Worker {
186*f6dc9357SAndroid Build Coastguard Worker CProperty &pair = s.AddNew();
187*f6dc9357SAndroid Build Coastguard Worker LangString(IDS_PROP_NAME, pair.Name);
188*f6dc9357SAndroid Build Coastguard Worker pair.Value = hb.FirstFileName;
189*f6dc9357SAndroid Build Coastguard Worker }
190*f6dc9357SAndroid Build Coastguard Worker else
191*f6dc9357SAndroid Build Coastguard Worker {
192*f6dc9357SAndroid Build Coastguard Worker if (!hb.MainName.IsEmpty())
193*f6dc9357SAndroid Build Coastguard Worker {
194*f6dc9357SAndroid Build Coastguard Worker CProperty &pair = s.AddNew();
195*f6dc9357SAndroid Build Coastguard Worker LangString(IDS_PROP_NAME, pair.Name);
196*f6dc9357SAndroid Build Coastguard Worker pair.Value = hb.MainName;
197*f6dc9357SAndroid Build Coastguard Worker }
198*f6dc9357SAndroid Build Coastguard Worker if (hb.NumDirs != 0)
199*f6dc9357SAndroid Build Coastguard Worker AddValuePair(s, IDS_PROP_FOLDERS, hb.NumDirs);
200*f6dc9357SAndroid Build Coastguard Worker AddValuePair(s, IDS_PROP_FILES, hb.NumFiles);
201*f6dc9357SAndroid Build Coastguard Worker }
202*f6dc9357SAndroid Build Coastguard Worker
203*f6dc9357SAndroid Build Coastguard Worker AddSizeValuePair(s, IDS_PROP_SIZE, hb.FilesSize);
204*f6dc9357SAndroid Build Coastguard Worker
205*f6dc9357SAndroid Build Coastguard Worker if (hb.NumAltStreams != 0)
206*f6dc9357SAndroid Build Coastguard Worker {
207*f6dc9357SAndroid Build Coastguard Worker AddValuePair(s, IDS_PROP_NUM_ALT_STREAMS, hb.NumAltStreams);
208*f6dc9357SAndroid Build Coastguard Worker AddSizeValuePair(s, IDS_PROP_ALT_STREAMS_SIZE, hb.AltStreamsSize);
209*f6dc9357SAndroid Build Coastguard Worker }
210*f6dc9357SAndroid Build Coastguard Worker
211*f6dc9357SAndroid Build Coastguard Worker FOR_VECTOR (i, hb.Hashers)
212*f6dc9357SAndroid Build Coastguard Worker {
213*f6dc9357SAndroid Build Coastguard Worker const CHasherState &h = hb.Hashers[i];
214*f6dc9357SAndroid Build Coastguard Worker if (hb.NumFiles == 1 && hb.NumDirs == 0)
215*f6dc9357SAndroid Build Coastguard Worker {
216*f6dc9357SAndroid Build Coastguard Worker CProperty &pair = s.AddNew();
217*f6dc9357SAndroid Build Coastguard Worker pair.Name += h.Name;
218*f6dc9357SAndroid Build Coastguard Worker AddHashString(pair, h, k_HashCalc_Index_DataSum);
219*f6dc9357SAndroid Build Coastguard Worker }
220*f6dc9357SAndroid Build Coastguard Worker else
221*f6dc9357SAndroid Build Coastguard Worker {
222*f6dc9357SAndroid Build Coastguard Worker AddHashResString(s, h, k_HashCalc_Index_DataSum, IDS_CHECKSUM_CRC_DATA);
223*f6dc9357SAndroid Build Coastguard Worker AddHashResString(s, h, k_HashCalc_Index_NamesSum, IDS_CHECKSUM_CRC_DATA_NAMES);
224*f6dc9357SAndroid Build Coastguard Worker }
225*f6dc9357SAndroid Build Coastguard Worker if (hb.NumAltStreams != 0)
226*f6dc9357SAndroid Build Coastguard Worker {
227*f6dc9357SAndroid Build Coastguard Worker AddHashResString(s, h, k_HashCalc_Index_StreamsSum, IDS_CHECKSUM_CRC_STREAMS_NAMES);
228*f6dc9357SAndroid Build Coastguard Worker }
229*f6dc9357SAndroid Build Coastguard Worker }
230*f6dc9357SAndroid Build Coastguard Worker }
231*f6dc9357SAndroid Build Coastguard Worker
232*f6dc9357SAndroid Build Coastguard Worker
AddHashBundleRes(UString & s,const CHashBundle & hb)233*f6dc9357SAndroid Build Coastguard Worker void AddHashBundleRes(UString &s, const CHashBundle &hb)
234*f6dc9357SAndroid Build Coastguard Worker {
235*f6dc9357SAndroid Build Coastguard Worker CPropNameValPairs pairs;
236*f6dc9357SAndroid Build Coastguard Worker AddHashBundleRes(pairs, hb);
237*f6dc9357SAndroid Build Coastguard Worker
238*f6dc9357SAndroid Build Coastguard Worker FOR_VECTOR (i, pairs)
239*f6dc9357SAndroid Build Coastguard Worker {
240*f6dc9357SAndroid Build Coastguard Worker const CProperty &pair = pairs[i];
241*f6dc9357SAndroid Build Coastguard Worker s += pair.Name;
242*f6dc9357SAndroid Build Coastguard Worker s += ": ";
243*f6dc9357SAndroid Build Coastguard Worker s += pair.Value;
244*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
245*f6dc9357SAndroid Build Coastguard Worker }
246*f6dc9357SAndroid Build Coastguard Worker
247*f6dc9357SAndroid Build Coastguard Worker if (hb.NumErrors == 0 && hb.Hashers.IsEmpty())
248*f6dc9357SAndroid Build Coastguard Worker {
249*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
250*f6dc9357SAndroid Build Coastguard Worker AddLangString(s, IDS_MESSAGE_NO_ERRORS);
251*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
252*f6dc9357SAndroid Build Coastguard Worker }
253*f6dc9357SAndroid Build Coastguard Worker }
254*f6dc9357SAndroid Build Coastguard Worker
255*f6dc9357SAndroid Build Coastguard Worker
AfterLastFile(CHashBundle & hb)256*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::AfterLastFile(CHashBundle &hb)
257*f6dc9357SAndroid Build Coastguard Worker {
258*f6dc9357SAndroid Build Coastguard Worker hb.FirstFileName = FirstFileName;
259*f6dc9357SAndroid Build Coastguard Worker // MainPath
260*f6dc9357SAndroid Build Coastguard Worker AddHashBundleRes(PropNameValPairs, hb);
261*f6dc9357SAndroid Build Coastguard Worker
262*f6dc9357SAndroid Build Coastguard Worker CProgressSync &sync = Sync;
263*f6dc9357SAndroid Build Coastguard Worker sync.Set_NumFilesCur(hb.NumFiles);
264*f6dc9357SAndroid Build Coastguard Worker
265*f6dc9357SAndroid Build Coastguard Worker // CProgressMessageBoxPair &pair = GetMessagePair(hb.NumErrors != 0);
266*f6dc9357SAndroid Build Coastguard Worker // pair.Message = s;
267*f6dc9357SAndroid Build Coastguard Worker // LangString(IDS_CHECKSUM_INFORMATION, pair.Title);
268*f6dc9357SAndroid Build Coastguard Worker
269*f6dc9357SAndroid Build Coastguard Worker return S_OK;
270*f6dc9357SAndroid Build Coastguard Worker }
271*f6dc9357SAndroid Build Coastguard Worker
272*f6dc9357SAndroid Build Coastguard Worker
ProcessVirt()273*f6dc9357SAndroid Build Coastguard Worker HRESULT CHashCallbackGUI::ProcessVirt()
274*f6dc9357SAndroid Build Coastguard Worker {
275*f6dc9357SAndroid Build Coastguard Worker NumFiles = 0;
276*f6dc9357SAndroid Build Coastguard Worker AString errorInfo;
277*f6dc9357SAndroid Build Coastguard Worker HRESULT res = HashCalc(EXTERNAL_CODECS_LOC_VARS
278*f6dc9357SAndroid Build Coastguard Worker *censor, *options, errorInfo, this);
279*f6dc9357SAndroid Build Coastguard Worker return res;
280*f6dc9357SAndroid Build Coastguard Worker }
281*f6dc9357SAndroid Build Coastguard Worker
282*f6dc9357SAndroid Build Coastguard Worker
HashCalcGUI(DECL_EXTERNAL_CODECS_LOC_VARS const NWildcard::CCensor & censor,const CHashOptions & options,bool & messageWasDisplayed)283*f6dc9357SAndroid Build Coastguard Worker HRESULT HashCalcGUI(
284*f6dc9357SAndroid Build Coastguard Worker DECL_EXTERNAL_CODECS_LOC_VARS
285*f6dc9357SAndroid Build Coastguard Worker const NWildcard::CCensor &censor,
286*f6dc9357SAndroid Build Coastguard Worker const CHashOptions &options,
287*f6dc9357SAndroid Build Coastguard Worker bool &messageWasDisplayed)
288*f6dc9357SAndroid Build Coastguard Worker {
289*f6dc9357SAndroid Build Coastguard Worker CHashCallbackGUI t;
290*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_EXTERNAL_CODECS
291*f6dc9357SAndroid Build Coastguard Worker t._externalCodecs = _externalCodecs;
292*f6dc9357SAndroid Build Coastguard Worker #endif
293*f6dc9357SAndroid Build Coastguard Worker t.censor = &censor;
294*f6dc9357SAndroid Build Coastguard Worker t.options = &options;
295*f6dc9357SAndroid Build Coastguard Worker
296*f6dc9357SAndroid Build Coastguard Worker t.ShowCompressionInfo = false;
297*f6dc9357SAndroid Build Coastguard Worker
298*f6dc9357SAndroid Build Coastguard Worker const UString title = LangString(IDS_CHECKSUM_CALCULATING);
299*f6dc9357SAndroid Build Coastguard Worker
300*f6dc9357SAndroid Build Coastguard Worker t.MainTitle = "7-Zip"; // LangString(IDS_APP_TITLE);
301*f6dc9357SAndroid Build Coastguard Worker t.MainAddTitle = title;
302*f6dc9357SAndroid Build Coastguard Worker t.MainAddTitle.Add_Space();
303*f6dc9357SAndroid Build Coastguard Worker
304*f6dc9357SAndroid Build Coastguard Worker RINOK(t.Create(title))
305*f6dc9357SAndroid Build Coastguard Worker messageWasDisplayed = t.ThreadFinishedOK && t.MessagesDisplayed;
306*f6dc9357SAndroid Build Coastguard Worker return S_OK;
307*f6dc9357SAndroid Build Coastguard Worker }
308*f6dc9357SAndroid Build Coastguard Worker
309*f6dc9357SAndroid Build Coastguard Worker
ShowHashResults(const CPropNameValPairs & propPairs,HWND hwnd)310*f6dc9357SAndroid Build Coastguard Worker void ShowHashResults(const CPropNameValPairs &propPairs, HWND hwnd)
311*f6dc9357SAndroid Build Coastguard Worker {
312*f6dc9357SAndroid Build Coastguard Worker CListViewDialog lv;
313*f6dc9357SAndroid Build Coastguard Worker
314*f6dc9357SAndroid Build Coastguard Worker FOR_VECTOR (i, propPairs)
315*f6dc9357SAndroid Build Coastguard Worker {
316*f6dc9357SAndroid Build Coastguard Worker const CProperty &pair = propPairs[i];
317*f6dc9357SAndroid Build Coastguard Worker lv.Strings.Add(pair.Name);
318*f6dc9357SAndroid Build Coastguard Worker lv.Values.Add(pair.Value);
319*f6dc9357SAndroid Build Coastguard Worker }
320*f6dc9357SAndroid Build Coastguard Worker
321*f6dc9357SAndroid Build Coastguard Worker lv.Title = LangString(IDS_CHECKSUM_INFORMATION);
322*f6dc9357SAndroid Build Coastguard Worker lv.DeleteIsAllowed = true;
323*f6dc9357SAndroid Build Coastguard Worker lv.SelectFirst = false;
324*f6dc9357SAndroid Build Coastguard Worker lv.NumColumns = 2;
325*f6dc9357SAndroid Build Coastguard Worker
326*f6dc9357SAndroid Build Coastguard Worker lv.Create(hwnd);
327*f6dc9357SAndroid Build Coastguard Worker }
328*f6dc9357SAndroid Build Coastguard Worker
329*f6dc9357SAndroid Build Coastguard Worker
ShowHashResults(const CHashBundle & hb,HWND hwnd)330*f6dc9357SAndroid Build Coastguard Worker void ShowHashResults(const CHashBundle &hb, HWND hwnd)
331*f6dc9357SAndroid Build Coastguard Worker {
332*f6dc9357SAndroid Build Coastguard Worker CPropNameValPairs propPairs;
333*f6dc9357SAndroid Build Coastguard Worker AddHashBundleRes(propPairs, hb);
334*f6dc9357SAndroid Build Coastguard Worker ShowHashResults(propPairs, hwnd);
335*f6dc9357SAndroid Build Coastguard Worker }
336*f6dc9357SAndroid Build Coastguard Worker
ProcessWasFinished_GuiVirt()337*f6dc9357SAndroid Build Coastguard Worker void CHashCallbackGUI::ProcessWasFinished_GuiVirt()
338*f6dc9357SAndroid Build Coastguard Worker {
339*f6dc9357SAndroid Build Coastguard Worker if (Result != E_ABORT)
340*f6dc9357SAndroid Build Coastguard Worker ShowHashResults(PropNameValPairs, *this);
341*f6dc9357SAndroid Build Coastguard Worker }
342