diff options
author | Igor Pavlov <ipavlov@users.sourceforge.net> | 2015-08-16 03:00:00 +0300 |
---|---|---|
committer | Kornel LesiĆski <kornel@geekhood.net> | 2016-05-28 02:16:55 +0300 |
commit | cba375916fb18db8b9101aedf4fa079e019311b3 (patch) | |
tree | 6275ae5fc2a8dd337ab0327180c871807e6ba5d4 /CPP/7zip/UI/Far | |
parent | 54490d51d5c6b0d794dcbad2d634d4c95fc25b6c (diff) |
15.0615.06
Diffstat (limited to 'CPP/7zip/UI/Far')
-rw-r--r-- | CPP/7zip/UI/Far/Far.cpp | 29 | ||||
-rw-r--r-- | CPP/7zip/UI/Far/Messages.h | 2 |
2 files changed, 29 insertions, 2 deletions
diff --git a/CPP/7zip/UI/Far/Far.cpp b/CPP/7zip/UI/Far/Far.cpp index 3ae5bba2..d5656e29 100644 --- a/CPP/7zip/UI/Far/Far.cpp +++ b/CPP/7zip/UI/Far/Far.cpp @@ -3,6 +3,8 @@ #include "StdAfx.h" +#include "../../../Common/MyWindows.h" + #include "../../../Common/MyInitGuid.h" #include "../../../Common/StringConvert.h" @@ -96,6 +98,7 @@ EXTERN_C void WINAPI SetStartupInfo(const PluginStartupInfo *info) class COpenArchiveCallback: public IArchiveOpenCallback, public IArchiveOpenVolumeCallback, + public IArchiveOpenSetSubArchiveName, public IProgress, public ICryptoGetTextPassword, public CMyUnknownImp @@ -109,6 +112,8 @@ class COpenArchiveCallback: bool _numBytesTotalDefined; NFind::CFileInfo _fileInfo; + bool _subArchiveMode; + UString _subArchiveName; public: bool PasswordIsDefined; UString Password; @@ -116,8 +121,9 @@ public: FString _folderPrefix; public: - MY_UNKNOWN_IMP3( + MY_UNKNOWN_IMP4( IArchiveOpenVolumeCallback, + IArchiveOpenSetSubArchiveName, IProgress, ICryptoGetTextPassword ) @@ -134,13 +140,24 @@ public: STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value); STDMETHOD(GetStream)(const wchar_t *name, IInStream **inStream); + STDMETHOD(SetSubArchiveName(const wchar_t *name)) + { + _subArchiveMode = true; + _subArchiveName = name; + return S_OK; + } + // ICryptoGetTextPassword STDMETHOD(CryptoGetTextPassword)(BSTR *password); + COpenArchiveCallback(): _subArchiveMode(false) {} + void Init() { PasswordIsDefined = false; + _subArchiveMode = false; + _numFilesTotalDefined = false; _numBytesTotalDefined = false; @@ -220,6 +237,8 @@ STDMETHODIMP COpenArchiveCallback::GetStream(const wchar_t *name, IInStream **in { if (WasEscPressed()) return E_ABORT; + if (_subArchiveMode) + return S_FALSE; *inStream = NULL; FString fullPath = _folderPrefix + us2fs(name); if (!_fileInfo.Find(fullPath)) @@ -238,6 +257,14 @@ STDMETHODIMP COpenArchiveCallback::GetStream(const wchar_t *name, IInStream **in STDMETHODIMP COpenArchiveCallback::GetProperty(PROPID propID, PROPVARIANT *value) { NCOM::CPropVariant prop; + if (_subArchiveMode) + { + switch(propID) + { + case kpidName: prop = _subArchiveName; break; + } + } + else switch(propID) { case kpidName: prop = GetUnicodeString(_fileInfo.Name, CP_OEMCP); break; diff --git a/CPP/7zip/UI/Far/Messages.h b/CPP/7zip/UI/Far/Messages.h index e6972392..0697a163 100644 --- a/CPP/7zip/UI/Far/Messages.h +++ b/CPP/7zip/UI/Far/Messages.h @@ -7,7 +7,7 @@ namespace NMessageID { -const UINT k_Last_PropId_supported_by_plugin = kpidStreamId; +const unsigned k_Last_PropId_supported_by_plugin = kpidStreamId; enum EEnum { |