fix bug to delete scheduled failed trade after restart

This commit is contained in:
woodser 2025-03-06 10:53:18 -05:00 committed by woodser
parent 2d46b2ab7c
commit 8b1d2aa203
2 changed files with 13 additions and 8 deletions

View File

@ -1618,15 +1618,16 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
// done if wallet already deleted
if (!walletExists()) return;
// move to failed trades
processModel.getTradeManager().onMoveInvalidTradeToFailedTrades(this);
// set error height
if (processModel.getTradeProtocolErrorHeight() == 0) {
log.warn("Scheduling to remove trade if unfunded for {} {} from height {}", getClass().getSimpleName(), getId(), xmrConnectionService.getLastInfo().getHeight());
processModel.setTradeProtocolErrorHeight(xmrConnectionService.getLastInfo().getHeight());
processModel.setTradeProtocolErrorHeight(xmrConnectionService.getLastInfo().getHeight()); // height denotes scheduled error handling
}
// move to failed trades
processModel.getTradeManager().onMoveInvalidTradeToFailedTrades(this);
requestPersistence();
// listen for deposits published to restore trade
protocolErrorStateSubscription = EasyBind.subscribe(stateProperty(), state -> {
if (isDepositsPublished()) {
@ -1680,6 +1681,10 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
});
}
public boolean isProtocolErrorHandlingScheduled() {
return processModel.getTradeProtocolErrorHeight() > 0;
}
private void restoreDepositsPublishedTrade() {
// close open offer

View File

@ -450,8 +450,8 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi
return;
}
// skip if marked as failed
if (failedTradesManager.getObservableList().contains(trade)) {
// skip if failed and error handling not scheduled
if (failedTradesManager.getObservableList().contains(trade) && !trade.isProtocolErrorHandlingScheduled()) {
log.warn("Skipping initialization of failed trade {} {}", trade.getClass().getSimpleName(), trade.getId());
tradesToSkip.add(trade);
return;
@ -460,8 +460,8 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi
// initialize trade
initPersistedTrade(trade);
// remove trade if protocol didn't initialize
if (getOpenTradeByUid(trade.getUid()).isPresent() && !trade.isDepositsPublished()) {
// record if protocol didn't initialize
if (!trade.isDepositsPublished()) {
uninitializedTrades.add(trade);
}
} catch (Exception e) {