misc/libphysfs/lzma/CPP/7zip/UI/Common/OpenArchive.h
changeset 13881 99b265e0d1d0
parent 13880 5f819b90d479
child 13882 b172a5d40eee
equal deleted inserted replaced
13880:5f819b90d479 13881:99b265e0d1d0
     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