aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/wallet.cpp
diff options
context:
space:
mode:
authorw0xlt <94266259+w0xlt@users.noreply.github.com>2021-12-14 19:18:56 -0300
committerw0xlt <94266259+w0xlt@users.noreply.github.com>2021-12-14 19:18:56 -0300
commit4807f73f48f4ff1084fcf7aee94e5b14592bfda8 (patch)
tree7761551b1159c35a4bed0ccf5a97d5f77650f0df /src/wallet/wallet.cpp
parentf727d814bd8df5a5346c128dd4573e457c1970e1 (diff)
refactor: Implement restorewallet() logic in the wallet section
Currently restorewallet() logic is written in the RPC layer and it canĀ“t be reused by GUI. So it reimplements this in the wallet and interface sections and then, GUI can access it.
Diffstat (limited to 'src/wallet/wallet.cpp')
-rw-r--r--src/wallet/wallet.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
index cfe550cb3f..59ed8c2571 100644
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -357,6 +357,31 @@ std::shared_ptr<CWallet> CreateWallet(WalletContext& context, const std::string&
return wallet;
}
+std::shared_ptr<CWallet> RestoreWallet(WalletContext& context, const std::string& backup_file, const std::string& wallet_name, std::optional<bool> load_on_start, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
+{
+ DatabaseOptions options;
+ options.require_existing = true;
+
+ if (!fs::exists(fs::u8path(backup_file))) {
+ error = Untranslated("Backup file does not exist");
+ status = DatabaseStatus::FAILED_BAD_PATH;
+ return nullptr;
+ }
+
+ const fs::path wallet_path = fsbridge::AbsPathJoin(GetWalletDir(), fs::u8path(wallet_name));
+
+ if (fs::exists(wallet_path) || !TryCreateDirectories(wallet_path)) {
+ error = Untranslated(strprintf("Failed to create database path '%s'. Database already exists.", fs::PathToString(wallet_path)));
+ status = DatabaseStatus::FAILED_ALREADY_EXISTS;
+ return nullptr;
+ }
+
+ auto wallet_file = wallet_path / "wallet.dat";
+ fs::copy_file(backup_file, wallet_file, fs::copy_option::fail_if_exists);
+
+ return LoadWallet(context, wallet_name, load_on_start, options, status, error, warnings);
+}
+
/** @defgroup mapWallet
*
* @{