00001
00002
00003
00004
00005 #ifndef __ARCHIVEEXTRACTCALLBACK_H
00006 #define __ARCHIVEEXTRACTCALLBACK_H
00007
00008 #include "IArchive.h"
00009 #include "IFileExtractCallback.h"
00010
00011 #include "String.h"
00012 #include "MyCom.h"
00013
00014 #include "FileStreams.h"
00015 #include "IPassword.h"
00016
00017 #include "ExtractMode.h"
00018
00019 class CArchiveExtractCallback:
00020 public IArchiveExtractCallback,
00021
00022 public ICryptoGetTextPassword,
00023 public CMyUnknownImp
00024 {
00025 public:
00026 MY_UNKNOWN_IMP1(ICryptoGetTextPassword)
00027
00028
00029
00030 STDMETHOD(SetTotal)(UInt64 aize);
00031 STDMETHOD(SetCompleted)(const UInt64 *completeValue);
00032
00033
00034 STDMETHOD(GetStream)(UInt32 anIndex, ISequentialOutStream **outStream,
00035 Int32 askExtractMode);
00036 STDMETHOD(PrepareOperation)(Int32 askExtractMode);
00037 STDMETHOD(SetOperationResult)(Int32 resultEOperationResult);
00038
00039
00040
00041
00042
00043 STDMETHOD(CryptoGetTextPassword)(BSTR *aPassword);
00044
00045 private:
00046 CMyComPtr<IInArchive> _archiveHandler;
00047 CMyComPtr<IFolderArchiveExtractCallback> _extractCallback2;
00048 CMyComPtr<ICryptoGetTextPassword> _cryptoGetTextPassword;
00049 UString _directoryPath;
00050 NExtract::NPathMode::EEnum _pathMode;
00051 NExtract::NOverwriteMode::EEnum _overwriteMode;
00052
00053 UString _filePath;
00054 UInt64 _position;
00055 bool _isSplit;
00056
00057 UString _diskFilePath;
00058
00059 bool _extractMode;
00060 struct CProcessedFileInfo
00061 {
00062 FILETIME UTCLastWriteTime;
00063 bool IsDirectory;
00064 bool AttributesAreDefined;
00065 UInt32 Attributes;
00066 } _processedFileInfo;
00067
00068 COutFileStream *_outFileStreamSpec;
00069 CMyComPtr<ISequentialOutStream> _outFileStream;
00070 UStringVector _removePathParts;
00071
00072 UString _itemDefaultName;
00073 FILETIME _utcLastWriteTimeDefault;
00074 UInt32 _attributesDefault;
00075 bool _stdOutMode;
00076
00077 void CreateComplexDirectory(const UStringVector &dirPathParts);
00078 public:
00079 void Init(
00080 IInArchive *archiveHandler,
00081 IFolderArchiveExtractCallback *extractCallback2,
00082 bool stdOutMode,
00083 const UString &directoryPath,
00084 NExtract::NPathMode::EEnum pathMode,
00085 NExtract::NOverwriteMode::EEnum overwriteMode,
00086 const UStringVector &removePathParts,
00087 const UString &itemDefaultName,
00088 const FILETIME &utcLastWriteTimeDefault,
00089 UInt32 attributesDefault);
00090
00091 UInt64 _numErrors;
00092 };
00093
00094 #endif