00001
00002
00003
00004
00005 #ifndef __OPENARCHIVE_H
00006 #define __OPENARCHIVE_H
00007
00008 #include "String.h"
00009 #include "FileFind.h"
00010
00011 #include "IArchive.h"
00012 #include "ArchiverInfo.h"
00013 #include "ArchiveOpenCallback.h"
00014
00015 #ifndef EXCLUDE_COM
00016 #include "Windows/DLL.h"
00017 #endif
00018
00019 HRESULT GetArchiveItemPath(IInArchive *archive, UInt32 index, UString &result);
00020 HRESULT GetArchiveItemPath(IInArchive *archive, UInt32 index, const UString &defaultName, UString &result);
00021 HRESULT GetArchiveItemFileTime(IInArchive *archive, UInt32 index,
00022 const FILETIME &defaultFileTime, FILETIME &fileTime);
00023 HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result);
00024 HRESULT IsArchiveItemAnti(IInArchive *archive, UInt32 index, bool &result);
00025
00026 struct ISetSubArchiveName
00027 {
00028 virtual void SetSubArchiveName(const wchar_t *name) = 0;
00029 };
00030
00031 HRESULT OpenArchive(
00032 IInStream *inStream,
00033 const UString &fileName,
00034 #ifndef EXCLUDE_COM
00035 HMODULE *module,
00036 #endif
00037 IInArchive **archiveResult,
00038 CArchiverInfo &archiverInfoResult,
00039 UString &defaultItemName,
00040 IArchiveOpenCallback *openArchiveCallback);
00041
00042 HRESULT OpenArchive(const UString &filePath,
00043 #ifndef EXCLUDE_COM
00044 HMODULE *module,
00045 #endif
00046 IInArchive **archive,
00047 CArchiverInfo &archiverInfo,
00048 UString &defaultItemName,
00049 IArchiveOpenCallback *openArchiveCallback);
00050
00051 HRESULT OpenArchive(const UString &filePath,
00052 #ifndef EXCLUDE_COM
00053 HMODULE *module0,
00054 HMODULE *module1,
00055 #endif
00056 IInArchive **archive0,
00057 IInArchive **archive1,
00058 CArchiverInfo &archiverInfo0,
00059 CArchiverInfo &archiverInfo1,
00060 UString &defaultItemName0,
00061 UString &defaultItemName1,
00062 IArchiveOpenCallback *openArchiveCallback);
00063
00064 HRESULT ReOpenArchive(IInArchive *archive,
00065 const UString &fileName);
00066
00067 HRESULT MyOpenArchive(const UString &archiveName,
00068 #ifndef EXCLUDE_COM
00069 HMODULE *module,
00070 #endif
00071 IInArchive **archive,
00072 UString &defaultItemName,
00073 IOpenCallbackUI *openCallbackUI);
00074
00075 HRESULT MyOpenArchive(const UString &archiveName,
00076 #ifndef EXCLUDE_COM
00077 HMODULE *module0,
00078 HMODULE *module1,
00079 #endif
00080 IInArchive **archive0,
00081 IInArchive **archive1,
00082 UString &defaultItemName0,
00083 UString &defaultItemName1,
00084 UStringVector &volumePaths,
00085 IOpenCallbackUI *openCallbackUI);
00086
00087 struct CArchiveLink
00088 {
00089 #ifndef EXCLUDE_COM
00090 NWindows::NDLL::CLibrary Library0;
00091 NWindows::NDLL::CLibrary Library1;
00092 #endif
00093 CMyComPtr<IInArchive> Archive0;
00094 CMyComPtr<IInArchive> Archive1;
00095 UString DefaultItemName0;
00096 UString DefaultItemName1;
00097
00098 CArchiverInfo ArchiverInfo0;
00099 CArchiverInfo ArchiverInfo1;
00100
00101 UStringVector VolumePaths;
00102
00103 int GetNumLevels() const
00104 {
00105 int result = 0;
00106 if (Archive0)
00107 {
00108 result++;
00109 if (Archive1)
00110 result++;
00111 }
00112 return result;
00113 }
00114
00115 IInArchive *GetArchive() { return Archive1 != 0 ? Archive1: Archive0; }
00116 UString GetDefaultItemName() { return Archive1 != 0 ? DefaultItemName1: DefaultItemName0; }
00117 const CArchiverInfo &GetArchiverInfo() { return Archive1 != 0 ? ArchiverInfo1: ArchiverInfo0; }
00118 HRESULT Close();
00119 void Release();
00120 };
00121
00122 HRESULT OpenArchive(const UString &archiveName,
00123 CArchiveLink &archiveLink,
00124 IArchiveOpenCallback *openCallback);
00125
00126 HRESULT MyOpenArchive(const UString &archiveName,
00127 CArchiveLink &archiveLink,
00128 IOpenCallbackUI *openCallbackUI);
00129
00130 HRESULT ReOpenArchive(CArchiveLink &archiveLink,
00131 const UString &fileName);
00132
00133 #endif
00134