misc/libphysfs/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h
changeset 13881 99b265e0d1d0
parent 13880 5f819b90d479
child 13882 b172a5d40eee
equal deleted inserted replaced
13880:5f819b90d479 13881:99b265e0d1d0
     1 // ArchiveExtractCallback.h
       
     2 
       
     3 #ifndef __ARCHIVEEXTRACTCALLBACK_H
       
     4 #define __ARCHIVEEXTRACTCALLBACK_H
       
     5 
       
     6 #include "../../Archive/IArchive.h"
       
     7 #include "IFileExtractCallback.h"
       
     8 
       
     9 #include "Common/MyString.h"
       
    10 #include "Common/MyCom.h"
       
    11 
       
    12 #include "../../Common/FileStreams.h"
       
    13 #include "../../Common/ProgressUtils.h"
       
    14 #include "../../IPassword.h"
       
    15 
       
    16 #include "ExtractMode.h"
       
    17 
       
    18 class CArchiveExtractCallback: 
       
    19   public IArchiveExtractCallback,
       
    20   // public IArchiveVolumeExtractCallback,
       
    21   public ICryptoGetTextPassword,
       
    22   public ICompressProgressInfo,
       
    23   public CMyUnknownImp
       
    24 {
       
    25 public:
       
    26   MY_UNKNOWN_IMP2(ICryptoGetTextPassword, ICompressProgressInfo)
       
    27   // COM_INTERFACE_ENTRY(IArchiveVolumeExtractCallback)
       
    28 
       
    29   // IProgress
       
    30   STDMETHOD(SetTotal)(UInt64 size);
       
    31   STDMETHOD(SetCompleted)(const UInt64 *completeValue);
       
    32   STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
       
    33 
       
    34   // IExtractCallBack
       
    35   STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode);
       
    36   STDMETHOD(PrepareOperation)(Int32 askExtractMode);
       
    37   STDMETHOD(SetOperationResult)(Int32 resultEOperationResult);
       
    38 
       
    39   // IArchiveVolumeExtractCallback
       
    40   // STDMETHOD(GetInStream)(const wchar_t *name, ISequentialInStream **inStream);
       
    41 
       
    42   // ICryptoGetTextPassword
       
    43   STDMETHOD(CryptoGetTextPassword)(BSTR *aPassword);
       
    44 
       
    45 private:
       
    46   CMyComPtr<IInArchive> _archiveHandler;
       
    47   CMyComPtr<IFolderArchiveExtractCallback> _extractCallback2;
       
    48   CMyComPtr<ICompressProgressInfo> _compressProgress;
       
    49   CMyComPtr<ICryptoGetTextPassword> _cryptoGetTextPassword;
       
    50   UString _directoryPath;
       
    51   NExtract::NPathMode::EEnum _pathMode;
       
    52   NExtract::NOverwriteMode::EEnum _overwriteMode;
       
    53 
       
    54   UString _filePath;
       
    55   UInt64 _position;
       
    56   bool _isSplit;
       
    57 
       
    58   UString _diskFilePath;
       
    59 
       
    60   bool _extractMode;
       
    61 
       
    62   bool WriteModified;
       
    63   bool WriteCreated;
       
    64   bool WriteAccessed;
       
    65 
       
    66   bool _encrypted;
       
    67 
       
    68   struct CProcessedFileInfo
       
    69   {
       
    70     FILETIME CreationTime;
       
    71     FILETIME LastWriteTime;
       
    72     FILETIME LastAccessTime;
       
    73     UInt32 Attributes;
       
    74   
       
    75     bool IsCreationTimeDefined;
       
    76     bool IsLastWriteTimeDefined;
       
    77     bool IsLastAccessTimeDefined;
       
    78 
       
    79     bool IsDirectory;
       
    80     bool AttributesAreDefined;
       
    81   } _processedFileInfo;
       
    82 
       
    83   UInt64 _curSize;
       
    84   COutFileStream *_outFileStreamSpec;
       
    85   CMyComPtr<ISequentialOutStream> _outFileStream;
       
    86   UStringVector _removePathParts;
       
    87 
       
    88   UString _itemDefaultName;
       
    89   FILETIME _utcLastWriteTimeDefault;
       
    90   UInt32 _attributesDefault;
       
    91   bool _stdOutMode;
       
    92 
       
    93   void CreateComplexDirectory(const UStringVector &dirPathParts, UString &fullPath);
       
    94   HRESULT GetTime(int index, PROPID propID, FILETIME &filetime, bool &filetimeIsDefined);
       
    95 public:
       
    96   CArchiveExtractCallback():
       
    97       WriteModified(true),
       
    98       WriteCreated(false),
       
    99       WriteAccessed(false),
       
   100       _multiArchives(false)
       
   101   {
       
   102     LocalProgressSpec = new CLocalProgress();
       
   103     _localProgress = LocalProgressSpec;
       
   104   }
       
   105 
       
   106   CLocalProgress *LocalProgressSpec;
       
   107   CMyComPtr<ICompressProgressInfo> _localProgress;
       
   108   UInt64 _packTotal;
       
   109   UInt64 _unpTotal;
       
   110 
       
   111   bool _multiArchives;
       
   112   UInt64 NumFolders;
       
   113   UInt64 NumFiles;
       
   114   UInt64 UnpackSize;
       
   115   
       
   116   void InitForMulti(bool multiArchives, 
       
   117       NExtract::NPathMode::EEnum pathMode,
       
   118       NExtract::NOverwriteMode::EEnum overwriteMode) 
       
   119   { 
       
   120     _multiArchives = multiArchives; NumFolders = NumFiles = UnpackSize = 0; 
       
   121     _pathMode = pathMode;
       
   122     _overwriteMode = overwriteMode;
       
   123   }
       
   124 
       
   125   void Init(
       
   126       IInArchive *archiveHandler, 
       
   127       IFolderArchiveExtractCallback *extractCallback2,
       
   128       bool stdOutMode,
       
   129       const UString &directoryPath,
       
   130       const UStringVector &removePathParts,
       
   131       const UString &itemDefaultName,
       
   132       const FILETIME &utcLastWriteTimeDefault, 
       
   133       UInt32 attributesDefault,
       
   134       UInt64 packSize);
       
   135 
       
   136   UInt64 _numErrors;
       
   137 };
       
   138 
       
   139 #endif