Move placement of lzma.

This commit is contained in:
2023-09-24 02:41:01 +01:00
parent fb79a7ddf6
commit 7cc2d1c72e
687 changed files with 2 additions and 2 deletions

View File

@@ -0,0 +1,59 @@
#include "ExtractRes.h"
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STRINGTABLE DISCARDABLE
BEGIN
IDS_MEM_ERROR "The system cannot allocate the required amount of memory"
IDS_CANNOT_CREATE_FOLDER "Cannot create folder '{0}'"
IDS_UPDATE_NOT_SUPPORTED "Update operations are not supported for this archive."
IDS_CANT_OPEN_ARCHIVE "Cannot open file '{0}' as archive"
IDS_CANT_OPEN_ENCRYPTED_ARCHIVE "Cannot open encrypted archive '{0}'. Wrong password?"
IDS_UNSUPPORTED_ARCHIVE_TYPE "Unsupported archive type"
IDS_CANT_OPEN_AS_TYPE "Cannot open the file as {0} archive"
IDS_IS_OPEN_AS_TYPE "The file is open as {0} archive"
IDS_IS_OPEN_WITH_OFFSET "The archive is open with offset"
IDS_PROGRESS_EXTRACTING "Extracting"
IDS_PROGRESS_SKIPPING "Skipping"
IDS_EXTRACT_SET_FOLDER "Specify a location for extracted files."
IDS_EXTRACT_PATHS_FULL "Full pathnames"
IDS_EXTRACT_PATHS_NO "No pathnames"
IDS_EXTRACT_PATHS_ABS "Absolute pathnames"
IDS_PATH_MODE_RELAT "Relative pathnames"
IDS_EXTRACT_OVERWRITE_ASK "Ask before overwrite"
IDS_EXTRACT_OVERWRITE_WITHOUT_PROMPT "Overwrite without prompt"
IDS_EXTRACT_OVERWRITE_SKIP_EXISTING "Skip existing files"
IDS_EXTRACT_OVERWRITE_RENAME "Auto rename"
IDS_EXTRACT_OVERWRITE_RENAME_EXISTING "Auto rename existing files"
IDS_EXTRACT_MESSAGE_UNSUPPORTED_METHOD "Unsupported compression method for '{0}'."
IDS_EXTRACT_MESSAGE_DATA_ERROR "Data error in '{0}'. File is broken"
IDS_EXTRACT_MESSAGE_CRC_ERROR "CRC failed in '{0}'. File is broken."
IDS_EXTRACT_MESSAGE_DATA_ERROR_ENCRYPTED "Data error in encrypted file '{0}'. Wrong password?"
IDS_EXTRACT_MESSAGE_CRC_ERROR_ENCRYPTED "CRC failed in encrypted file '{0}'. Wrong password?"
IDS_EXTRACT_MSG_WRONG_PSW_GUESS "Wrong password?"
// IDS_EXTRACT_MSG_ENCRYPTED "Encrypted file"
IDS_EXTRACT_MSG_UNSUPPORTED_METHOD "Unsupported compression method"
IDS_EXTRACT_MSG_DATA_ERROR "Data error"
IDS_EXTRACT_MSG_CRC_ERROR "CRC failed"
IDS_EXTRACT_MSG_UNAVAILABLE_DATA "Unavailable data"
IDS_EXTRACT_MSG_UEXPECTED_END "Unexpected end of data"
IDS_EXTRACT_MSG_DATA_AFTER_END "There are some data after the end of the payload data"
IDS_EXTRACT_MSG_IS_NOT_ARC "Is not archive"
IDS_EXTRACT_MSG_HEADERS_ERROR "Headers Error"
IDS_EXTRACT_MSG_WRONG_PSW_CLAIM "Wrong password"
IDS_OPEN_MSG_UNAVAILABLE_START "Unavailable start of archive"
IDS_OPEN_MSG_UNCONFIRMED_START "Unconfirmed start of archive"
// IDS_OPEN_MSG_ERROR_FLAGS + 5 "Unexpected end of archive"
// IDS_OPEN_MSG_ERROR_FLAGS + 6 "There are data after the end of archive"
IDS_OPEN_MSG_UNSUPPORTED_FEATURE "Unsupported feature"
END

View File

