From 4f90d5d2ca1f7da08175faf9f155ce0d1e7d8222 Mon Sep 17 00:00:00 2001 From: Mauricio Perdomo Date: Tue, 28 Jan 2020 22:37:14 -0500 Subject: [PATCH] [model] Fix GetNewTransactions and GetNewTransactions method for don't return duplicated transacions --- src/models/history/historyManager.go | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/models/history/historyManager.go b/src/models/history/historyManager.go index 441fbaa6..22b1e0dd 100644 --- a/src/models/history/historyManager.go +++ b/src/models/history/historyManager.go @@ -228,13 +228,17 @@ func (hm *HistoryManager) getNewTransactions() []*transactions.TransactionDetail hm.mutexForNew.Lock() defer hm.mutexForNew.Unlock() txnsForReturn := make([]*transactions.TransactionDetails, 0) + added := make(map[string]struct{}, 0) for addr, _ := range hm.newTxn { for _, txn := range hm.newTxn[addr] { - txnDetail, err := TransactionDetailsFromCoreTxn(txn, hm.addresses) - if err != nil { - logHistoryManager.WithError(err).Warn("Couldn't convert transaction") + if _, exist := added[txn.GetId()]; !exist { + txnDetail, err := TransactionDetailsFromCoreTxn(txn, hm.addresses) + if err != nil { + logHistoryManager.WithError(err).Warn("Couldn't convert transaction") + } + added[txn.GetId()] = struct{}{} + txnsForReturn = append(txnsForReturn, txnDetail) } - txnsForReturn = append(txnsForReturn, txnDetail) hm.mutexForAll.Lock() _, exist := hm.txnForAddresses[addr] if exist { @@ -253,13 +257,18 @@ func (hm *HistoryManager) getNewTransactionsWithFilters() []*transactions.Transa hm.mutexForNew.Lock() defer hm.mutexForNew.Unlock() txnsForReturn := make([]*transactions.TransactionDetails, 0) + added := make(map[string]struct{}, 0) for _, addr := range hm.filters { for _, txn := range hm.newTxn[addr] { - txnDetail, err := TransactionDetailsFromCoreTxn(txn, hm.addresses) - if err != nil { - logHistoryManager.WithError(err).Warn("Couldn't convert transaction") + if _, exist := added[txn.GetId()]; !exist { + txnDetail, err := TransactionDetailsFromCoreTxn(txn, hm.addresses) + if err != nil { + logHistoryManager.WithError(err).Warn("Couldn't convert transaction") + } + txnsForReturn = append(txnsForReturn, txnDetail) + added[txn.GetId()] = struct{}{} } - txnsForReturn = append(txnsForReturn, txnDetail) + hm.mutexForAll.Lock() _, exist := hm.txnForAddresses[addr] if exist {