1// OpenArchive.h 2 3#ifndef __OPEN_ARCHIVE_H 4#define __OPEN_ARCHIVE_H 5 6#include "Common/MyString.h" 7 8#include "Windows/FileFind.h" 9 10#include "../../Archive/IArchive.h" 11 12#include "ArchiveOpenCallback.h" 13#include "LoadCodecs.h" 14 15HRESULT GetArchiveItemBoolProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result); 16HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result); 17 18struct CArc 19{ 20 CMyComPtr<IInArchive> Archive; 21 UString Path; 22 UString DefaultName; 23 int FormatIndex; 24 int SubfileIndex; 25 FILETIME MTime; 26 bool MTimeDefined; 27 UString ErrorMessage; 28 29 CArc(): MTimeDefined(false) {} 30 31 HRESULT GetItemPath(UInt32 index, UString &result) const; 32 HRESULT GetItemMTime(UInt32 index, FILETIME &ft, bool &defined) const; 33 HRESULT IsItemAnti(UInt32 index, bool &result) const 34 { return GetArchiveItemBoolProp(Archive, index, kpidIsAnti, result); } 35 36 HRESULT OpenStream( 37 CCodecs *codecs, 38 int formatIndex, 39 IInStream *stream, 40 ISequentialInStream *seqStream, 41 IArchiveOpenCallback *callback); 42 43 HRESULT OpenStreamOrFile( 44 CCodecs *codecs, 45 int formatIndex, 46 bool stdInMode, 47 IInStream *stream, 48 IArchiveOpenCallback *callback); 49}; 50 51struct CArchiveLink 52{ 53 CObjectVector<CArc> Arcs; 54 UStringVector VolumePaths; 55 UInt64 VolumesSize; 56 bool IsOpen; 57 58 CArchiveLink(): VolumesSize(0), IsOpen(false) {} 59 HRESULT Close(); 60 void Release(); 61 ~CArchiveLink() { Release(); } 62 63 IInArchive *GetArchive() const { return Arcs.Back().Archive; } 64 65 HRESULT Open( 66 CCodecs *codecs, 67 const CIntVector &formatIndices, 68 bool stdInMode, 69 IInStream *stream, 70 const UString &filePath, 71 IArchiveOpenCallback *callback); 72 73 HRESULT Open2( 74 CCodecs *codecs, 75 const CIntVector &formatIndices, 76 bool stdInMode, 77 IInStream *stream, 78 const UString &filePath, 79 IOpenCallbackUI *callbackUI); 80 81 HRESULT ReOpen( 82 CCodecs *codecs, 83 const UString &filePath, 84 IArchiveOpenCallback *callback); 85}; 86 87#endif 88