diff --git a/src/internals/accounts/sync.js b/src/internals/accounts/sync.js index d30d9db6..0dd24e30 100644 --- a/src/internals/accounts/sync.js +++ b/src/internals/accounts/sync.js @@ -17,14 +17,7 @@ export default (send: Function) => ({ send('accounts.sync.progress', null, { kill: false }) try { - const result = await accounts.reduce( - (promise, account) => - promise.then(async results => { - const result = await syncAccount(account) - return [...results, result] - }), - Promise.resolve([]), - ) + const result = await Promise.all(accounts.map(syncAccount)) send('accounts.sync.success', result) } catch (err) { diff --git a/src/renderer/events.js b/src/renderer/events.js index 2d7e738a..a08f42c1 100644 --- a/src/renderer/events.js +++ b/src/renderer/events.js @@ -3,6 +3,7 @@ import { ipcRenderer } from 'electron' import objectPath from 'object-path' import get from 'lodash/get' +import uniqBy from 'lodash/uniqBy' import type { Accounts } from 'types/common' @@ -11,7 +12,7 @@ import { CHECK_UPDATE_TIMEOUT, SYNC_ACCOUNT_TIMEOUT } from 'constants' import { updateDevices, addDevice, removeDevice } from 'actions/devices' import { syncAccount } from 'actions/accounts' import { setUpdateStatus } from 'reducers/update' -import { getAccounts } from 'reducers/accounts' +import { getAccountData, getAccounts } from 'reducers/accounts' type MsgPayload = { type: string, @@ -66,9 +67,17 @@ export default ({ store, locked }: { store: Object, locked: boolean }) => { sync: { success: accounts => { if (syncAccounts) { - accounts.forEach( - account => account.transactions.length > 0 && store.dispatch(syncAccount(account)), - ) + const currentState = store.getState() + accounts.forEach(account => { + const currentAccountData = getAccountData(currentState, account.id) || {} + const transactions = uniqBy( + [...currentAccountData.transactions, ...account.transactions], + tx => tx.hash, + ) + if (currentAccountData.transactions.length !== transactions.length) { + store.dispatch(syncAccount(account)) + } + }) syncTimeout = setTimeout(() => { const newAccounts = getAccounts(store.getState()) startSyncAccounts(newAccounts)