// OpenArchive.h #ifndef __OPEN_ARCHIVE_H #define __OPEN_ARCHIVE_H #include "Common/MyString.h" #include "Windows/FileFind.h" #include "../../Archive/IArchive.h" #include "ArchiveOpenCallback.h" #include "LoadCodecs.h" HRESULT GetArchiveItemBoolProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result); HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result); struct CArc { CMyComPtr Archive; UString Path; UString DefaultName; int FormatIndex; int SubfileIndex; FILETIME MTime; bool MTimeDefined; UString ErrorMessage; CArc(): MTimeDefined(false) {} HRESULT GetItemPath(UInt32 index, UString &result) const; HRESULT GetItemMTime(UInt32 index, FILETIME &ft, bool &defined) const; HRESULT IsItemAnti(UInt32 index, bool &result) const { return GetArchiveItemBoolProp(Archive, index, kpidIsAnti, result); } HRESULT OpenStream( CCodecs *codecs, int formatIndex, IInStream *stream, ISequentialInStream *seqStream, IArchiveOpenCallback *callback); HRESULT OpenStreamOrFile( CCodecs *codecs, int formatIndex, bool stdInMode, IInStream *stream, IArchiveOpenCallback *callback); }; struct CArchiveLink { CObjectVector Arcs; UStringVector VolumePaths; UInt64 VolumesSize; bool IsOpen; CArchiveLink(): VolumesSize(0), IsOpen(false) {} HRESULT Close(); void Release(); ~CArchiveLink() { Release(); } IInArchive *GetArchive() const { return Arcs.Back().Archive; } HRESULT Open( CCodecs *codecs, const CIntVector &formatIndices, bool stdInMode, IInStream *stream, const UString &filePath, IArchiveOpenCallback *callback); HRESULT Open2( CCodecs *codecs, const CIntVector &formatIndices, bool stdInMode, IInStream *stream, const UString &filePath, IOpenCallbackUI *callbackUI); HRESULT ReOpen( CCodecs *codecs, const UString &filePath, IArchiveOpenCallback *callback); }; #endif