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