Home | History | Annotate | Download | only in Common
      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 
     29   CArc(): MTimeDefined(false) {}
     30 
     31   HRESULT GetItemPath(UInt32 index, UString &result) const;
     32   HRESULT GetItemMTime(UInt32 index, FILETIME &ft, bool &defined) const;
     33   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 
     58   CArchiveLink(): VolumesSize(0), IsOpen(false) {}
     59   HRESULT Close();
     60   void Release();
     61   ~CArchiveLink() { Release(); }
     62 
     63   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