@@ -0,0 +1,421 @@
// ExtractDialog.cpp
#include "StdAfx.h"
#include "../../../Common/StringConvert.h"
#include "../../../Common/Wildcard.h"
#include "../../../Windows/FileName.h"
#include "../../../Windows/FileDir.h"
#include "../../../Windows/ResourceString.h"
#ifndef NO_REGISTRY
#include "../FileManager/HelpUtils.h"
#endif
#include "../FileManager/BrowseDialog.h"
#include "../FileManager/LangUtils.h"
#include "../FileManager/resourceGui.h"
#include "ExtractDialog.h"
#include "ExtractDialogRes.h"
#include "ExtractRes.h"
using namespace NWindows;
using namespace NFile;
using namespace NName;
extern HINSTANCE g_hInstance;
#ifndef _SFX
static const UInt32 kPathMode_IDs[] =
{
IDS_EXTRACT_PATHS_FULL,
IDS_EXTRACT_PATHS_NO,
IDS_EXTRACT_PATHS_ABS
};
static const UInt32 kOverwriteMode_IDs[] =
{
IDS_EXTRACT_OVERWRITE_ASK,
IDS_EXTRACT_OVERWRITE_WITHOUT_PROMPT,
IDS_EXTRACT_OVERWRITE_SKIP_EXISTING,
IDS_EXTRACT_OVERWRITE_RENAME,
IDS_EXTRACT_OVERWRITE_RENAME_EXISTING
};
static const
// NExtract::NPathMode::EEnum
int
kPathModeButtonsVals[] =
{
NExtract::NPathMode::kFullPaths,
NExtract::NPathMode::kNoPaths,
NExtract::NPathMode::kAbsPaths
};
static const
int
// NExtract::NOverwriteMode::EEnum
kOverwriteButtonsVals[] =
{
NExtract::NOverwriteMode::kAsk,
NExtract::NOverwriteMode::kOverwrite,
NExtract::NOverwriteMode::kSkip,
NExtract::NOverwriteMode::kRename,
NExtract::NOverwriteMode::kRenameExisting
};
#endif
#ifdef LANG
static const UInt32 kLangIDs[] =
{
IDT_EXTRACT_EXTRACT_TO,
IDT_EXTRACT_PATH_MODE,
IDT_EXTRACT_OVERWRITE_MODE,
// IDX_EXTRACT_ALT_STREAMS,
IDX_EXTRACT_NT_SECUR,
IDX_EXTRACT_ELIM_DUP,
IDG_PASSWORD,
IDX_PASSWORD_SHOW
};
#endif
// static const int kWildcardsButtonIndex = 2;
#ifndef NO_REGISTRY
static const unsigned kHistorySize = 16;
#endif
#ifndef _SFX
// it's used in CompressDialog also
void AddComboItems(NControl::CComboBox &combo, const UInt32 *langIDs, unsigned numItems, const int *values, int curVal);
void AddComboItems(NControl::CComboBox &combo, const UInt32 *langIDs, unsigned numItems, const int *values, int curVal)
{
int curSel = 0;
for (unsigned i = 0; i < numItems; i++)
{
UString s = LangString(langIDs[i]);
s.RemoveChar(L'&');
int index = (int)combo.AddString(s);
combo.SetItemData(index, i);
if (values[i] == curVal)
curSel = i;
}
combo.SetCurSel(curSel);
}
// it's used in CompressDialog also
bool GetBoolsVal(const CBoolPair &b1, const CBoolPair &b2);
bool GetBoolsVal(const CBoolPair &b1, const CBoolPair &b2)
{
if (b1.Def) return b1.Val;
if (b2.Def) return b2.Val;
return b1.Val;
}
void CExtractDialog::CheckButton_TwoBools(UINT id, const CBoolPair &b1, const CBoolPair &b2)
{
CheckButton(id, GetBoolsVal(b1, b2));
}
void CExtractDialog::GetButton_Bools(UINT id, CBoolPair &b1, CBoolPair &b2)
{
bool val = IsButtonCheckedBool(id);
bool oldVal = GetBoolsVal(b1, b2);
if (val != oldVal)
b1.Def = b2.Def = true;
b1.Val = b2.Val = val;
}
#endif
bool CExtractDialog::OnInit()
{
#ifdef LANG
{
UString s;
LangString_OnlyFromLangFile(IDD_EXTRACT, s);
if (s.IsEmpty())
GetText(s);
if (!ArcPath.IsEmpty())
{
s += " : ";
s += ArcPath;
}
SetText(s);
// LangSetWindowText(*this, IDD_EXTRACT);
LangSetDlgItems(*this, kLangIDs, ARRAY_SIZE(kLangIDs));
}
#endif
#ifndef _SFX
_passwordControl.Attach(GetItem(IDE_EXTRACT_PASSWORD));
_passwordControl.SetText(Password);
_passwordControl.SetPasswordChar(TEXT('*'));
_pathName.Attach(GetItem(IDE_EXTRACT_NAME));
#endif
#ifdef NO_REGISTRY
PathMode = NExtract::NPathMode::kFullPaths;
OverwriteMode = NExtract::NOverwriteMode::kAsk;
#else
_info.Load();
if (_info.PathMode == NExtract::NPathMode::kCurPaths)
_info.PathMode = NExtract::NPathMode::kFullPaths;
if (!PathMode_Force && _info.PathMode_Force)
PathMode = _info.PathMode;
if (!OverwriteMode_Force && _info.OverwriteMode_Force)
OverwriteMode = _info.OverwriteMode;
// CheckButton_TwoBools(IDX_EXTRACT_ALT_STREAMS, AltStreams, _info.AltStreams);
CheckButton_TwoBools(IDX_EXTRACT_NT_SECUR, NtSecurity, _info.NtSecurity);
CheckButton_TwoBools(IDX_EXTRACT_ELIM_DUP, ElimDup, _info.ElimDup);
CheckButton(IDX_PASSWORD_SHOW, _info.ShowPassword.Val);
UpdatePasswordControl();
#endif
_path.Attach(GetItem(IDC_EXTRACT_PATH));
UString pathPrefix = DirPath;
#ifndef _SFX
if (_info.SplitDest.Val)
{
CheckButton(IDX_EXTRACT_NAME_ENABLE, true);
UString pathName;
SplitPathToParts_Smart(DirPath, pathPrefix, pathName);
if (pathPrefix.IsEmpty())
pathPrefix = pathName;
else
_pathName.SetText(pathName);
}
else
ShowItem_Bool(IDE_EXTRACT_NAME, false);
#endif
_path.SetText(pathPrefix);
#ifndef NO_REGISTRY
for (unsigned i = 0; i < _info.Paths.Size() && i < kHistorySize; i++)
_path.AddString(_info.Paths[i]);
#endif
/*
if (_info.Paths.Size() > 0)
_path.SetCurSel(0);
else
_path.SetCurSel(-1);
*/
#ifndef _SFX
_pathMode.Attach(GetItem(IDC_EXTRACT_PATH_MODE));
_overwriteMode.Attach(GetItem(IDC_EXTRACT_OVERWRITE_MODE));
AddComboItems(_pathMode, kPathMode_IDs, ARRAY_SIZE(kPathMode_IDs), kPathModeButtonsVals, PathMode);
AddComboItems(_overwriteMode, kOverwriteMode_IDs, ARRAY_SIZE(kOverwriteMode_IDs), kOverwriteButtonsVals, OverwriteMode);
#endif
HICON icon = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_ICON));
SetIcon(ICON_BIG, icon);
// CWindow filesWindow = GetItem(IDC_EXTRACT_RADIO_FILES);
// filesWindow.Enable(_enableFilesButton);
NormalizePosition();
return CModalDialog::OnInit();
}
#ifndef _SFX
void CExtractDialog::UpdatePasswordControl()
{
_passwordControl.SetPasswordChar(IsShowPasswordChecked() ? 0 : TEXT('*'));
UString password;
_passwordControl.GetText(password);
_passwordControl.SetText(password);
}
#endif
bool CExtractDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
{
switch (buttonID)
{
case IDB_EXTRACT_SET_PATH:
OnButtonSetPath();
return true;
#ifndef _SFX
case IDX_EXTRACT_NAME_ENABLE:
ShowItem_Bool(IDE_EXTRACT_NAME, IsButtonCheckedBool(IDX_EXTRACT_NAME_ENABLE));
return true;
case IDX_PASSWORD_SHOW:
{
UpdatePasswordControl();
return true;
}
#endif
}
return CModalDialog::OnButtonClicked(buttonID, buttonHWND);
}
void CExtractDialog::OnButtonSetPath()
{
UString currentPath;
_path.GetText(currentPath);
UString title = LangString(IDS_EXTRACT_SET_FOLDER);
UString resultPath;
if (!MyBrowseForFolder(*this, title, currentPath, resultPath))
return;
#ifndef NO_REGISTRY
_path.SetCurSel(-1);
#endif
_path.SetText(resultPath);
}
void AddUniqueString(UStringVector &list, const UString &s);
void AddUniqueString(UStringVector &list, const UString &s)
{
FOR_VECTOR (i, list)
if (s.IsEqualTo_NoCase(list[i]))
return;
list.Add(s);
}
void CExtractDialog::OnOK()
{
#ifndef _SFX
int pathMode2 = kPathModeButtonsVals[_pathMode.GetCurSel()];
if (PathMode != NExtract::NPathMode::kCurPaths ||
pathMode2 != NExtract::NPathMode::kFullPaths)
PathMode = (NExtract::NPathMode::EEnum)pathMode2;
OverwriteMode = (NExtract::NOverwriteMode::EEnum)kOverwriteButtonsVals[_overwriteMode.GetCurSel()];
// _filesMode = (NExtractionDialog::NFilesMode::EEnum)GetFilesMode();
_passwordControl.GetText(Password);
#endif
#ifndef NO_REGISTRY
// GetButton_Bools(IDX_EXTRACT_ALT_STREAMS, AltStreams, _info.AltStreams);
GetButton_Bools(IDX_EXTRACT_NT_SECUR, NtSecurity, _info.NtSecurity);
GetButton_Bools(IDX_EXTRACT_ELIM_DUP, ElimDup, _info.ElimDup);
bool showPassword = IsShowPasswordChecked();
if (showPassword != _info.ShowPassword.Val)
{
_info.ShowPassword.Def = true;
_info.ShowPassword.Val = showPassword;
}
if (_info.PathMode != pathMode2)
{
_info.PathMode_Force = true;
_info.PathMode = (NExtract::NPathMode::EEnum)pathMode2;
/*
// we allow kAbsPaths in registry.
if (_info.PathMode == NExtract::NPathMode::kAbsPaths)
_info.PathMode = NExtract::NPathMode::kFullPaths;
*/
}
if (!OverwriteMode_Force && _info.OverwriteMode != OverwriteMode)
_info.OverwriteMode_Force = true;
_info.OverwriteMode = OverwriteMode;
#else
ElimDup.Val = IsButtonCheckedBool(IDX_EXTRACT_ELIM_DUP);
#endif
UString s;
#ifdef NO_REGISTRY
_path.GetText(s);
#else
int currentItem = _path.GetCurSel();
if (currentItem == CB_ERR)
{
_path.GetText(s);
if (_path.GetCount() >= (int)kHistorySize)
currentItem = _path.GetCount() - 1;
}
else
_path.GetLBText(currentItem, s);
#endif
s.Trim();
NName::NormalizeDirPathPrefix(s);
#ifndef _SFX
bool splitDest = IsButtonCheckedBool(IDX_EXTRACT_NAME_ENABLE);
if (splitDest)
{
UString pathName;
_pathName.GetText(pathName);
pathName.Trim();
s += pathName;
NName::NormalizeDirPathPrefix(s);
}
if (splitDest != _info.SplitDest.Val)
{
_info.SplitDest.Def = true;
_info.SplitDest.Val = splitDest;
}
#endif
DirPath = s;
#ifndef NO_REGISTRY
_info.Paths.Clear();
#ifndef _SFX
AddUniqueString(_info.Paths, s);
#endif
for (int i = 0; i < _path.GetCount(); i++)
if (i != currentItem)
{
UString sTemp;
_path.GetLBText(i, sTemp);
sTemp.Trim();
AddUniqueString(_info.Paths, sTemp);
}
_info.Save();
#endif
CModalDialog::OnOK();
}
#ifndef NO_REGISTRY
#define kHelpTopic "fm/plugins/7-zip/extract.htm"
void CExtractDialog::OnHelp()
{
ShowHelpWindow(kHelpTopic);
CModalDialog::OnHelp();
}
#endif

