michael@0: // IArchive.h michael@0: michael@0: #ifndef __IARCHIVE_H michael@0: #define __IARCHIVE_H michael@0: michael@0: #include "../IStream.h" michael@0: #include "../IProgress.h" michael@0: #include "../PropID.h" michael@0: michael@0: // MIDL_INTERFACE("23170F69-40C1-278A-0000-000600xx0000") michael@0: #define ARCHIVE_INTERFACE_SUB(i, base, x) \ michael@0: DEFINE_GUID(IID_ ## i, \ michael@0: 0x23170F69, 0x40C1, 0x278A, 0x00, 0x00, 0x00, 0x06, 0x00, x, 0x00, 0x00); \ michael@0: struct i: public base michael@0: michael@0: #define ARCHIVE_INTERFACE(i, x) ARCHIVE_INTERFACE_SUB(i, IUnknown, x) michael@0: michael@0: namespace NFileTimeType michael@0: { michael@0: enum EEnum michael@0: { michael@0: kWindows, michael@0: kUnix, michael@0: kDOS michael@0: }; michael@0: } michael@0: michael@0: namespace NArchive michael@0: { michael@0: enum michael@0: { michael@0: kName = 0, michael@0: kClassID, michael@0: kExtension, michael@0: kAddExtension, michael@0: kUpdate, michael@0: kKeepName, michael@0: kStartSignature, michael@0: kFinishSignature, michael@0: kAssociate michael@0: }; michael@0: michael@0: namespace NExtract michael@0: { michael@0: namespace NAskMode michael@0: { michael@0: enum michael@0: { michael@0: kExtract = 0, michael@0: kTest, michael@0: kSkip, michael@0: }; michael@0: } michael@0: namespace NOperationResult michael@0: { michael@0: enum michael@0: { michael@0: kOK = 0, michael@0: kUnSupportedMethod, michael@0: kDataError, michael@0: kCRCError, michael@0: }; michael@0: } michael@0: } michael@0: namespace NUpdate michael@0: { michael@0: namespace NOperationResult michael@0: { michael@0: enum michael@0: { michael@0: kOK = 0, michael@0: kError, michael@0: }; michael@0: } michael@0: } michael@0: } michael@0: michael@0: ARCHIVE_INTERFACE(IArchiveOpenCallback, 0x10) michael@0: { michael@0: STDMETHOD(SetTotal)(const UInt64 *files, const UInt64 *bytes) PURE; michael@0: STDMETHOD(SetCompleted)(const UInt64 *files, const UInt64 *bytes) PURE; michael@0: }; michael@0: michael@0: michael@0: ARCHIVE_INTERFACE_SUB(IArchiveExtractCallback, IProgress, 0x20) michael@0: { michael@0: STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, michael@0: Int32 askExtractMode) PURE; michael@0: // GetStream OUT: S_OK - OK, S_FALSE - skeep this file michael@0: STDMETHOD(PrepareOperation)(Int32 askExtractMode) PURE; michael@0: STDMETHOD(SetOperationResult)(Int32 resultEOperationResult) PURE; michael@0: }; michael@0: michael@0: michael@0: ARCHIVE_INTERFACE(IArchiveOpenVolumeCallback, 0x30) michael@0: { michael@0: STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value) PURE; michael@0: STDMETHOD(GetStream)(const wchar_t *name, IInStream **inStream) PURE; michael@0: }; michael@0: michael@0: michael@0: ARCHIVE_INTERFACE(IInArchiveGetStream, 0x40) michael@0: { michael@0: STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream) PURE; michael@0: }; michael@0: michael@0: michael@0: ARCHIVE_INTERFACE(IArchiveOpenSetSubArchiveName, 0x50) michael@0: { michael@0: STDMETHOD(SetSubArchiveName)(const wchar_t *name) PURE; michael@0: }; michael@0: michael@0: michael@0: ARCHIVE_INTERFACE(IInArchive, 0x60) michael@0: { michael@0: STDMETHOD(Open)(IInStream *stream, const UInt64 *maxCheckStartPosition, michael@0: IArchiveOpenCallback *openArchiveCallback) PURE; michael@0: STDMETHOD(Close)() PURE; michael@0: STDMETHOD(GetNumberOfItems)(UInt32 *numItems) PURE; michael@0: STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE; michael@0: STDMETHOD(Extract)(const UInt32* indices, UInt32 numItems, michael@0: Int32 testMode, IArchiveExtractCallback *extractCallback) PURE; michael@0: // indices must be sorted michael@0: // numItems = 0xFFFFFFFF means all files michael@0: // testMode != 0 means "test files operation" michael@0: michael@0: STDMETHOD(GetArchiveProperty)(PROPID propID, PROPVARIANT *value) PURE; michael@0: michael@0: STDMETHOD(GetNumberOfProperties)(UInt32 *numProperties) PURE; michael@0: STDMETHOD(GetPropertyInfo)(UInt32 index, michael@0: BSTR *name, PROPID *propID, VARTYPE *varType) PURE; michael@0: michael@0: STDMETHOD(GetNumberOfArchiveProperties)(UInt32 *numProperties) PURE; michael@0: STDMETHOD(GetArchivePropertyInfo)(UInt32 index, michael@0: BSTR *name, PROPID *propID, VARTYPE *varType) PURE; michael@0: }; michael@0: michael@0: michael@0: ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback, IProgress, 0x80) michael@0: { michael@0: STDMETHOD(GetUpdateItemInfo)(UInt32 index, michael@0: Int32 *newData, // 1 - new data, 0 - old data michael@0: Int32 *newProperties, // 1 - new properties, 0 - old properties michael@0: UInt32 *indexInArchive // -1 if there is no in archive, or if doesn't matter michael@0: ) PURE; michael@0: STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE; michael@0: STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **inStream) PURE; michael@0: STDMETHOD(SetOperationResult)(Int32 operationResult) PURE; michael@0: }; michael@0: michael@0: michael@0: ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback2, IArchiveUpdateCallback, 0x82) michael@0: { michael@0: STDMETHOD(GetVolumeSize)(UInt32 index, UInt64 *size) PURE; michael@0: STDMETHOD(GetVolumeStream)(UInt32 index, ISequentialOutStream **volumeStream) PURE; michael@0: }; michael@0: michael@0: michael@0: ARCHIVE_INTERFACE(IOutArchive, 0xA0) michael@0: { michael@0: STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems, michael@0: IArchiveUpdateCallback *updateCallback) PURE; michael@0: STDMETHOD(GetFileTimeType)(UInt32 *type) PURE; michael@0: }; michael@0: michael@0: michael@0: ARCHIVE_INTERFACE(ISetProperties, 0x03) michael@0: { michael@0: STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) PURE; michael@0: }; michael@0: michael@0: michael@0: #endif