1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// ArchiveOpenCallback.h 2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef __ARCHIVE_OPEN_CALLBACK_H 4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define __ARCHIVE_OPEN_CALLBACK_H 5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 6cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../../Common/MyCom.h" 7baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 8cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../../Windows/FileFind.h" 9baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 10baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef _NO_CRYPTO 11baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../../IPassword.h" 12baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 13baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../../Archive/IArchive.h" 14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifdef _NO_CRYPTO 16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define INTERFACE_IOpenCallbackUI_Crypto(x) 18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#else 20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define INTERFACE_IOpenCallbackUI_Crypto(x) \ 22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync virtual HRESULT Open_CryptoGetTextPassword(BSTR *password) x; \ 23cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT Open_GetPasswordIfAny(bool &passwordIsDefined, UString &password) x; \ 24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync virtual bool Open_WasPasswordAsked() x; \ 25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync virtual void Open_ClearPasswordWasAskedFlag() x; \ 26baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 28baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 29baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define INTERFACE_IOpenCallbackUI(x) \ 30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync virtual HRESULT Open_CheckBreak() x; \ 31baa3858d3f5d128a5c8466b700098109edcad5f2repo sync virtual HRESULT Open_SetTotal(const UInt64 *files, const UInt64 *bytes) x; \ 32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync virtual HRESULT Open_SetCompleted(const UInt64 *files, const UInt64 *bytes) x; \ 33baa3858d3f5d128a5c8466b700098109edcad5f2repo sync INTERFACE_IOpenCallbackUI_Crypto(x) 34baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 35baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstruct IOpenCallbackUI 36baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 37baa3858d3f5d128a5c8466b700098109edcad5f2repo sync INTERFACE_IOpenCallbackUI(=0) 38baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 39baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 40baa3858d3f5d128a5c8466b700098109edcad5f2repo syncclass COpenCallbackImp: 41baa3858d3f5d128a5c8466b700098109edcad5f2repo sync public IArchiveOpenCallback, 42baa3858d3f5d128a5c8466b700098109edcad5f2repo sync public IArchiveOpenVolumeCallback, 43baa3858d3f5d128a5c8466b700098109edcad5f2repo sync public IArchiveOpenSetSubArchiveName, 44baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifndef _NO_CRYPTO 45baa3858d3f5d128a5c8466b700098109edcad5f2repo sync public ICryptoGetTextPassword, 46baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 47baa3858d3f5d128a5c8466b700098109edcad5f2repo sync public CMyUnknownImp 48baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 49baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic: 50baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifndef _NO_CRYPTO 51baa3858d3f5d128a5c8466b700098109edcad5f2repo sync MY_UNKNOWN_IMP3( 52baa3858d3f5d128a5c8466b700098109edcad5f2repo sync IArchiveOpenVolumeCallback, 53baa3858d3f5d128a5c8466b700098109edcad5f2repo sync ICryptoGetTextPassword, 54baa3858d3f5d128a5c8466b700098109edcad5f2repo sync IArchiveOpenSetSubArchiveName 55baa3858d3f5d128a5c8466b700098109edcad5f2repo sync ) 56baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #else 57baa3858d3f5d128a5c8466b700098109edcad5f2repo sync MY_UNKNOWN_IMP2( 58baa3858d3f5d128a5c8466b700098109edcad5f2repo sync IArchiveOpenVolumeCallback, 59baa3858d3f5d128a5c8466b700098109edcad5f2repo sync IArchiveOpenSetSubArchiveName 60baa3858d3f5d128a5c8466b700098109edcad5f2repo sync ) 61baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 62baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 63baa3858d3f5d128a5c8466b700098109edcad5f2repo sync INTERFACE_IArchiveOpenCallback(;) 64baa3858d3f5d128a5c8466b700098109edcad5f2repo sync INTERFACE_IArchiveOpenVolumeCallback(;) 65baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 66baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifndef _NO_CRYPTO 67baa3858d3f5d128a5c8466b700098109edcad5f2repo sync STDMETHOD(CryptoGetTextPassword)(BSTR *password); 68baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 69baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 70baa3858d3f5d128a5c8466b700098109edcad5f2repo sync STDMETHOD(SetSubArchiveName(const wchar_t *name)) 71baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 72baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _subArchiveMode = true; 73baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _subArchiveName = name; 74cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // TotalSize = 0; 75cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return S_OK; 76baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 77baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 78baa3858d3f5d128a5c8466b700098109edcad5f2repo syncprivate: 79cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky FString _folderPrefix; 80cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky NWindows::NFile::NFind::CFileInfo _fileInfo; 81baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool _subArchiveMode; 82baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UString _subArchiveName; 83cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 84baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic: 85baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UStringVector FileNames; 86cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CBoolVector FileNames_WasUsed; 87cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CRecordVector<UInt64> FileSizes; 88cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 89baa3858d3f5d128a5c8466b700098109edcad5f2repo sync IOpenCallbackUI *Callback; 90baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CMyComPtr<IArchiveOpenCallback> ReOpenCallback; 91cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // UInt64 TotalSize; 92baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 93baa3858d3f5d128a5c8466b700098109edcad5f2repo sync COpenCallbackImp(): Callback(NULL) {} 94cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Init(const FString &folderPrefix, const FString &fileName) 95baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 96baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _folderPrefix = folderPrefix; 97baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (!_fileInfo.Find(_folderPrefix + fileName)) 98cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky throw 20121118; 99baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FileNames.Clear(); 100cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky FileNames_WasUsed.Clear(); 101cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky FileSizes.Clear(); 102baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _subArchiveMode = false; 103cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // TotalSize = 0; 104cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 105cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool SetSecondFileInfo(CFSTR newName) 106cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 107cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return _fileInfo.Find(newName) && !_fileInfo.IsDir(); 108baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 109baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 110baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 111baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 112