xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/Common/UpdateCallback.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // UpdateCallback.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_UPDATE_CALLBACK_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_UPDATE_CALLBACK_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyCom.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/FileStreams.h"
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker #include "../../IPassword.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "../../ICoder.h"
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker #include "../Common/UpdatePair.h"
14*f6dc9357SAndroid Build Coastguard Worker #include "../Common/UpdateProduce.h"
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker #include "OpenArchive.h"
17*f6dc9357SAndroid Build Coastguard Worker 
18*f6dc9357SAndroid Build Coastguard Worker struct CArcToDoStat
19*f6dc9357SAndroid Build Coastguard Worker {
20*f6dc9357SAndroid Build Coastguard Worker   CDirItemsStat2 NewData;
21*f6dc9357SAndroid Build Coastguard Worker   CDirItemsStat2 OldData;
22*f6dc9357SAndroid Build Coastguard Worker   CDirItemsStat2 DeleteData;
23*f6dc9357SAndroid Build Coastguard Worker 
Get_NumDataItems_TotalCArcToDoStat24*f6dc9357SAndroid Build Coastguard Worker   UInt64 Get_NumDataItems_Total() const
25*f6dc9357SAndroid Build Coastguard Worker   {
26*f6dc9357SAndroid Build Coastguard Worker     return NewData.Get_NumDataItems2() + OldData.Get_NumDataItems2();
27*f6dc9357SAndroid Build Coastguard Worker   }
28*f6dc9357SAndroid Build Coastguard Worker };
29*f6dc9357SAndroid Build Coastguard Worker 
30*f6dc9357SAndroid Build Coastguard Worker 
31*f6dc9357SAndroid Build Coastguard Worker Z7_PURE_INTERFACES_BEGIN
32*f6dc9357SAndroid Build Coastguard Worker 
33*f6dc9357SAndroid Build Coastguard Worker #define Z7_IFACEN_IUpdateCallbackUI(x) \
34*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT WriteSfx(const wchar_t *name, UInt64 size) x \
35*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT SetTotal(UInt64 size) x \
36*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT SetCompleted(const UInt64 *completeValue) x \
37*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) x \
38*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT CheckBreak() x \
39*f6dc9357SAndroid Build Coastguard Worker   /* virtual HRESULT Finalize() x */ \
40*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT SetNumItems(const CArcToDoStat &stat) x \
41*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT GetStream(const wchar_t *name, bool isDir, bool isAnti, UInt32 mode) x \
42*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT OpenFileError(const FString &path, DWORD systemError) x \
43*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT ReadingFileError(const FString &path, DWORD systemError) x \
44*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT SetOperationResult(Int32 opRes) x \
45*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT ReportExtractResult(Int32 opRes, Int32 isEncrypted, const wchar_t *name) x \
46*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT ReportUpdateOperation(UInt32 op, const wchar_t *name, bool isDir) x \
47*f6dc9357SAndroid Build Coastguard Worker   /* virtual HRESULT SetPassword(const UString &password) x */ \
48*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) x \
49*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT CryptoGetTextPassword(BSTR *password) x \
50*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT ShowDeleteFile(const wchar_t *name, bool isDir) x \
51*f6dc9357SAndroid Build Coastguard Worker 
52*f6dc9357SAndroid Build Coastguard Worker   /*
53*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT ReportProp(UInt32 indexType, UInt32 index, PROPID propID, const PROPVARIANT *value) x \
54*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT ReportRawProp(UInt32 indexType, UInt32 index, PROPID propID, const void *data, UInt32 dataSize, UInt32 propType) x \
55*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT ReportFinished(UInt32 indexType, UInt32 index, Int32 opRes) x \
56*f6dc9357SAndroid Build Coastguard Worker   */
57*f6dc9357SAndroid Build Coastguard Worker 
58*f6dc9357SAndroid Build Coastguard Worker   /* virtual HRESULT CloseProgress() { return S_OK; } */
59*f6dc9357SAndroid Build Coastguard Worker 
60*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_DECL_PURE(IUpdateCallbackUI)
61*f6dc9357SAndroid Build Coastguard Worker Z7_PURE_INTERFACES_END
62*f6dc9357SAndroid Build Coastguard Worker 
63*f6dc9357SAndroid Build Coastguard Worker struct CKeyKeyValPair
64*f6dc9357SAndroid Build Coastguard Worker {
65*f6dc9357SAndroid Build Coastguard Worker   UInt64 Key1;
66*f6dc9357SAndroid Build Coastguard Worker   UInt64 Key2;
67*f6dc9357SAndroid Build Coastguard Worker   unsigned Value;
68*f6dc9357SAndroid Build Coastguard Worker 
CompareCKeyKeyValPair69*f6dc9357SAndroid Build Coastguard Worker   int Compare(const CKeyKeyValPair &a) const
70*f6dc9357SAndroid Build Coastguard Worker   {
71*f6dc9357SAndroid Build Coastguard Worker     if (Key1 < a.Key1) return -1;
72*f6dc9357SAndroid Build Coastguard Worker     if (Key1 > a.Key1) return 1;
73*f6dc9357SAndroid Build Coastguard Worker     return MyCompare(Key2, a.Key2);
74*f6dc9357SAndroid Build Coastguard Worker   }
75*f6dc9357SAndroid Build Coastguard Worker };
76*f6dc9357SAndroid Build Coastguard Worker 
77*f6dc9357SAndroid Build Coastguard Worker 
78*f6dc9357SAndroid Build Coastguard Worker class CArchiveUpdateCallback Z7_final:
79*f6dc9357SAndroid Build Coastguard Worker   public IArchiveUpdateCallback2,
80*f6dc9357SAndroid Build Coastguard Worker   public IArchiveUpdateCallbackFile,
81*f6dc9357SAndroid Build Coastguard Worker   // public IArchiveUpdateCallbackArcProp,
82*f6dc9357SAndroid Build Coastguard Worker   public IArchiveExtractCallbackMessage2,
83*f6dc9357SAndroid Build Coastguard Worker   public IArchiveGetRawProps,
84*f6dc9357SAndroid Build Coastguard Worker   public IArchiveGetRootProps,
85*f6dc9357SAndroid Build Coastguard Worker   public ICryptoGetTextPassword2,
86*f6dc9357SAndroid Build Coastguard Worker   public ICryptoGetTextPassword,
87*f6dc9357SAndroid Build Coastguard Worker   public ICompressProgressInfo,
88*f6dc9357SAndroid Build Coastguard Worker   public IInFileStream_Callback,
89*f6dc9357SAndroid Build Coastguard Worker   public CMyUnknownImp
90*f6dc9357SAndroid Build Coastguard Worker {
91*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_BEGIN2(IArchiveUpdateCallback2)
92*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(IArchiveUpdateCallbackFile)
93*f6dc9357SAndroid Build Coastguard Worker     // Z7_COM_QI_ENTRY(IArchiveUpdateCallbackArcProp)
94*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(IArchiveExtractCallbackMessage2)
95*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(IArchiveGetRawProps)
96*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(IArchiveGetRootProps)
97*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(ICryptoGetTextPassword2)
98*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(ICryptoGetTextPassword)
99*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(ICompressProgressInfo)
100*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_END
101*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_ADDREF_RELEASE
102*f6dc9357SAndroid Build Coastguard Worker 
103*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(ICompressProgressInfo)
104*f6dc9357SAndroid Build Coastguard Worker 
105*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IProgress)
106*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IArchiveUpdateCallback)
107*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IArchiveUpdateCallback2)
108*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IArchiveUpdateCallbackFile)
109*f6dc9357SAndroid Build Coastguard Worker   // Z7_IFACE_COM7_IMP(IArchiveUpdateCallbackArcProp)
110*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IArchiveExtractCallbackMessage2)
111*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IArchiveGetRawProps)
112*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IArchiveGetRootProps)
113*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(ICryptoGetTextPassword2)
114*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(ICryptoGetTextPassword)
115*f6dc9357SAndroid Build Coastguard Worker 
116*f6dc9357SAndroid Build Coastguard Worker 
117*f6dc9357SAndroid Build Coastguard Worker   void UpdateProcessedItemStatus(unsigned dirIndex);
118*f6dc9357SAndroid Build Coastguard Worker 
119*f6dc9357SAndroid Build Coastguard Worker public:
120*f6dc9357SAndroid Build Coastguard Worker   bool PreserveATime;
121*f6dc9357SAndroid Build Coastguard Worker   bool ShareForWrite;
122*f6dc9357SAndroid Build Coastguard Worker   bool StopAfterOpenError;
123*f6dc9357SAndroid Build Coastguard Worker   bool StdInMode;
124*f6dc9357SAndroid Build Coastguard Worker 
125*f6dc9357SAndroid Build Coastguard Worker   bool KeepOriginalItemNames;
126*f6dc9357SAndroid Build Coastguard Worker   bool StoreNtSecurity;
127*f6dc9357SAndroid Build Coastguard Worker   bool StoreHardLinks;
128*f6dc9357SAndroid Build Coastguard Worker   bool StoreSymLinks;
129*f6dc9357SAndroid Build Coastguard Worker 
130*f6dc9357SAndroid Build Coastguard Worker   bool StoreOwnerId;
131*f6dc9357SAndroid Build Coastguard Worker   bool StoreOwnerName;
132*f6dc9357SAndroid Build Coastguard Worker 
133*f6dc9357SAndroid Build Coastguard Worker   bool Need_LatestMTime;
134*f6dc9357SAndroid Build Coastguard Worker   bool LatestMTime_Defined;
135*f6dc9357SAndroid Build Coastguard Worker 
136*f6dc9357SAndroid Build Coastguard Worker   /*
137*f6dc9357SAndroid Build Coastguard Worker   bool Need_ArcMTime_Report;
138*f6dc9357SAndroid Build Coastguard Worker   bool ArcMTime_WasReported;
139*f6dc9357SAndroid Build Coastguard Worker   */
140*f6dc9357SAndroid Build Coastguard Worker 
141*f6dc9357SAndroid Build Coastguard Worker   CRecordVector<UInt32> _openFiles_Indexes;
142*f6dc9357SAndroid Build Coastguard Worker   FStringVector _openFiles_Paths;
143*f6dc9357SAndroid Build Coastguard Worker   // CRecordVector< CInFileStream* > _openFiles_Streams;
144*f6dc9357SAndroid Build Coastguard Worker 
AreAllFilesClosed()145*f6dc9357SAndroid Build Coastguard Worker   bool AreAllFilesClosed() const { return _openFiles_Indexes.IsEmpty(); }
146*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT InFileStream_On_Error(UINT_PTR val, DWORD error) Z7_override;
147*f6dc9357SAndroid Build Coastguard Worker   virtual void InFileStream_On_Destroy(CInFileStream *stream, UINT_PTR val) Z7_override;
148*f6dc9357SAndroid Build Coastguard Worker 
149*f6dc9357SAndroid Build Coastguard Worker   IUpdateCallbackUI *Callback;
150*f6dc9357SAndroid Build Coastguard Worker 
151*f6dc9357SAndroid Build Coastguard Worker   const CDirItems *DirItems;
152*f6dc9357SAndroid Build Coastguard Worker   const CDirItem *ParentDirItem;
153*f6dc9357SAndroid Build Coastguard Worker 
154*f6dc9357SAndroid Build Coastguard Worker   const CArc *Arc;
155*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<IInArchive> Archive;
156*f6dc9357SAndroid Build Coastguard Worker   const CObjectVector<CArcItem> *ArcItems;
157*f6dc9357SAndroid Build Coastguard Worker   const CRecordVector<CUpdatePair2> *UpdatePairs;
158*f6dc9357SAndroid Build Coastguard Worker 
159*f6dc9357SAndroid Build Coastguard Worker   CRecordVector<UInt64> VolumesSizes;
160*f6dc9357SAndroid Build Coastguard Worker   FString VolName;
161*f6dc9357SAndroid Build Coastguard Worker   FString VolExt;
162*f6dc9357SAndroid Build Coastguard Worker   UString ArcFileName; // without path prefix
163*f6dc9357SAndroid Build Coastguard Worker 
164*f6dc9357SAndroid Build Coastguard Worker   const UStringVector *NewNames;
165*f6dc9357SAndroid Build Coastguard Worker   const UString *Comment;
166*f6dc9357SAndroid Build Coastguard Worker   int CommentIndex;
167*f6dc9357SAndroid Build Coastguard Worker 
168*f6dc9357SAndroid Build Coastguard Worker   /*
169*f6dc9357SAndroid Build Coastguard Worker   CArcTime Reported_ArcMTime;
170*f6dc9357SAndroid Build Coastguard Worker   */
171*f6dc9357SAndroid Build Coastguard Worker   CFiTime LatestMTime;
172*f6dc9357SAndroid Build Coastguard Worker 
173*f6dc9357SAndroid Build Coastguard Worker   Byte *ProcessedItemsStatuses;
174*f6dc9357SAndroid Build Coastguard Worker 
175*f6dc9357SAndroid Build Coastguard Worker 
176*f6dc9357SAndroid Build Coastguard Worker   CArchiveUpdateCallback();
177*f6dc9357SAndroid Build Coastguard Worker 
IsDir(const CUpdatePair2 & up)178*f6dc9357SAndroid Build Coastguard Worker   bool IsDir(const CUpdatePair2 &up) const
179*f6dc9357SAndroid Build Coastguard Worker   {
180*f6dc9357SAndroid Build Coastguard Worker     if (up.DirIndex >= 0)
181*f6dc9357SAndroid Build Coastguard Worker       return DirItems->Items[(unsigned)up.DirIndex].IsDir();
182*f6dc9357SAndroid Build Coastguard Worker     else if (up.ArcIndex >= 0)
183*f6dc9357SAndroid Build Coastguard Worker       return (*ArcItems)[(unsigned)up.ArcIndex].IsDir;
184*f6dc9357SAndroid Build Coastguard Worker     return false;
185*f6dc9357SAndroid Build Coastguard Worker   }
186*f6dc9357SAndroid Build Coastguard Worker 
187*f6dc9357SAndroid Build Coastguard Worker private:
188*f6dc9357SAndroid Build Coastguard Worker   #if defined(_WIN32) && !defined(UNDER_CE)
189*f6dc9357SAndroid Build Coastguard Worker   bool _saclEnabled;
190*f6dc9357SAndroid Build Coastguard Worker   #endif
191*f6dc9357SAndroid Build Coastguard Worker   CRecordVector<CKeyKeyValPair> _map;
192*f6dc9357SAndroid Build Coastguard Worker 
193*f6dc9357SAndroid Build Coastguard Worker   UInt32 _hardIndex_From;
194*f6dc9357SAndroid Build Coastguard Worker   UInt32 _hardIndex_To;
195*f6dc9357SAndroid Build Coastguard Worker };
196*f6dc9357SAndroid Build Coastguard Worker 
197*f6dc9357SAndroid Build Coastguard Worker #endif
198