1 // UpdateCallback.h 2 3 #ifndef __UPDATE_CALLBACK_H 4 #define __UPDATE_CALLBACK_H 5 6 #include "../../../Common/MyCom.h" 7 8 #include "../../IPassword.h" 9 #include "../../ICoder.h" 10 11 #include "../Common/UpdatePair.h" 12 #include "../Common/UpdateProduce.h" 13 14 #define INTERFACE_IUpdateCallbackUI(x) \ 15 virtual HRESULT SetTotal(UInt64 size) x; \ 16 virtual HRESULT SetCompleted(const UInt64 *completeValue) x; \ 17 virtual HRESULT SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) x; \ 18 virtual HRESULT CheckBreak() x; \ 19 virtual HRESULT Finilize() x; \ 20 virtual HRESULT SetNumFiles(UInt64 numFiles) x; \ 21 virtual HRESULT GetStream(const wchar_t *name, bool isAnti) x; \ 22 virtual HRESULT OpenFileError(const wchar_t *name, DWORD systemError) x; \ 23 virtual HRESULT SetOperationResult(Int32 operationResult) x; \ 24 virtual HRESULT CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) x; \ 25 virtual HRESULT CryptoGetTextPassword(BSTR *password) x; \ 26 /* virtual HRESULT ShowDeleteFile(const wchar_t *name) x; */ \ 27 /* virtual HRESULT CloseProgress() { return S_OK; }; */ 28 29 struct IUpdateCallbackUI 30 { 31 INTERFACE_IUpdateCallbackUI(=0) 32 }; 33 34 struct CKeyKeyValPair 35 { 36 UInt64 Key1; 37 UInt64 Key2; 38 unsigned Value; 39 CompareCKeyKeyValPair40 int Compare(const CKeyKeyValPair &a) const 41 { 42 if (Key1 < a.Key1) return -1; 43 if (Key1 > a.Key1) return 1; 44 return MyCompare(Key2, a.Key2); 45 } 46 }; 47 48 49 class CArchiveUpdateCallback: 50 public IArchiveUpdateCallback2, 51 public IArchiveGetRawProps, 52 public IArchiveGetRootProps, 53 public ICryptoGetTextPassword2, 54 public ICryptoGetTextPassword, 55 public ICompressProgressInfo, 56 public CMyUnknownImp 57 { 58 #if defined(_WIN32) && !defined(UNDER_CE) 59 bool _saclEnabled; 60 #endif 61 CRecordVector<CKeyKeyValPair> _map; 62 63 UInt32 _hardIndex_From; 64 UInt32 _hardIndex_To; 65 66 public: 67 MY_UNKNOWN_IMP6( 68 IArchiveUpdateCallback2, 69 IArchiveGetRawProps, 70 IArchiveGetRootProps, 71 ICryptoGetTextPassword2, 72 ICryptoGetTextPassword, 73 ICompressProgressInfo) 74 75 STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); 76 77 INTERFACE_IArchiveUpdateCallback2(;) 78 INTERFACE_IArchiveGetRawProps(;) 79 INTERFACE_IArchiveGetRootProps(;) 80 81 STDMETHOD(CryptoGetTextPassword2)(Int32 *passwordIsDefined, BSTR *password); 82 STDMETHOD(CryptoGetTextPassword)(BSTR *password); 83 84 CRecordVector<UInt64> VolumesSizes; 85 FString VolName; 86 FString VolExt; 87 88 IUpdateCallbackUI *Callback; 89 90 bool ShareForWrite; 91 bool StdInMode; 92 93 const CDirItems *DirItems; 94 const CDirItem *ParentDirItem; 95 96 const CObjectVector<CArcItem> *ArcItems; 97 const CRecordVector<CUpdatePair2> *UpdatePairs; 98 const UStringVector *NewNames; 99 CMyComPtr<IInArchive> Archive; 100 CMyComPtr<IArchiveGetRawProps> GetRawProps; 101 CMyComPtr<IArchiveGetRootProps> GetRootProps; 102 103 bool KeepOriginalItemNames; 104 bool StoreNtSecurity; 105 bool StoreHardLinks; 106 bool StoreSymLinks; 107 108 Byte *ProcessedItemsStatuses; 109 110 CArchiveUpdateCallback(); 111 IsDir(const CUpdatePair2 & up)112 bool IsDir(const CUpdatePair2 &up) const 113 { 114 if (up.DirIndex >= 0) 115 return DirItems->Items[up.DirIndex].IsDir(); 116 else if (up.ArcIndex >= 0) 117 return (*ArcItems)[up.ArcIndex].IsDir; 118 return false; 119 } 120 }; 121 122 #endif 123