xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/Common/Update.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // Update.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_COMMON_UPDATE_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_COMMON_UPDATE_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/Wildcard.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "ArchiveOpenCallback.h"
9*f6dc9357SAndroid Build Coastguard Worker #include "LoadCodecs.h"
10*f6dc9357SAndroid Build Coastguard Worker #include "OpenArchive.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "Property.h"
12*f6dc9357SAndroid Build Coastguard Worker #include "UpdateAction.h"
13*f6dc9357SAndroid Build Coastguard Worker #include "UpdateCallback.h"
14*f6dc9357SAndroid Build Coastguard Worker 
15*f6dc9357SAndroid Build Coastguard Worker enum EArcNameMode
16*f6dc9357SAndroid Build Coastguard Worker {
17*f6dc9357SAndroid Build Coastguard Worker   k_ArcNameMode_Smart,
18*f6dc9357SAndroid Build Coastguard Worker   k_ArcNameMode_Exact,
19*f6dc9357SAndroid Build Coastguard Worker   k_ArcNameMode_Add
20*f6dc9357SAndroid Build Coastguard Worker };
21*f6dc9357SAndroid Build Coastguard Worker 
22*f6dc9357SAndroid Build Coastguard Worker struct CArchivePath
23*f6dc9357SAndroid Build Coastguard Worker {
24*f6dc9357SAndroid Build Coastguard Worker   UString OriginalPath;
25*f6dc9357SAndroid Build Coastguard Worker 
26*f6dc9357SAndroid Build Coastguard Worker   UString Prefix;   // path(folder) prefix including slash
27*f6dc9357SAndroid Build Coastguard Worker   UString Name; // base name
28*f6dc9357SAndroid Build Coastguard Worker   UString BaseExtension; // archive type extension or "exe" extension
29*f6dc9357SAndroid Build Coastguard Worker   UString VolExtension;  // archive type extension for volumes
30*f6dc9357SAndroid Build Coastguard Worker 
31*f6dc9357SAndroid Build Coastguard Worker   bool Temp;
32*f6dc9357SAndroid Build Coastguard Worker   FString TempPrefix;  // path(folder) for temp location
33*f6dc9357SAndroid Build Coastguard Worker   FString TempPostfix;
34*f6dc9357SAndroid Build Coastguard Worker 
CArchivePathCArchivePath35*f6dc9357SAndroid Build Coastguard Worker   CArchivePath(): Temp(false) {}
36*f6dc9357SAndroid Build Coastguard Worker 
37*f6dc9357SAndroid Build Coastguard Worker   void ParseFromPath(const UString &path, EArcNameMode mode);
GetPathWithoutExtCArchivePath38*f6dc9357SAndroid Build Coastguard Worker   UString GetPathWithoutExt() const { return Prefix + Name; }
39*f6dc9357SAndroid Build Coastguard Worker   UString GetFinalPath() const;
40*f6dc9357SAndroid Build Coastguard Worker   UString GetFinalVolPath() const;
41*f6dc9357SAndroid Build Coastguard Worker   FString GetTempPath() const;
42*f6dc9357SAndroid Build Coastguard Worker };
43*f6dc9357SAndroid Build Coastguard Worker 
44*f6dc9357SAndroid Build Coastguard Worker struct CUpdateArchiveCommand
45*f6dc9357SAndroid Build Coastguard Worker {
46*f6dc9357SAndroid Build Coastguard Worker   UString UserArchivePath;
47*f6dc9357SAndroid Build Coastguard Worker   CArchivePath ArchivePath;
48*f6dc9357SAndroid Build Coastguard Worker   NUpdateArchive::CActionSet ActionSet;
49*f6dc9357SAndroid Build Coastguard Worker };
50*f6dc9357SAndroid Build Coastguard Worker 
51*f6dc9357SAndroid Build Coastguard Worker struct CCompressionMethodMode
52*f6dc9357SAndroid Build Coastguard Worker {
53*f6dc9357SAndroid Build Coastguard Worker   bool Type_Defined;
54*f6dc9357SAndroid Build Coastguard Worker   COpenType Type;
55*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<CProperty> Properties;
56*f6dc9357SAndroid Build Coastguard Worker 
CCompressionMethodModeCCompressionMethodMode57*f6dc9357SAndroid Build Coastguard Worker   CCompressionMethodMode(): Type_Defined(false) {}
58*f6dc9357SAndroid Build Coastguard Worker };
59*f6dc9357SAndroid Build Coastguard Worker 
60*f6dc9357SAndroid Build Coastguard Worker namespace NRecursedType { enum EEnum
61*f6dc9357SAndroid Build Coastguard Worker {
62*f6dc9357SAndroid Build Coastguard Worker   kRecursed,
63*f6dc9357SAndroid Build Coastguard Worker   kWildcardOnlyRecursed,
64*f6dc9357SAndroid Build Coastguard Worker   kNonRecursed
65*f6dc9357SAndroid Build Coastguard Worker };}
66*f6dc9357SAndroid Build Coastguard Worker 
67*f6dc9357SAndroid Build Coastguard Worker struct CRenamePair
68*f6dc9357SAndroid Build Coastguard Worker {
69*f6dc9357SAndroid Build Coastguard Worker   UString OldName;
70*f6dc9357SAndroid Build Coastguard Worker   UString NewName;
71*f6dc9357SAndroid Build Coastguard Worker   bool WildcardParsing;
72*f6dc9357SAndroid Build Coastguard Worker   NRecursedType::EEnum RecursedType;
73*f6dc9357SAndroid Build Coastguard Worker 
CRenamePairCRenamePair74*f6dc9357SAndroid Build Coastguard Worker   CRenamePair(): WildcardParsing(true), RecursedType(NRecursedType::kNonRecursed) {}
75*f6dc9357SAndroid Build Coastguard Worker 
76*f6dc9357SAndroid Build Coastguard Worker   bool Prepare();
77*f6dc9357SAndroid Build Coastguard Worker   bool GetNewPath(bool isFolder, const UString &src, UString &dest) const;
78*f6dc9357SAndroid Build Coastguard Worker };
79*f6dc9357SAndroid Build Coastguard Worker 
80*f6dc9357SAndroid Build Coastguard Worker struct CUpdateOptions
81*f6dc9357SAndroid Build Coastguard Worker {
82*f6dc9357SAndroid Build Coastguard Worker   bool UpdateArchiveItself;
83*f6dc9357SAndroid Build Coastguard Worker   bool SfxMode;
84*f6dc9357SAndroid Build Coastguard Worker 
85*f6dc9357SAndroid Build Coastguard Worker   bool PreserveATime;
86*f6dc9357SAndroid Build Coastguard Worker   bool OpenShareForWrite;
87*f6dc9357SAndroid Build Coastguard Worker   bool StopAfterOpenError;
88*f6dc9357SAndroid Build Coastguard Worker 
89*f6dc9357SAndroid Build Coastguard Worker   bool StdInMode;
90*f6dc9357SAndroid Build Coastguard Worker   bool StdOutMode;
91*f6dc9357SAndroid Build Coastguard Worker 
92*f6dc9357SAndroid Build Coastguard Worker   bool EMailMode;
93*f6dc9357SAndroid Build Coastguard Worker   bool EMailRemoveAfter;
94*f6dc9357SAndroid Build Coastguard Worker 
95*f6dc9357SAndroid Build Coastguard Worker   bool DeleteAfterCompressing;
96*f6dc9357SAndroid Build Coastguard Worker   bool SetArcMTime;
97*f6dc9357SAndroid Build Coastguard Worker 
98*f6dc9357SAndroid Build Coastguard Worker   CBoolPair NtSecurity;
99*f6dc9357SAndroid Build Coastguard Worker   CBoolPair AltStreams;
100*f6dc9357SAndroid Build Coastguard Worker   CBoolPair HardLinks;
101*f6dc9357SAndroid Build Coastguard Worker   CBoolPair SymLinks;
102*f6dc9357SAndroid Build Coastguard Worker 
103*f6dc9357SAndroid Build Coastguard Worker   CBoolPair StoreOwnerId;
104*f6dc9357SAndroid Build Coastguard Worker   CBoolPair StoreOwnerName;
105*f6dc9357SAndroid Build Coastguard Worker 
106*f6dc9357SAndroid Build Coastguard Worker   EArcNameMode ArcNameMode;
107*f6dc9357SAndroid Build Coastguard Worker   NWildcard::ECensorPathMode PathMode;
108*f6dc9357SAndroid Build Coastguard Worker 
109*f6dc9357SAndroid Build Coastguard Worker   CCompressionMethodMode MethodMode;
110*f6dc9357SAndroid Build Coastguard Worker 
111*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<CUpdateArchiveCommand> Commands;
112*f6dc9357SAndroid Build Coastguard Worker   CArchivePath ArchivePath;
113*f6dc9357SAndroid Build Coastguard Worker 
114*f6dc9357SAndroid Build Coastguard Worker   FString SfxModule;
115*f6dc9357SAndroid Build Coastguard Worker   UString StdInFileName;
116*f6dc9357SAndroid Build Coastguard Worker   UString EMailAddress;
117*f6dc9357SAndroid Build Coastguard Worker   FString WorkingDir;
118*f6dc9357SAndroid Build Coastguard Worker   // UString AddPathPrefix;
119*f6dc9357SAndroid Build Coastguard Worker 
120*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<CRenamePair> RenamePairs;
121*f6dc9357SAndroid Build Coastguard Worker   CRecordVector<UInt64> VolumesSizes;
122*f6dc9357SAndroid Build Coastguard Worker 
123*f6dc9357SAndroid Build Coastguard Worker   bool InitFormatIndex(const CCodecs *codecs, const CObjectVector<COpenType> &types, const UString &arcPath);
124*f6dc9357SAndroid Build Coastguard Worker   bool SetArcPath(const CCodecs *codecs, const UString &arcPath);
125*f6dc9357SAndroid Build Coastguard Worker 
CUpdateOptionsCUpdateOptions126*f6dc9357SAndroid Build Coastguard Worker   CUpdateOptions():
127*f6dc9357SAndroid Build Coastguard Worker     UpdateArchiveItself(true),
128*f6dc9357SAndroid Build Coastguard Worker     SfxMode(false),
129*f6dc9357SAndroid Build Coastguard Worker 
130*f6dc9357SAndroid Build Coastguard Worker     PreserveATime(false),
131*f6dc9357SAndroid Build Coastguard Worker     OpenShareForWrite(false),
132*f6dc9357SAndroid Build Coastguard Worker     StopAfterOpenError(false),
133*f6dc9357SAndroid Build Coastguard Worker 
134*f6dc9357SAndroid Build Coastguard Worker     StdInMode(false),
135*f6dc9357SAndroid Build Coastguard Worker     StdOutMode(false),
136*f6dc9357SAndroid Build Coastguard Worker 
137*f6dc9357SAndroid Build Coastguard Worker     EMailMode(false),
138*f6dc9357SAndroid Build Coastguard Worker     EMailRemoveAfter(false),
139*f6dc9357SAndroid Build Coastguard Worker 
140*f6dc9357SAndroid Build Coastguard Worker     DeleteAfterCompressing(false),
141*f6dc9357SAndroid Build Coastguard Worker     SetArcMTime(false),
142*f6dc9357SAndroid Build Coastguard Worker 
143*f6dc9357SAndroid Build Coastguard Worker     ArcNameMode(k_ArcNameMode_Smart),
144*f6dc9357SAndroid Build Coastguard Worker     PathMode(NWildcard::k_RelatPath)
145*f6dc9357SAndroid Build Coastguard Worker 
146*f6dc9357SAndroid Build Coastguard Worker     {}
147*f6dc9357SAndroid Build Coastguard Worker 
SetActionCommand_AddCUpdateOptions148*f6dc9357SAndroid Build Coastguard Worker   void SetActionCommand_Add()
149*f6dc9357SAndroid Build Coastguard Worker   {
150*f6dc9357SAndroid Build Coastguard Worker     Commands.Clear();
151*f6dc9357SAndroid Build Coastguard Worker     CUpdateArchiveCommand c;
152*f6dc9357SAndroid Build Coastguard Worker     c.ActionSet = NUpdateArchive::k_ActionSet_Add;
153*f6dc9357SAndroid Build Coastguard Worker     Commands.Add(c);
154*f6dc9357SAndroid Build Coastguard Worker   }
155*f6dc9357SAndroid Build Coastguard Worker };
156*f6dc9357SAndroid Build Coastguard Worker 
157*f6dc9357SAndroid Build Coastguard Worker 
158*f6dc9357SAndroid Build Coastguard Worker struct CUpdateErrorInfo
159*f6dc9357SAndroid Build Coastguard Worker {
160*f6dc9357SAndroid Build Coastguard Worker   DWORD SystemError; // it's DWORD (WRes) only;
161*f6dc9357SAndroid Build Coastguard Worker   AString Message;
162*f6dc9357SAndroid Build Coastguard Worker   FStringVector FileNames;
163*f6dc9357SAndroid Build Coastguard Worker 
ThereIsErrorCUpdateErrorInfo164*f6dc9357SAndroid Build Coastguard Worker   bool ThereIsError() const { return SystemError != 0 || !Message.IsEmpty() || !FileNames.IsEmpty(); }
Get_HRESULT_ErrorCUpdateErrorInfo165*f6dc9357SAndroid Build Coastguard Worker   HRESULT Get_HRESULT_Error() const { return SystemError == 0 ? E_FAIL : HRESULT_FROM_WIN32(SystemError); }
166*f6dc9357SAndroid Build Coastguard Worker   void SetFromLastError(const char *message);
167*f6dc9357SAndroid Build Coastguard Worker   HRESULT SetFromLastError(const char *message, const FString &fileName);
168*f6dc9357SAndroid Build Coastguard Worker   HRESULT SetFromError_DWORD(const char *message, const FString &fileName, DWORD error);
169*f6dc9357SAndroid Build Coastguard Worker 
CUpdateErrorInfoCUpdateErrorInfo170*f6dc9357SAndroid Build Coastguard Worker   CUpdateErrorInfo(): SystemError(0) {}
171*f6dc9357SAndroid Build Coastguard Worker };
172*f6dc9357SAndroid Build Coastguard Worker 
173*f6dc9357SAndroid Build Coastguard Worker struct CFinishArchiveStat
174*f6dc9357SAndroid Build Coastguard Worker {
175*f6dc9357SAndroid Build Coastguard Worker   UInt64 OutArcFileSize;
176*f6dc9357SAndroid Build Coastguard Worker   unsigned NumVolumes;
177*f6dc9357SAndroid Build Coastguard Worker   bool IsMultiVolMode;
178*f6dc9357SAndroid Build Coastguard Worker 
CFinishArchiveStatCFinishArchiveStat179*f6dc9357SAndroid Build Coastguard Worker   CFinishArchiveStat(): OutArcFileSize(0), NumVolumes(0), IsMultiVolMode(false) {}
180*f6dc9357SAndroid Build Coastguard Worker };
181*f6dc9357SAndroid Build Coastguard Worker 
182*f6dc9357SAndroid Build Coastguard Worker Z7_PURE_INTERFACES_BEGIN
183*f6dc9357SAndroid Build Coastguard Worker 
184*f6dc9357SAndroid Build Coastguard Worker // INTERFACE_IUpdateCallbackUI(x)
185*f6dc9357SAndroid Build Coastguard Worker // INTERFACE_IDirItemsCallback(x)
186*f6dc9357SAndroid Build Coastguard Worker 
187*f6dc9357SAndroid Build Coastguard Worker #define Z7_IFACEN_IUpdateCallbackUI2(x) \
188*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT OpenResult(const CCodecs *codecs, const CArchiveLink &arcLink, const wchar_t *name, HRESULT result) x \
189*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT StartScanning() x \
190*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT FinishScanning(const CDirItemsStat &st) x \
191*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT StartOpenArchive(const wchar_t *name) x \
192*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT StartArchive(const wchar_t *name, bool updating) x \
193*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT FinishArchive(const CFinishArchiveStat &st) x \
194*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT DeletingAfterArchiving(const FString &path, bool isDir) x \
195*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT FinishDeletingAfterArchiving() x \
196*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT MoveArc_Start(const wchar_t *srcTempPath, const wchar_t *destFinalPath, UInt64 size, Int32 updateMode) x \
197*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT MoveArc_Progress(UInt64 total, UInt64 current) x \
198*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT MoveArc_Finish() x \
199*f6dc9357SAndroid Build Coastguard Worker 
DECLARE_INTERFACE(IUpdateCallbackUI2)200*f6dc9357SAndroid Build Coastguard Worker DECLARE_INTERFACE(IUpdateCallbackUI2):
201*f6dc9357SAndroid Build Coastguard Worker     public IUpdateCallbackUI,
202*f6dc9357SAndroid Build Coastguard Worker     public IDirItemsCallback
203*f6dc9357SAndroid Build Coastguard Worker {
204*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_PURE(IUpdateCallbackUI2)
205*f6dc9357SAndroid Build Coastguard Worker };
206*f6dc9357SAndroid Build Coastguard Worker Z7_PURE_INTERFACES_END
207*f6dc9357SAndroid Build Coastguard Worker 
208*f6dc9357SAndroid Build Coastguard Worker HRESULT UpdateArchive(
209*f6dc9357SAndroid Build Coastguard Worker     CCodecs *codecs,
210*f6dc9357SAndroid Build Coastguard Worker     const CObjectVector<COpenType> &types,
211*f6dc9357SAndroid Build Coastguard Worker     const UString &cmdArcPath2,
212*f6dc9357SAndroid Build Coastguard Worker     NWildcard::CCensor &censor,
213*f6dc9357SAndroid Build Coastguard Worker     CUpdateOptions &options,
214*f6dc9357SAndroid Build Coastguard Worker     CUpdateErrorInfo &errorInfo,
215*f6dc9357SAndroid Build Coastguard Worker     IOpenCallbackUI *openCallback,
216*f6dc9357SAndroid Build Coastguard Worker     IUpdateCallbackUI2 *callback,
217*f6dc9357SAndroid Build Coastguard Worker     bool needSetPath);
218*f6dc9357SAndroid Build Coastguard Worker 
219*f6dc9357SAndroid Build Coastguard Worker #endif
220