backup wallets on shut down, skip when open on windows

This commit is contained in:
woodser 2024-01-29 06:53:55 -05:00
parent 4da41c5f18
commit 481b6c871a
2 changed files with 22 additions and 3 deletions

View file

@ -876,7 +876,19 @@ public abstract class Trade implements Tradable, Model {
public void saveWallet() {
synchronized (walletLock) {
if (wallet == null) throw new RuntimeException("Trade wallet is not open for trade " + getId());
xmrWalletService.saveWallet(wallet, !isArbitrator()); // skip backup if arbitrator
xmrWalletService.saveWallet(wallet);
maybeBackupWallet();
}
}
private void maybeBackupWallet() {
boolean createBackup = !isArbitrator() && !(Utilities.isWindows() && isWalletOpen()); // create backup unless arbitrator or windows and wallet is open (cannot copy file while open on windows)
if (createBackup) xmrWalletService.backupWallet(getWalletName());
}
private boolean isWalletOpen() {
synchronized (walletLock) {
return wallet != null;
}
}
@ -1313,7 +1325,7 @@ public abstract class Trade implements Tradable, Model {
// save wallet
if (wallet != null) {
try {
xmrWalletService.saveWallet(wallet, false); // skip backup
xmrWalletService.saveWallet(wallet);
stopWallet();
} catch (Exception e) {
// warning will be logged for main wallet, so skip logging here
@ -1333,6 +1345,9 @@ public abstract class Trade implements Tradable, Model {
forceStopWallet();
}
// backup trade wallet if applicable
maybeBackupWallet();
// de-initialize
if (idlePayoutSyncer != null) {
xmrWalletService.removeWalletListener(idlePayoutSyncer);

View file

@ -220,7 +220,7 @@ public class XmrWalletService {
}
public void saveMainWallet() {
saveMainWallet(true);
saveMainWallet(!(Utilities.isWindows() && wallet != null));
}
public void saveMainWallet(boolean backup) {
@ -324,6 +324,10 @@ public class XmrWalletService {
return syncWallet(wallet);
}
public void saveWallet(MoneroWallet wallet) {
saveWallet(wallet, false);
}
public void saveWallet(MoneroWallet wallet, boolean backup) {
wallet.save();
if (backup) backupWallet(wallet.getPath());