Upload 2.0.2
[physicsfs] / lzma / CPP / 7zip / UI / Common / OpenArchive.h
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