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