View File

@@ -0,0 +1,113 @@
// ExtractDialog.h
#ifndef __EXTRACT_DIALOG_H
#define __EXTRACT_DIALOG_H
#include "ExtractDialogRes.h"
#include "../../../Windows/Control/ComboBox.h"
#include "../../../Windows/Control/Edit.h"
#include "../Common/ExtractMode.h"
#include "../FileManager/DialogSize.h"
#ifndef NO_REGISTRY
#include "../Common/ZipRegistry.h"
#endif
namespace NExtractionDialog
{
/*
namespace NFilesMode
{
enum EEnum
{
kSelected,
kAll,
kSpecified
};
}
*/
}
class CExtractDialog: public NWindows::NControl::CModalDialog
{
#ifdef NO_REGISTRY
NWindows::NControl::CDialogChildControl _path;
#else
NWindows::NControl::CComboBox _path;
#endif
#ifndef _SFX
NWindows::NControl::CEdit _pathName;
NWindows::NControl::CEdit _passwordControl;
NWindows::NControl::CComboBox _pathMode;
NWindows::NControl::CComboBox _overwriteMode;
#endif
#ifndef _SFX
// int GetFilesMode() const;
void UpdatePasswordControl();
#endif
void OnButtonSetPath();
void CheckButton_TwoBools(UINT id, const CBoolPair &b1, const CBoolPair &b2);
void GetButton_Bools(UINT id, CBoolPair &b1, CBoolPair &b2);
virtual bool OnInit();
virtual bool OnButtonClicked(int buttonID, HWND buttonHWND);
virtual void OnOK();
#ifndef NO_REGISTRY
virtual void OnHelp();
NExtract::CInfo _info;
#endif
bool IsShowPasswordChecked() const { return IsButtonCheckedBool(IDX_PASSWORD_SHOW); }
public:
// bool _enableSelectedFilesButton;
// bool _enableFilesButton;
// NExtractionDialog::NFilesMode::EEnum FilesMode;
UString DirPath;
UString ArcPath;
#ifndef _SFX
UString Password;
#endif
bool PathMode_Force;
bool OverwriteMode_Force;
NExtract::NPathMode::EEnum PathMode;
NExtract::NOverwriteMode::EEnum OverwriteMode;
#ifndef _SFX
// CBoolPair AltStreams;
CBoolPair NtSecurity;
#endif
CBoolPair ElimDup;
INT_PTR Create(HWND aWndParent = 0)
{
#ifdef _SFX
BIG_DIALOG_SIZE(240, 64);
#else
BIG_DIALOG_SIZE(300, 160);
#endif
return CModalDialog::Create(SIZED_DIALOG(IDD_EXTRACT), aWndParent);
}
CExtractDialog():
PathMode_Force(false),
OverwriteMode_Force(false)
{
ElimDup.Val = true;
}
};
#endif

