From ce8992867d794b66191035bdaee43c4359a6d0fd Mon Sep 17 00:00:00 2001 From: catbref Date: Wed, 5 Aug 2020 20:58:25 +0100 Subject: [PATCH] Include last 24 hours of CANCELLED & REFUNDED trade offers in first message --- .../api/websocket/TradeOffersWebSocket.java | 61 +++++++++++++------ 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/qortal/api/websocket/TradeOffersWebSocket.java b/src/main/java/org/qortal/api/websocket/TradeOffersWebSocket.java index a8967385..2520b1d8 100644 --- a/src/main/java/org/qortal/api/websocket/TradeOffersWebSocket.java +++ b/src/main/java/org/qortal/api/websocket/TradeOffersWebSocket.java @@ -63,14 +63,18 @@ public class TradeOffersWebSocket extends ApiWebSocket { // Save initial AT modes previousAtModes.putAll(initialAtStates.stream().collect(Collectors.toMap(ATStateData::getATAddress, atState -> BTCACCT.Mode.OFFERING))); + // Convert to offer summaries + crossChainOfferSummaries = produceSummaries(repository, initialAtStates, null); + if (includeHistoric) { - // We also want REDEEMED trades over the last 24 hours + // We also want REDEEMED/REFUNDED/CANCELLED trades over the last 24 hours long timestamp = NTP.getTime() - 24 * 60 * 60 * 1000L; minimumFinalHeight = repository.getBlockRepository().getHeightFromTimestamp(timestamp); if (minimumFinalHeight != 0) { isFinished = Boolean.TRUE; - expectedValue = (long) BTCACCT.Mode.REDEEMED.value; + dataByteOffset = null; + expectedValue = null; ++minimumFinalHeight; // because height is just *before* timestamp List historicAtStates = repository.getATRepository().getMatchingFinalATStates(BTCACCT.CODE_BYTES_HASH, @@ -78,18 +82,32 @@ public class TradeOffersWebSocket extends ApiWebSocket { null, null, null); if (historicAtStates == null) { - session.close(4002, "repository issue fetching REDEEMED trades"); + session.close(4002, "repository issue fetching historic trades"); return; } - initialAtStates.addAll(historicAtStates); + for (ATStateData historicAtState : historicAtStates) { + CrossChainOfferSummary historicOfferSummary = produceSummary(repository, historicAtState, null); - // Save initial AT modes - previousAtModes.putAll(historicAtStates.stream().collect(Collectors.toMap(ATStateData::getATAddress, atState -> BTCACCT.Mode.REDEEMED))); + switch (historicOfferSummary.getMode()) { + case REDEEMED: + case REFUNDED: + case CANCELLED: + break; + + default: + continue; + } + + // Add summary to initial burst + crossChainOfferSummaries.add(historicOfferSummary); + + // Save initial AT mode + previousAtModes.put(historicAtState.getATAddress(), historicOfferSummary.getMode()); + } } } - crossChainOfferSummaries = produceSummaries(repository, initialAtStates, null); } catch (DataException e) { session.close(4003, "generic repository issue"); return; @@ -168,22 +186,25 @@ public class TradeOffersWebSocket extends ApiWebSocket { return true; } + private static CrossChainOfferSummary produceSummary(Repository repository, ATStateData atState, Long timestamp) throws DataException { + CrossChainTradeData crossChainTradeData = BTCACCT.populateTradeData(repository, atState); + + long atStateTimestamp; + + if (crossChainTradeData.mode == BTCACCT.Mode.OFFERING) + // We want when trade was created, not when it was last updated + atStateTimestamp = atState.getCreation(); + else + atStateTimestamp = timestamp != null ? timestamp : repository.getBlockRepository().getTimestampFromHeight(atState.getHeight()); + + return new CrossChainOfferSummary(crossChainTradeData, atStateTimestamp); + } + private static List produceSummaries(Repository repository, List atStates, Long timestamp) throws DataException { List offerSummaries = new ArrayList<>(); - for (ATStateData atState : atStates) { - CrossChainTradeData crossChainTradeData = BTCACCT.populateTradeData(repository, atState); - - long atStateTimestamp; - if (crossChainTradeData.mode == BTCACCT.Mode.OFFERING) { - // We want when trade was created, not when it was last updated - atStateTimestamp = atState.getCreation(); - } else { - atStateTimestamp = timestamp != null ? timestamp : repository.getBlockRepository().getTimestampFromHeight(atState.getHeight()); - } - - offerSummaries.add(new CrossChainOfferSummary(crossChainTradeData, atStateTimestamp)); - } + for (ATStateData atState : atStates) + offerSummaries.add(produceSummary(repository, atState, timestamp)); return offerSummaries; }