mirror of
https://github.com/Retropex/bitcoin.git
synced 2025-06-05 00:42:33 +02:00
Merge g230 via gui_backup_formats
This commit is contained in:
commit
af27148d94
@ -43,6 +43,11 @@ struct WalletContext;
|
|||||||
using isminefilter = std::underlying_type<isminetype>::type;
|
using isminefilter = std::underlying_type<isminetype>::type;
|
||||||
} // namespace wallet
|
} // namespace wallet
|
||||||
|
|
||||||
|
enum class WalletBackupFormat {
|
||||||
|
Raw, // Literal db copy
|
||||||
|
DbDump, // DumpWallet plaintext low-level db dump
|
||||||
|
};
|
||||||
|
|
||||||
namespace interfaces {
|
namespace interfaces {
|
||||||
|
|
||||||
class Handler;
|
class Handler;
|
||||||
@ -84,8 +89,10 @@ public:
|
|||||||
//! Abort a rescan.
|
//! Abort a rescan.
|
||||||
virtual void abortRescan() = 0;
|
virtual void abortRescan() = 0;
|
||||||
|
|
||||||
|
virtual bool canBackupToDbDump() = 0;
|
||||||
|
|
||||||
//! Back up wallet.
|
//! Back up wallet.
|
||||||
virtual bool backupWallet(const std::string& filename) = 0;
|
virtual bool backupWallet(const std::string& filename, const WalletBackupFormat format, bilingual_str& error) = 0;
|
||||||
|
|
||||||
//! Get wallet name.
|
//! Get wallet name.
|
||||||
virtual std::string getWalletName() = 0;
|
virtual std::string getWalletName() = 0;
|
||||||
|
@ -210,19 +210,36 @@ void WalletView::encryptWallet()
|
|||||||
|
|
||||||
void WalletView::backupWallet()
|
void WalletView::backupWallet()
|
||||||
{
|
{
|
||||||
|
QString filetype_str;
|
||||||
|
//: Name of the wallet data file format.
|
||||||
|
QString supported_formats = tr("Wallet Data") + QLatin1String(" (*.dat)");
|
||||||
|
if (walletModel->wallet().canBackupToDbDump()) {
|
||||||
|
//: Name of the wallet data file format.
|
||||||
|
supported_formats += QLatin1String(";;") + tr("Wallet Database Dump File") + QLatin1String(" (*.walletdbdump)");
|
||||||
|
}
|
||||||
QString filename = GUIUtil::getSaveFileName(this,
|
QString filename = GUIUtil::getSaveFileName(this,
|
||||||
tr("Backup Wallet"), QString(),
|
tr("Backup Wallet"), QString(),
|
||||||
//: Name of the wallet data file format.
|
supported_formats,
|
||||||
tr("Wallet Data") + QLatin1String(" (*.dat)"), nullptr);
|
&filetype_str);
|
||||||
|
|
||||||
if (filename.isEmpty())
|
if (filename.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!walletModel->wallet().backupWallet(filename.toLocal8Bit().data())) {
|
WalletBackupFormat filetype;
|
||||||
Q_EMIT message(tr("Backup Failed"), tr("There was an error trying to save the wallet data to %1.").arg(filename),
|
if (filetype_str == "walletdbdump") {
|
||||||
CClientUIInterface::MSG_ERROR);
|
filetype = WalletBackupFormat::DbDump;
|
||||||
|
} else {
|
||||||
|
filetype = WalletBackupFormat::Raw;
|
||||||
|
}
|
||||||
|
|
||||||
|
bilingual_str error;
|
||||||
|
if (!walletModel->wallet().backupWallet(filename.toLocal8Bit().data(), filetype, error)) {
|
||||||
|
if (error.empty()) {
|
||||||
|
Q_EMIT message(tr("Backup Failed"), tr("There was an error trying to save the wallet data to %1.").arg(filename), CClientUIInterface::MSG_ERROR);
|
||||||
|
} else {
|
||||||
|
Q_EMIT message(tr("Backup Failed"), tr("There was an error trying to save the wallet data to %1: %2").arg(filename).arg(QString::fromStdString(error.translated)), CClientUIInterface::MSG_ERROR);
|
||||||
}
|
}
|
||||||
else {
|
} else {
|
||||||
Q_EMIT message(tr("Backup Successful"), tr("The wallet data was successfully saved to %1.").arg(filename),
|
Q_EMIT message(tr("Backup Successful"), tr("The wallet data was successfully saved to %1.").arg(filename),
|
||||||
CClientUIInterface::MSG_INFORMATION);
|
CClientUIInterface::MSG_INFORMATION);
|
||||||
}
|
}
|
||||||
|
@ -21,15 +21,8 @@ namespace wallet {
|
|||||||
static const std::string DUMP_MAGIC = "BITCOIN_CORE_WALLET_DUMP";
|
static const std::string DUMP_MAGIC = "BITCOIN_CORE_WALLET_DUMP";
|
||||||
uint32_t DUMP_VERSION = 1;
|
uint32_t DUMP_VERSION = 1;
|
||||||
|
|
||||||
bool DumpWallet(const ArgsManager& args, WalletDatabase& db, bilingual_str& error)
|
bool DumpWallet(WalletDatabase& db, bilingual_str& error, const std::string& dump_filename)
|
||||||
{
|
{
|
||||||
// Get the dumpfile
|
|
||||||
std::string dump_filename = args.GetArg("-dumpfile", "");
|
|
||||||
if (dump_filename.empty()) {
|
|
||||||
error = _("No dump file provided. To use dump, -dumpfile=<filename> must be provided.");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
fs::path path = fs::PathFromString(dump_filename);
|
fs::path path = fs::PathFromString(dump_filename);
|
||||||
path = fs::absolute(path);
|
path = fs::absolute(path);
|
||||||
if (fs::exists(path)) {
|
if (fs::exists(path)) {
|
||||||
|
@ -16,7 +16,7 @@ class ArgsManager;
|
|||||||
namespace wallet {
|
namespace wallet {
|
||||||
class WalletDatabase;
|
class WalletDatabase;
|
||||||
|
|
||||||
bool DumpWallet(const ArgsManager& args, WalletDatabase& db, bilingual_str& error);
|
bool DumpWallet(WalletDatabase& db, bilingual_str& error, const std::string& dump_filename);
|
||||||
bool CreateFromDump(const ArgsManager& args, const std::string& name, const fs::path& wallet_path, bilingual_str& error, std::vector<bilingual_str>& warnings);
|
bool CreateFromDump(const ArgsManager& args, const std::string& name, const fs::path& wallet_path, bilingual_str& error, std::vector<bilingual_str>& warnings);
|
||||||
} // namespace wallet
|
} // namespace wallet
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include <util/ui_change_type.h>
|
#include <util/ui_change_type.h>
|
||||||
#include <wallet/coincontrol.h>
|
#include <wallet/coincontrol.h>
|
||||||
#include <wallet/context.h>
|
#include <wallet/context.h>
|
||||||
|
#include <wallet/dump.h>
|
||||||
#include <wallet/feebumper.h>
|
#include <wallet/feebumper.h>
|
||||||
#include <wallet/fees.h>
|
#include <wallet/fees.h>
|
||||||
#include <wallet/types.h>
|
#include <wallet/types.h>
|
||||||
@ -161,7 +162,18 @@ public:
|
|||||||
return m_wallet->ChangeWalletPassphrase(old_wallet_passphrase, new_wallet_passphrase);
|
return m_wallet->ChangeWalletPassphrase(old_wallet_passphrase, new_wallet_passphrase);
|
||||||
}
|
}
|
||||||
void abortRescan() override { m_wallet->AbortRescan(); }
|
void abortRescan() override { m_wallet->AbortRescan(); }
|
||||||
bool backupWallet(const std::string& filename) override { return m_wallet->BackupWallet(filename); }
|
bool canBackupToDbDump() override {
|
||||||
|
return (m_wallet->GetDatabase().Format() != "bdb");
|
||||||
|
}
|
||||||
|
bool backupWallet(const std::string& filename, const WalletBackupFormat format, bilingual_str& error) override {
|
||||||
|
switch (format) {
|
||||||
|
case WalletBackupFormat::DbDump:
|
||||||
|
return DumpWallet(m_wallet->GetDatabase(), error, filename);
|
||||||
|
case WalletBackupFormat::Raw:
|
||||||
|
return m_wallet->BackupWallet(filename);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
std::string getWalletName() override { return m_wallet->GetName(); }
|
std::string getWalletName() override { return m_wallet->GetName(); }
|
||||||
util::Result<CTxDestination> getNewDestination(const OutputType type, const std::string& label) override
|
util::Result<CTxDestination> getNewDestination(const OutputType type, const std::string& label) override
|
||||||
{
|
{
|
||||||
|
@ -194,6 +194,14 @@ bool ExecuteWalletToolFunc(const ArgsManager& args, const std::string& command)
|
|||||||
DatabaseOptions options;
|
DatabaseOptions options;
|
||||||
ReadDatabaseArgs(args, options);
|
ReadDatabaseArgs(args, options);
|
||||||
options.require_existing = true;
|
options.require_existing = true;
|
||||||
|
|
||||||
|
// Get the dumpfile
|
||||||
|
std::string dump_filename = args.GetArg("-dumpfile", "");
|
||||||
|
if (dump_filename.empty()) {
|
||||||
|
tfm::format(std::cerr, "No dump file provided. To use dump, -dumpfile=<filename> must be provided.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
DatabaseStatus status;
|
DatabaseStatus status;
|
||||||
bilingual_str error;
|
bilingual_str error;
|
||||||
std::unique_ptr<WalletDatabase> database = MakeDatabase(path, options, status, error);
|
std::unique_ptr<WalletDatabase> database = MakeDatabase(path, options, status, error);
|
||||||
@ -202,7 +210,7 @@ bool ExecuteWalletToolFunc(const ArgsManager& args, const std::string& command)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ret = DumpWallet(args, *database, error);
|
bool ret = DumpWallet(*database, error, dump_filename);
|
||||||
if (!ret && !error.empty()) {
|
if (!ret && !error.empty()) {
|
||||||
tfm::format(std::cerr, "%s\n", error.original);
|
tfm::format(std::cerr, "%s\n", error.original);
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user