View File

@@ -0,0 +1,98 @@
#include "ExtractDialogRes.h"
#include "../../GuiCommon.rc"
#define xc 336
#define yc 168
#undef g1xs
#undef g2x
#undef g2x2
#undef g2xs
#undef g2xs2
#define g1xs 160
#define gSpace 20
#define g2x (m + g1xs + gSpace)
#define g2x2 (g2x + m)
#define g2xs (xc - g1xs - gSpace)
#define g2xs2 (g2xs - m - m)
#undef GROUP_Y_SIZE
#ifdef UNDER_CE
#define GROUP_Y_SIZE 8
#else
#define GROUP_Y_SIZE 56
#endif
IDD_EXTRACT DIALOG 0, 0, xs, ys MY_MODAL_DIALOG_STYLE MY_FONT
CAPTION "Extract"
BEGIN
LTEXT "E&xtract to:", IDT_EXTRACT_EXTRACT_TO, m, m, xc, 8
COMBOBOX IDC_EXTRACT_PATH, m, m + 12, xc - bxsDots - 12, 100, MY_COMBO_WITH_EDIT
PUSHBUTTON "...", IDB_EXTRACT_SET_PATH, xs - m - bxsDots, m + 12 - 2, bxsDots, bys, WS_GROUP
CONTROL "", IDX_EXTRACT_NAME_ENABLE, MY_CHECKBOX, m, m + 34, 12, 10
EDITTEXT IDE_EXTRACT_NAME, m + 12 + 2, m + 32, g1xs - 12 - 2, 14, ES_AUTOHSCROLL
LTEXT "Path mode:", IDT_EXTRACT_PATH_MODE, m, m + 52, g1xs, 8
COMBOBOX IDC_EXTRACT_PATH_MODE, m, m + 64, g1xs, 140, MY_COMBO
CONTROL "Eliminate duplication of root folder", IDX_EXTRACT_ELIM_DUP, MY_CHECKBOX,
m, m + 84, g1xs, 10
LTEXT "Overwrite mode:", IDT_EXTRACT_OVERWRITE_MODE, m, m + 104, g1xs, 8
COMBOBOX IDC_EXTRACT_OVERWRITE_MODE, m, m + 116, g1xs, 140, MY_COMBO
GROUPBOX "Password", IDG_PASSWORD, g2x, m + 36, g2xs, GROUP_Y_SIZE
EDITTEXT IDE_EXTRACT_PASSWORD, g2x2, m + 50, g2xs2, 14, ES_PASSWORD | ES_AUTOHSCROLL
CONTROL "Show Password", IDX_PASSWORD_SHOW, MY_CHECKBOX, g2x2, m + 72, g2xs2, 10
// CONTROL "Restore alternate data streams", IDX_EXTRACT_ALT_STREAMS, MY_CHECKBOX,
// g2x, m + 104, g2xs, 10
CONTROL "Restore file security", IDX_EXTRACT_NT_SECUR, MY_CHECKBOX,
g2x, m + 104, g2xs, 10
DEFPUSHBUTTON "OK", IDOK, bx3, by, bxs, bys, WS_GROUP
PUSHBUTTON "Cancel", IDCANCEL, bx2, by, bxs, bys
PUSHBUTTON "Help", IDHELP, bx1, by, bxs, bys
END
#ifdef UNDER_CE
#undef m
#define m 4
#undef xc
#undef yc
#define xc 152
#define yc 128
#undef g1xs
#define g1xs 64
IDD_EXTRACT_2 DIALOG 0, 0, xs, ys MY_MODAL_DIALOG_STYLE MY_FONT
CAPTION "Extract"
BEGIN
LTEXT "E&xtract to:", IDT_EXTRACT_EXTRACT_TO, m, m, xc - bxsDots - 8, 8
COMBOBOX IDC_EXTRACT_PATH, m, m + 12, xc - bxsDots - 8, 100, MY_COMBO_WITH_EDIT
PUSHBUTTON "...", IDB_EXTRACT_SET_PATH, xs - m - bxsDots, m + 12 - 3, bxsDots, bys, WS_GROUP
LTEXT "Path mode:", IDT_EXTRACT_PATH_MODE, m, m + 36, g1xs, 8
COMBOBOX IDC_EXTRACT_PATH_MODE, m + g1xs, m + 36, xc - g1xs, 100, MY_COMBO
LTEXT "Overwrite mode:", IDT_EXTRACT_OVERWRITE_MODE, m, m + 56, g1xs, 8
COMBOBOX IDC_EXTRACT_OVERWRITE_MODE, m + g1xs, m + 56, xc - g1xs, 100, MY_COMBO
LTEXT "Password", IDG_PASSWORD, m, m + 76, g1xs, 8
EDITTEXT IDE_EXTRACT_PASSWORD, m + g1xs, m + 76, xc - g1xs, 14, ES_PASSWORD | ES_AUTOHSCROLL
CONTROL "Show Password", IDX_PASSWORD_SHOW, MY_CHECKBOX, m, m + 92, xc, 10
OK_CANCEL
END
#endif

