Use PersistenceManager

This commit is contained in:
chimp1984 2020-10-01 19:05:31 -05:00
parent f6be9b0f6b
commit 2582f58e0a
No known key found for this signature in database
GPG key ID: 9801B4EC591F90E3
2 changed files with 39 additions and 32 deletions

View file

@ -17,7 +17,6 @@
package bisq.core.trade.closed;
import bisq.core.btc.wallet.BtcWalletService;
import bisq.core.offer.Offer;
import bisq.core.provider.price.PriceFeedService;
import bisq.core.trade.DumpDelayedPayoutTx;
@ -26,8 +25,8 @@ import bisq.core.trade.TradableList;
import bisq.core.trade.Trade;
import bisq.common.crypto.KeyRing;
import bisq.common.persistence.PersistenceManager;
import bisq.common.proto.persistable.PersistedDataHost;
import bisq.common.storage.Storage;
import com.google.inject.Inject;
@ -41,48 +40,49 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ClosedTradableManager implements PersistedDataHost {
private final Storage<TradableList<Tradable>> tradableListStorage;
private TradableList<Tradable> closedTradables;
private final PersistenceManager<TradableList<Tradable>> persistenceManager;
private final TradableList<Tradable> closedTradables = new TradableList<>();
private final KeyRing keyRing;
private final PriceFeedService priceFeedService;
private final BtcWalletService btcWalletService;
private final DumpDelayedPayoutTx dumpDelayedPayoutTx;
@Inject
public ClosedTradableManager(KeyRing keyRing,
PriceFeedService priceFeedService,
BtcWalletService btcWalletService,
Storage<TradableList<Tradable>> storage,
PersistenceManager<TradableList<Tradable>> persistenceManager,
DumpDelayedPayoutTx dumpDelayedPayoutTx) {
this.keyRing = keyRing;
this.priceFeedService = priceFeedService;
this.btcWalletService = btcWalletService;
tradableListStorage = storage;
this.dumpDelayedPayoutTx = dumpDelayedPayoutTx;
// The ClosedTrades object can become a few MB so we don't keep so many backups
tradableListStorage.setNumMaxBackupFiles(3);
this.persistenceManager = persistenceManager;
this.persistenceManager.initialize(closedTradables, "ClosedTrades");
}
@Override
public void readPersisted() {
closedTradables = new TradableList<>(tradableListStorage, "ClosedTrades");
TradableList<Tradable> persisted = persistenceManager.getPersisted("ClosedTrades");
if (persisted != null) {
closedTradables.setAll(persisted.getList());
}
closedTradables.forEach(tradable -> {
tradable.getOffer().setPriceFeedService(priceFeedService);
if (tradable instanceof Trade) {
Trade trade = (Trade) tradable;
trade.setTransientFields(tradableListStorage, btcWalletService);
}
});
dumpDelayedPayoutTx.maybeDumpDelayedPayoutTxs(closedTradables, "delayed_payout_txs_closed");
}
public void add(Tradable tradable) {
closedTradables.add(tradable);
if (closedTradables.add(tradable)) {
persistenceManager.requestPersistence();
}
}
public void remove(Tradable tradable) {
closedTradables.remove(tradable);
if (closedTradables.remove(tradable)) {
persistenceManager.requestPersistence();
}
}
public boolean wasMyOffer(Offer offer) {
@ -90,7 +90,7 @@ public class ClosedTradableManager implements PersistedDataHost {
}
public ObservableList<Tradable> getClosedTradables() {
return closedTradables.getList();
return closedTradables.getObservableList();
}
public List<Trade> getClosedTrades() {

View file

@ -27,8 +27,8 @@ import bisq.core.trade.Trade;
import bisq.core.trade.TradeUtils;
import bisq.common.crypto.KeyRing;
import bisq.common.persistence.PersistenceManager;
import bisq.common.proto.persistable.PersistedDataHost;
import bisq.common.storage.Storage;
import com.google.inject.Inject;
@ -45,11 +45,11 @@ import lombok.Setter;
public class FailedTradesManager implements PersistedDataHost {
private static final Logger log = LoggerFactory.getLogger(FailedTradesManager.class);
private TradableList<Trade> failedTrades;
private final TradableList<Trade> failedTrades = new TradableList<>();
private final KeyRing keyRing;
private final PriceFeedService priceFeedService;
private final BtcWalletService btcWalletService;
private final Storage<TradableList<Trade>> tradableListStorage;
private final PersistenceManager<TradableList<Trade>> persistenceManager;
private final DumpDelayedPayoutTx dumpDelayedPayoutTx;
@Setter
private Function<Trade, Boolean> unFailTradeCallback;
@ -58,37 +58,42 @@ public class FailedTradesManager implements PersistedDataHost {
public FailedTradesManager(KeyRing keyRing,
PriceFeedService priceFeedService,
BtcWalletService btcWalletService,
Storage<TradableList<Trade>> storage,
PersistenceManager<TradableList<Trade>> persistenceManager,
DumpDelayedPayoutTx dumpDelayedPayoutTx) {
this.keyRing = keyRing;
this.priceFeedService = priceFeedService;
this.btcWalletService = btcWalletService;
tradableListStorage = storage;
this.dumpDelayedPayoutTx = dumpDelayedPayoutTx;
this.persistenceManager = persistenceManager;
this.persistenceManager.initialize(failedTrades, "FailedTrades");
}
@Override
public void readPersisted() {
this.failedTrades = new TradableList<>(tradableListStorage, "FailedTrades");
TradableList<Trade> persisted = persistenceManager.getPersisted("FailedTrades");
if (persisted != null) {
failedTrades.setAll(persisted.getList());
}
failedTrades.forEach(trade -> {
if (trade.getOffer() != null) {
trade.getOffer().setPriceFeedService(priceFeedService);
}
trade.setTransientFields(tradableListStorage, btcWalletService);
});
dumpDelayedPayoutTx.maybeDumpDelayedPayoutTxs(failedTrades, "delayed_payout_txs_failed");
}
public void add(Trade trade) {
if (!failedTrades.contains(trade)) {
failedTrades.add(trade);
if (failedTrades.add(trade)) {
persistenceManager.requestPersistence();
}
}
public void removeTrade(Trade trade) {
failedTrades.remove(trade);
if (failedTrades.remove(trade)) {
persistenceManager.requestPersistence();
}
}
public boolean wasMyOffer(Offer offer) {
@ -96,7 +101,7 @@ public class FailedTradesManager implements PersistedDataHost {
}
public ObservableList<Trade> getFailedTrades() {
return failedTrades.getList();
return failedTrades.getObservableList();
}
public Optional<Trade> getTradeById(String id) {
@ -114,7 +119,9 @@ public class FailedTradesManager implements PersistedDataHost {
if (unFailTradeCallback.apply(trade)) {
log.info("Unfailing trade {}", trade.getId());
failedTrades.remove(trade);
if (failedTrades.remove(trade)) {
persistenceManager.requestPersistence();
}
}
}