xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/GUI/UpdateCallbackGUI2.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // UpdateCallbackGUI2.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 "../FileManager/LangUtils.h"
6*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/PasswordDialog.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "resource2.h"
9*f6dc9357SAndroid Build Coastguard Worker #include "resource3.h"
10*f6dc9357SAndroid Build Coastguard Worker #include "ExtractRes.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/resourceGui.h"
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker #include "UpdateCallbackGUI.h"
14*f6dc9357SAndroid Build Coastguard Worker 
15*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
16*f6dc9357SAndroid Build Coastguard Worker 
17*f6dc9357SAndroid Build Coastguard Worker static const UINT k_UpdNotifyLangs[] =
18*f6dc9357SAndroid Build Coastguard Worker {
19*f6dc9357SAndroid Build Coastguard Worker   IDS_PROGRESS_ADD,
20*f6dc9357SAndroid Build Coastguard Worker   IDS_PROGRESS_UPDATE,
21*f6dc9357SAndroid Build Coastguard Worker   IDS_PROGRESS_ANALYZE,
22*f6dc9357SAndroid Build Coastguard Worker   IDS_PROGRESS_REPLICATE,
23*f6dc9357SAndroid Build Coastguard Worker   IDS_PROGRESS_REPACK,
24*f6dc9357SAndroid Build Coastguard Worker   IDS_PROGRESS_SKIPPING,
25*f6dc9357SAndroid Build Coastguard Worker   IDS_PROGRESS_DELETE,
26*f6dc9357SAndroid Build Coastguard Worker   IDS_PROGRESS_HEADER
27*f6dc9357SAndroid Build Coastguard Worker };
28*f6dc9357SAndroid Build Coastguard Worker 
Init()29*f6dc9357SAndroid Build Coastguard Worker void CUpdateCallbackGUI2::Init()
30*f6dc9357SAndroid Build Coastguard Worker {
31*f6dc9357SAndroid Build Coastguard Worker   NumFiles = 0;
32*f6dc9357SAndroid Build Coastguard Worker 
33*f6dc9357SAndroid Build Coastguard Worker   LangString(IDS_PROGRESS_REMOVE, _lang_Removing);
34*f6dc9357SAndroid Build Coastguard Worker   LangString(IDS_MOVING, _lang_Moving);
35*f6dc9357SAndroid Build Coastguard Worker   _lang_Ops.Clear();
36*f6dc9357SAndroid Build Coastguard Worker   for (unsigned i = 0; i < Z7_ARRAY_SIZE(k_UpdNotifyLangs); i++)
37*f6dc9357SAndroid Build Coastguard Worker     _lang_Ops.Add(LangString(k_UpdNotifyLangs[i]));
38*f6dc9357SAndroid Build Coastguard Worker }
39*f6dc9357SAndroid Build Coastguard Worker 
SetOperation_Base(UInt32 notifyOp,const wchar_t * name,bool isDir)40*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackGUI2::SetOperation_Base(UInt32 notifyOp, const wchar_t *name, bool isDir)
41*f6dc9357SAndroid Build Coastguard Worker {
42*f6dc9357SAndroid Build Coastguard Worker   const UString *s = NULL;
43*f6dc9357SAndroid Build Coastguard Worker   if (notifyOp < _lang_Ops.Size())
44*f6dc9357SAndroid Build Coastguard Worker     s = &(_lang_Ops[(unsigned)notifyOp]);
45*f6dc9357SAndroid Build Coastguard Worker   else
46*f6dc9357SAndroid Build Coastguard Worker     s = &_emptyString;
47*f6dc9357SAndroid Build Coastguard Worker 
48*f6dc9357SAndroid Build Coastguard Worker   return ProgressDialog->Sync.Set_Status2(*s, name, isDir);
49*f6dc9357SAndroid Build Coastguard Worker }
50*f6dc9357SAndroid Build Coastguard Worker 
51*f6dc9357SAndroid Build Coastguard Worker 
ShowAskPasswordDialog()52*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackGUI2::ShowAskPasswordDialog()
53*f6dc9357SAndroid Build Coastguard Worker {
54*f6dc9357SAndroid Build Coastguard Worker   CPasswordDialog dialog;
55*f6dc9357SAndroid Build Coastguard Worker   ProgressDialog->WaitCreating();
56*f6dc9357SAndroid Build Coastguard Worker   if (dialog.Create(*ProgressDialog) != IDOK)
57*f6dc9357SAndroid Build Coastguard Worker     return E_ABORT;
58*f6dc9357SAndroid Build Coastguard Worker   Password = dialog.Password;
59*f6dc9357SAndroid Build Coastguard Worker   PasswordIsDefined = true;
60*f6dc9357SAndroid Build Coastguard Worker   return S_OK;
61*f6dc9357SAndroid Build Coastguard Worker }
62*f6dc9357SAndroid Build Coastguard Worker 
63*f6dc9357SAndroid Build Coastguard Worker 
MoveArc_UpdateStatus()64*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackGUI2::MoveArc_UpdateStatus()
65*f6dc9357SAndroid Build Coastguard Worker {
66*f6dc9357SAndroid Build Coastguard Worker   UString s;
67*f6dc9357SAndroid Build Coastguard Worker   s.Add_UInt64(_arcMoving_percents);
68*f6dc9357SAndroid Build Coastguard Worker   s.Add_Char('%');
69*f6dc9357SAndroid Build Coastguard Worker 
70*f6dc9357SAndroid Build Coastguard Worker   const bool totalDefined = (_arcMoving_total != 0 && _arcMoving_total != (UInt64)(Int64)-1);
71*f6dc9357SAndroid Build Coastguard Worker   if (totalDefined || _arcMoving_current != 0)
72*f6dc9357SAndroid Build Coastguard Worker   {
73*f6dc9357SAndroid Build Coastguard Worker     s += " : ";
74*f6dc9357SAndroid Build Coastguard Worker     s.Add_UInt64(_arcMoving_current >> 20);
75*f6dc9357SAndroid Build Coastguard Worker     s += " MiB";
76*f6dc9357SAndroid Build Coastguard Worker   }
77*f6dc9357SAndroid Build Coastguard Worker   if (totalDefined)
78*f6dc9357SAndroid Build Coastguard Worker   {
79*f6dc9357SAndroid Build Coastguard Worker     s += " / ";
80*f6dc9357SAndroid Build Coastguard Worker     s.Add_UInt64((_arcMoving_total + ((1 << 20) - 1)) >> 20);
81*f6dc9357SAndroid Build Coastguard Worker     s += " MiB";
82*f6dc9357SAndroid Build Coastguard Worker   }
83*f6dc9357SAndroid Build Coastguard Worker 
84*f6dc9357SAndroid Build Coastguard Worker   s += " : ";
85*f6dc9357SAndroid Build Coastguard Worker   s += _lang_Moving;
86*f6dc9357SAndroid Build Coastguard Worker   s += " : ";
87*f6dc9357SAndroid Build Coastguard Worker   // s.Add_Char('\"');
88*f6dc9357SAndroid Build Coastguard Worker   s += _arcMoving_name1;
89*f6dc9357SAndroid Build Coastguard Worker   // s.Add_Char('\"');
90*f6dc9357SAndroid Build Coastguard Worker   return ProgressDialog->Sync.Set_Status2(s, _arcMoving_name2,
91*f6dc9357SAndroid Build Coastguard Worker       false); // isDir
92*f6dc9357SAndroid Build Coastguard Worker }
93*f6dc9357SAndroid Build Coastguard Worker 
94*f6dc9357SAndroid Build Coastguard Worker 
MoveArc_Start_Base(const wchar_t * srcTempPath,const wchar_t * destFinalPath,UInt64 totalSize,Int32 updateMode)95*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackGUI2::MoveArc_Start_Base(const wchar_t *srcTempPath, const wchar_t *destFinalPath, UInt64 totalSize, Int32 updateMode)
96*f6dc9357SAndroid Build Coastguard Worker {
97*f6dc9357SAndroid Build Coastguard Worker   _arcMoving_percents = 0;
98*f6dc9357SAndroid Build Coastguard Worker   _arcMoving_total = totalSize;
99*f6dc9357SAndroid Build Coastguard Worker   _arcMoving_current = 0;
100*f6dc9357SAndroid Build Coastguard Worker   _arcMoving_updateMode = updateMode;
101*f6dc9357SAndroid Build Coastguard Worker   _arcMoving_name1 = srcTempPath;
102*f6dc9357SAndroid Build Coastguard Worker   _arcMoving_name2 = destFinalPath;
103*f6dc9357SAndroid Build Coastguard Worker   return MoveArc_UpdateStatus();
104*f6dc9357SAndroid Build Coastguard Worker }
105*f6dc9357SAndroid Build Coastguard Worker 
106*f6dc9357SAndroid Build Coastguard Worker 
MoveArc_Progress_Base(UInt64 totalSize,UInt64 currentSize)107*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackGUI2::MoveArc_Progress_Base(UInt64 totalSize, UInt64 currentSize)
108*f6dc9357SAndroid Build Coastguard Worker {
109*f6dc9357SAndroid Build Coastguard Worker   _arcMoving_total = totalSize;
110*f6dc9357SAndroid Build Coastguard Worker   _arcMoving_current = currentSize;
111*f6dc9357SAndroid Build Coastguard Worker   UInt64 percents = 0;
112*f6dc9357SAndroid Build Coastguard Worker   if (totalSize != 0)
113*f6dc9357SAndroid Build Coastguard Worker   {
114*f6dc9357SAndroid Build Coastguard Worker     if (totalSize < ((UInt64)1 << 57))
115*f6dc9357SAndroid Build Coastguard Worker       percents = currentSize * 100 / totalSize;
116*f6dc9357SAndroid Build Coastguard Worker     else
117*f6dc9357SAndroid Build Coastguard Worker       percents = currentSize / (totalSize / 100);
118*f6dc9357SAndroid Build Coastguard Worker   }
119*f6dc9357SAndroid Build Coastguard Worker   if (percents == _arcMoving_percents)
120*f6dc9357SAndroid Build Coastguard Worker     return ProgressDialog->Sync.CheckStop();
121*f6dc9357SAndroid Build Coastguard Worker   // Sleep(300); // for debug
122*f6dc9357SAndroid Build Coastguard Worker   _arcMoving_percents = percents;
123*f6dc9357SAndroid Build Coastguard Worker   return MoveArc_UpdateStatus();
124*f6dc9357SAndroid Build Coastguard Worker }
125*f6dc9357SAndroid Build Coastguard Worker 
126*f6dc9357SAndroid Build Coastguard Worker 
MoveArc_Finish_Base()127*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackGUI2::MoveArc_Finish_Base()
128*f6dc9357SAndroid Build Coastguard Worker {
129*f6dc9357SAndroid Build Coastguard Worker   return ProgressDialog->Sync.Set_Status2(L"", L"", false);
130*f6dc9357SAndroid Build Coastguard Worker }
131