View File

@@ -0,0 +1,24 @@
#define IDD_EXTRACT 3400
#define IDD_EXTRACT_2 13400
#define IDC_EXTRACT_PATH 100
#define IDB_EXTRACT_SET_PATH 101
#define IDC_EXTRACT_PATH_MODE 102
#define IDC_EXTRACT_OVERWRITE_MODE 103
#define IDE_EXTRACT_PASSWORD 120
#define IDE_EXTRACT_NAME 130
#define IDX_EXTRACT_NAME_ENABLE 131
#define IDT_EXTRACT_EXTRACT_TO 3401
#define IDT_EXTRACT_PATH_MODE 3410
#define IDT_EXTRACT_OVERWRITE_MODE 3420
#define IDX_EXTRACT_ELIM_DUP 3430
#define IDX_EXTRACT_NT_SECUR 3431
// #define IDX_EXTRACT_ALT_STREAMS 3432
#define IDX_PASSWORD_SHOW 3803
#define IDG_PASSWORD 3807

View File

@@ -0,0 +1,280 @@
// ExtractGUI.cpp
#include "StdAfx.h"
#include "../../../Common/IntToString.h"
#include "../../../Common/StringConvert.h"
#include "../../../Windows/FileDir.h"
#include "../../../Windows/FileFind.h"
#include "../../../Windows/FileName.h"
#include "../../../Windows/Thread.h"
#include "../FileManager/ExtractCallback.h"
#include "../FileManager/FormatUtils.h"
#include "../FileManager/LangUtils.h"
#include "../FileManager/resourceGui.h"
#include "../FileManager/OverwriteDialogRes.h"
#include "../Common/ArchiveExtractCallback.h"
#include "../Common/PropIDUtils.h"
#include "../Explorer/MyMessages.h"
#include "resource2.h"
#include "ExtractRes.h"
#include "ExtractDialog.h"
#include "ExtractGUI.h"
#include "HashGUI.h"
#include "../FileManager/PropertyNameRes.h"
using namespace NWindows;
using namespace NFile;
using namespace NDir;
static const wchar_t * const kIncorrectOutDir = L"Incorrect output directory path";
#ifndef _SFX
static void AddValuePair(UString &s, UINT resourceID, UInt64 value, bool addColon = true)
{
AddLangString(s, resourceID);
if (addColon)
s += ':';
s.Add_Space();
char sz[32];
ConvertUInt64ToString(value, sz);
s += sz;
s.Add_LF();
}
static void AddSizePair(UString &s, UINT resourceID, UInt64 value)
{
AddLangString(s, resourceID);
s += ": ";
AddSizeValue(s, value);
s.Add_LF();
}
#endif
class CThreadExtracting: public CProgressThreadVirt
{
HRESULT ProcessVirt();
public:
CCodecs *codecs;
CExtractCallbackImp *ExtractCallbackSpec;
const CObjectVector<COpenType> *FormatIndices;
const CIntVector *ExcludedFormatIndices;
UStringVector *ArchivePaths;
UStringVector *ArchivePathsFull;
const NWildcard::CCensorNode *WildcardCensor;
const CExtractOptions *Options;
#ifndef _SFX
CHashBundle *HashBundle;
virtual void ProcessWasFinished_GuiVirt();
#endif
CMyComPtr<IExtractCallbackUI> ExtractCallback;
UString Title;
CPropNameValPairs Pairs;
};
#ifndef _SFX
void CThreadExtracting::ProcessWasFinished_GuiVirt()
{
if (HashBundle && !Pairs.IsEmpty())
ShowHashResults(Pairs, *this);
}
#endif
HRESULT CThreadExtracting::ProcessVirt()
{
CDecompressStat Stat;
#ifndef _SFX
/*
if (HashBundle)
HashBundle->Init();
*/
#endif
HRESULT res = Extract(codecs,
*FormatIndices, *ExcludedFormatIndices,
*ArchivePaths, *ArchivePathsFull,
*WildcardCensor, *Options, ExtractCallbackSpec, ExtractCallback,
#ifndef _SFX
HashBundle,
#endif
FinalMessage.ErrorMessage.Message, Stat);
#ifndef _SFX
if (res == S_OK && ExtractCallbackSpec->IsOK())
{
if (HashBundle)
{
AddValuePair(Pairs, IDS_ARCHIVES_COLON, Stat.NumArchives);
AddSizeValuePair(Pairs, IDS_PROP_PACKED_SIZE, Stat.PackSize);
AddHashBundleRes(Pairs, *HashBundle);
}
else if (Options->TestMode)
{
UString s;
AddValuePair(s, IDS_ARCHIVES_COLON, Stat.NumArchives, false);
AddSizePair(s, IDS_PROP_PACKED_SIZE, Stat.PackSize);
if (Stat.NumFolders != 0)
AddValuePair(s, IDS_PROP_FOLDERS, Stat.NumFolders);
AddValuePair(s, IDS_PROP_FILES, Stat.NumFiles);
AddSizePair(s, IDS_PROP_SIZE, Stat.UnpackSize);
if (Stat.NumAltStreams != 0)
{
s.Add_LF();
AddValuePair(s, IDS_PROP_NUM_ALT_STREAMS, Stat.NumAltStreams);
AddSizePair(s, IDS_PROP_ALT_STREAMS_SIZE, Stat.AltStreams_UnpackSize);
}
s.Add_LF();
AddLangString(s, IDS_MESSAGE_NO_ERRORS);
FinalMessage.OkMessage.Title = Title;
FinalMessage.OkMessage.Message = s;
}
}
#endif
return res;
}
HRESULT ExtractGUI(
CCodecs *codecs,
const CObjectVector<COpenType> &formatIndices,
const CIntVector &excludedFormatIndices,
UStringVector &archivePaths,
UStringVector &archivePathsFull,
const NWildcard::CCensorNode &wildcardCensor,
CExtractOptions &options,
#ifndef _SFX
CHashBundle *hb,
#endif
bool showDialog,
bool &messageWasDisplayed,
CExtractCallbackImp *extractCallback,
HWND hwndParent)
{
messageWasDisplayed = false;
CThreadExtracting extracter;
extracter.codecs = codecs;
extracter.FormatIndices = &formatIndices;
extracter.ExcludedFormatIndices = &excludedFormatIndices;
if (!options.TestMode)
{
FString outputDir = options.OutputDir;
#ifndef UNDER_CE
if (outputDir.IsEmpty())
GetCurrentDir(outputDir);
#endif
if (showDialog)
{
CExtractDialog dialog;
FString outputDirFull;
if (!MyGetFullPathName(outputDir, outputDirFull))
{
ShowErrorMessage(kIncorrectOutDir);
messageWasDisplayed = true;
return E_FAIL;
}
NName::NormalizeDirPathPrefix(outputDirFull);
dialog.DirPath = fs2us(outputDirFull);
dialog.OverwriteMode = options.OverwriteMode;
dialog.OverwriteMode_Force = options.OverwriteMode_Force;
dialog.PathMode = options.PathMode;
dialog.PathMode_Force = options.PathMode_Force;
dialog.ElimDup = options.ElimDup;
if (archivePathsFull.Size() == 1)
dialog.ArcPath = archivePathsFull[0];
#ifndef _SFX
// dialog.AltStreams = options.NtOptions.AltStreams;
dialog.NtSecurity = options.NtOptions.NtSecurity;
if (extractCallback->PasswordIsDefined)
dialog.Password = extractCallback->Password;
#endif
if (dialog.Create(hwndParent) != IDOK)
return E_ABORT;
outputDir = us2fs(dialog.DirPath);
options.OverwriteMode = dialog.OverwriteMode;
options.PathMode = dialog.PathMode;
options.ElimDup = dialog.ElimDup;
#ifndef _SFX
// options.NtOptions.AltStreams = dialog.AltStreams;
options.NtOptions.NtSecurity = dialog.NtSecurity;
extractCallback->Password = dialog.Password;
extractCallback->PasswordIsDefined = !dialog.Password.IsEmpty();
#endif
}
if (!MyGetFullPathName(outputDir, options.OutputDir))
{
ShowErrorMessage(kIncorrectOutDir);
messageWasDisplayed = true;
return E_FAIL;
}
NName::NormalizeDirPathPrefix(options.OutputDir);
/*
if (!CreateComplexDirectory(options.OutputDir))
{
UString s = GetUnicodeString(NError::MyFormatMessage(GetLastError()));
UString s2 = MyFormatNew(IDS_CANNOT_CREATE_FOLDER,
#ifdef LANG
0x02000603,
#endif
options.OutputDir);
s2.Add_LF();
s2 += s;
MyMessageBox(s2);
return E_FAIL;
}
*/
}
UString title = LangString(options.TestMode ? IDS_PROGRESS_TESTING : IDS_PROGRESS_EXTRACTING);
extracter.Title = title;
extracter.ExtractCallbackSpec = extractCallback;
extracter.ExtractCallbackSpec->ProgressDialog = &extracter;
extracter.ExtractCallback = extractCallback;
extracter.ExtractCallbackSpec->Init();
extracter.CompressingMode = false;
extracter.ArchivePaths = &archivePaths;
extracter.ArchivePathsFull = &archivePathsFull;
extracter.WildcardCensor = &wildcardCensor;
extracter.Options = &options;
#ifndef _SFX
extracter.HashBundle = hb;
#endif
extracter.IconID = IDI_ICON;
RINOK(extracter.Create(title, hwndParent));
messageWasDisplayed = extracter.ThreadFinishedOK && extracter.MessagesDisplayed;
return extracter.Result;
}

