|
1 // OpenArchive.h |
|
2 |
|
3 #ifndef __OPENARCHIVE_H |
|
4 #define __OPENARCHIVE_H |
|
5 |
|
6 #include "Common/MyString.h" |
|
7 #include "Windows/FileFind.h" |
|
8 |
|
9 #include "../../Archive/IArchive.h" |
|
10 #include "LoadCodecs.h" |
|
11 #include "ArchiveOpenCallback.h" |
|
12 |
|
13 HRESULT GetArchiveItemPath(IInArchive *archive, UInt32 index, UString &result); |
|
14 HRESULT GetArchiveItemPath(IInArchive *archive, UInt32 index, const UString &defaultName, UString &result); |
|
15 HRESULT GetArchiveItemFileTime(IInArchive *archive, UInt32 index, |
|
16 const FILETIME &defaultFileTime, FILETIME &fileTime); |
|
17 HRESULT IsArchiveItemProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result); |
|
18 HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result); |
|
19 HRESULT IsArchiveItemAnti(IInArchive *archive, UInt32 index, bool &result); |
|
20 |
|
21 struct ISetSubArchiveName |
|
22 { |
|
23 virtual void SetSubArchiveName(const wchar_t *name) = 0; |
|
24 }; |
|
25 |
|
26 HRESULT OpenArchive( |
|
27 CCodecs *codecs, |
|
28 IInStream *inStream, |
|
29 const UString &fileName, |
|
30 IInArchive **archiveResult, |
|
31 int &formatIndex, |
|
32 UString &defaultItemName, |
|
33 IArchiveOpenCallback *openArchiveCallback); |
|
34 |
|
35 HRESULT OpenArchive( |
|
36 CCodecs *codecs, |
|
37 const UString &filePath, |
|
38 IInArchive **archive, |
|
39 int &formatIndex, |
|
40 UString &defaultItemName, |
|
41 IArchiveOpenCallback *openArchiveCallback); |
|
42 |
|
43 HRESULT OpenArchive( |
|
44 CCodecs *codecs, |
|
45 const UString &filePath, |
|
46 IInArchive **archive0, |
|
47 IInArchive **archive1, |
|
48 int &formatIndex0, |
|
49 int &formatIndex1, |
|
50 UString &defaultItemName0, |
|
51 UString &defaultItemName1, |
|
52 IArchiveOpenCallback *openArchiveCallback); |
|
53 |
|
54 |
|
55 HRESULT ReOpenArchive(IInArchive *archive, const UString &fileName, IArchiveOpenCallback *openArchiveCallback); |
|
56 |
|
57 HRESULT MyOpenArchive( |
|
58 CCodecs *codecs, |
|
59 const UString &archiveName, |
|
60 IInArchive **archive, |
|
61 UString &defaultItemName, |
|
62 IOpenCallbackUI *openCallbackUI); |
|
63 |
|
64 HRESULT MyOpenArchive( |
|
65 CCodecs *codecs, |
|
66 const UString &archiveName, |
|
67 IInArchive **archive0, |
|
68 IInArchive **archive1, |
|
69 UString &defaultItemName0, |
|
70 UString &defaultItemName1, |
|
71 UStringVector &volumePaths, |
|
72 UInt64 &volumesSize, |
|
73 IOpenCallbackUI *openCallbackUI); |
|
74 |
|
75 struct CArchiveLink |
|
76 { |
|
77 CMyComPtr<IInArchive> Archive0; |
|
78 CMyComPtr<IInArchive> Archive1; |
|
79 UString DefaultItemName0; |
|
80 UString DefaultItemName1; |
|
81 |
|
82 int FormatIndex0; |
|
83 int FormatIndex1; |
|
84 |
|
85 UStringVector VolumePaths; |
|
86 |
|
87 UInt64 VolumesSize; |
|
88 |
|
89 int GetNumLevels() const |
|
90 { |
|
91 int result = 0; |
|
92 if (Archive0) |
|
93 { |
|
94 result++; |
|
95 if (Archive1) |
|
96 result++; |
|
97 } |
|
98 return result; |
|
99 } |
|
100 |
|
101 bool IsOpen; |
|
102 |
|
103 CArchiveLink(): IsOpen(false), VolumesSize(0) {}; |
|
104 |
|
105 IInArchive *GetArchive() { return Archive1 != 0 ? Archive1: Archive0; } |
|
106 UString GetDefaultItemName() { return Archive1 != 0 ? DefaultItemName1: DefaultItemName0; } |
|
107 int GetArchiverIndex() const { return Archive1 != 0 ? FormatIndex1: FormatIndex0; } |
|
108 HRESULT Close(); |
|
109 void Release(); |
|
110 }; |
|
111 |
|
112 HRESULT OpenArchive( |
|
113 CCodecs *codecs, |
|
114 const UString &archiveName, |
|
115 CArchiveLink &archiveLink, |
|
116 IArchiveOpenCallback *openCallback); |
|
117 |
|
118 HRESULT MyOpenArchive( |
|
119 CCodecs *codecs, |
|
120 const UString &archiveName, |
|
121 CArchiveLink &archiveLink, |
|
122 IOpenCallbackUI *openCallbackUI); |
|
123 |
|
124 HRESULT ReOpenArchive( |
|
125 CCodecs *codecs, |
|
126 CArchiveLink &archiveLink, |
|
127 const UString &fileName); |
|
128 |
|
129 #endif |
|
130 |