ArchiveExtractCallback.h 3.6 KB

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