View File

@@ -0,0 +1,38 @@
// GUI/ExtractGUI.h
#ifndef __EXTRACT_GUI_H
#define __EXTRACT_GUI_H
#include "../Common/Extract.h"
#include "../FileManager/ExtractCallback.h"
/*
RESULT can be S_OK, even if there are errors!!!
if RESULT == S_OK, check extractCallback->IsOK() after ExtractGUI().
RESULT = E_ABORT - user break.
RESULT != E_ABORT:
{
messageWasDisplayed = true - message was displayed already.
messageWasDisplayed = false - there was some internal error, so you must show error message.
}
*/
HRESULT ExtractGUI(
CCodecs *codecs,
const CObjectVector<COpenType> &formatIndices,
const CIntVector &excludedFormatIndices,
UStringVector &archivePaths,
UStringVector &archivePathsFull,
const NWildcard::CCensorNode &wildcardCensor,
CExtractOptions &options,
#ifndef _SFX
CHashBundle *hb,
#endif
bool showDialog,
bool &messageWasDisplayed,
CExtractCallbackImp *extractCallback,
HWND hwndParent = NULL);
#endif

View File

@@ -0,0 +1,51 @@
#define IDS_MEM_ERROR 3000
#define IDS_CANNOT_CREATE_FOLDER 3003
#define IDS_UPDATE_NOT_SUPPORTED 3004
#define IDS_CANT_OPEN_ARCHIVE 3005
#define IDS_CANT_OPEN_ENCRYPTED_ARCHIVE 3006
#define IDS_UNSUPPORTED_ARCHIVE_TYPE 3007
#define IDS_CANT_OPEN_AS_TYPE 3017
#define IDS_IS_OPEN_AS_TYPE 3018
#define IDS_IS_OPEN_WITH_OFFSET 3019
#define IDS_PROGRESS_EXTRACTING 3300
#define IDS_PROGRESS_SKIPPING 3325
#define IDS_EXTRACT_SET_FOLDER 3402
#define IDS_EXTRACT_PATHS_FULL 3411
#define IDS_EXTRACT_PATHS_NO 3412
#define IDS_EXTRACT_PATHS_ABS 3413
#define IDS_PATH_MODE_RELAT 3414
#define IDS_EXTRACT_OVERWRITE_ASK 3421
#define IDS_EXTRACT_OVERWRITE_WITHOUT_PROMPT 3422
#define IDS_EXTRACT_OVERWRITE_SKIP_EXISTING 3423
#define IDS_EXTRACT_OVERWRITE_RENAME 3424
#define IDS_EXTRACT_OVERWRITE_RENAME_EXISTING 3425
#define IDS_EXTRACT_MESSAGE_UNSUPPORTED_METHOD 3700
#define IDS_EXTRACT_MESSAGE_DATA_ERROR 3701
#define IDS_EXTRACT_MESSAGE_CRC_ERROR 3702
#define IDS_EXTRACT_MESSAGE_DATA_ERROR_ENCRYPTED 3703
#define IDS_EXTRACT_MESSAGE_CRC_ERROR_ENCRYPTED 3704
#define IDS_EXTRACT_MSG_WRONG_PSW_GUESS 3710
// #define IDS_EXTRACT_MSG_ENCRYPTED 3711
#define IDS_EXTRACT_MSG_UNSUPPORTED_METHOD 3721
#define IDS_EXTRACT_MSG_DATA_ERROR 3722
#define IDS_EXTRACT_MSG_CRC_ERROR 3723
#define IDS_EXTRACT_MSG_UNAVAILABLE_DATA 3724
#define IDS_EXTRACT_MSG_UEXPECTED_END 3725
#define IDS_EXTRACT_MSG_DATA_AFTER_END 3726
#define IDS_EXTRACT_MSG_IS_NOT_ARC 3727
#define IDS_EXTRACT_MSG_HEADERS_ERROR 3728
#define IDS_EXTRACT_MSG_WRONG_PSW_CLAIM 3729
#define IDS_OPEN_MSG_UNAVAILABLE_START 3763
#define IDS_OPEN_MSG_UNCONFIRMED_START 3764
#define IDS_OPEN_MSG_UNSUPPORTED_FEATURE 3768

