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