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 
15 HRESULT GetArchiveItemBoolProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result);
16 HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result);
17 
18 struct 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 
CArcCArc29   CArc(): MTimeDefined(false) {}
30 
31   HRESULT GetItemPath(UInt32 index, UString &result) const;
32   HRESULT GetItemMTime(UInt32 index, FILETIME &ft, bool &defined) const;
IsItemAntiCArc33   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 
51 struct CArchiveLink
52 {
53   CObjectVector<CArc> Arcs;
54   UStringVector VolumePaths;
55   UInt64 VolumesSize;
56   bool IsOpen;
57 
CArchiveLinkCArchiveLink58   CArchiveLink(): VolumesSize(0), IsOpen(false) {}
59   HRESULT Close();
60   void Release();
~CArchiveLinkCArchiveLink61   ~CArchiveLink() { Release(); }
62 
GetArchiveCArchiveLink63   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