27
3rdparty/lzma/CPP/7zip/UI/GUI/HashGUI.h vendored Normal file
View File

@@ -0,0 +1,27 @@
// HashGUI.h
#ifndef __HASH_GUI_H
#define __HASH_GUI_H
#include "../Common/HashCalc.h"
#include "../Common/Property.h"
HRESULT HashCalcGUI(
DECL_EXTERNAL_CODECS_LOC_VARS
const NWildcard::CCensor &censor,
const CHashOptions &options,
bool &messageWasDisplayed);
typedef CObjectVector<CProperty> CPropNameValPairs;
void AddValuePair(CPropNameValPairs &pairs, UINT resourceID, UInt64 value);
void AddSizeValue(UString &s, UInt64 value);
void AddSizeValuePair(CPropNameValPairs &pairs, UINT resourceID, UInt64 value);
void AddHashBundleRes(CPropNameValPairs &s, const CHashBundle &hb);
void AddHashBundleRes(UString &s, const CHashBundle &hb);
void ShowHashResults(const CPropNameValPairs &propPairs, HWND hwnd);
void ShowHashResults(const CHashBundle &hb, HWND hwnd);
#endif

View File

@@ -0,0 +1,2 @@
#define IDS_PROGRESS_COMPRESSING 3301
#define IDS_ARCHIVES_COLON 3907