@Override public void onTransactionHistory(AddressStatus status, List<HistoryTx> historyTxes) { lock.lock(); try { AddressStatus updatingStatus = statusPendingUpdates.get(status.getAddress()); // Check if this updating status is valid if (updatingStatus != null && updatingStatus.equals(status)) { updatingStatus.queueHistoryTransactions(historyTxes); fetchTransactionsIfNeeded(historyTxes); tryToApplyState(); } else { log.info("Ignoring history tx call because no entry found or newer entry."); } } finally { lock.unlock(); } }
@Override public void onUnspentTransactionUpdate(AddressStatus status, List<UnspentTx> unspentTxes) { lock.lock(); try { AddressStatus updatingStatus = statusPendingUpdates.get(status.getAddress()); // Check if this updating status is valid if (updatingStatus != null && updatingStatus.equals(status)) { updatingStatus.queueUnspentTransactions(unspentTxes); fetchTransactionsIfNeeded(unspentTxes); tryToApplyState(updatingStatus); } else { log.info("Ignoring unspent tx call because no entry found or newer entry."); } } finally { lock.unlock(); } }
void commitAddressStatus(AddressStatus newStatus) { if (!newStatus.canCommitStatus()) { log.warn("Tried to commit an address status with a non applied state: {}:{}", newStatus.getAddress(), newStatus.getStatus()); return; } lock.lock(); try { AddressStatus updatingStatus = statusPendingUpdates.get(newStatus.getAddress()); if (updatingStatus != null && updatingStatus.equals(newStatus)) { statusPendingUpdates.remove(newStatus.getAddress()); } addressesStatus.put(newStatus.getAddress(), newStatus.getStatus()); queueOnConnectivity(); } finally { lock.unlock(); } // Skip saving null statuses if (newStatus.getStatus() != null) { walletSaveLater(); } }