From 9f3a378f69402ebe9dd27d3eeacaf898fd1fdbed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=ABck=20V=C3=A9zien?= Date: Fri, 26 Jan 2018 13:56:39 +0100 Subject: [PATCH] Sync each account one by one instead of all accounts --- src/internals/accounts/sync.js | 8 ++++++-- src/renderer/events.js | 34 ++++++++++++++++++++-------------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/internals/accounts/sync.js b/src/internals/accounts/sync.js index 0dd24e30..f660f96b 100644 --- a/src/internals/accounts/sync.js +++ b/src/internals/accounts/sync.js @@ -17,9 +17,13 @@ export default (send: Function) => ({ send('accounts.sync.progress', null, { kill: false }) try { - const result = await Promise.all(accounts.map(syncAccount)) + await Promise.all( + accounts.map(a => + syncAccount(a).then(account => send('account.sync.success', account, { kill: false })), + ), + ) - send('accounts.sync.success', result) + send('accounts.sync.success') } catch (err) { send('accounts.sync.fail', err.stack || err) } diff --git a/src/renderer/events.js b/src/renderer/events.js index a08f42c1..a90b4310 100644 --- a/src/renderer/events.js +++ b/src/renderer/events.js @@ -63,24 +63,30 @@ export function checkUpdates() { export default ({ store, locked }: { store: Object, locked: boolean }) => { const handlers = { + account: { + sync: { + success: account => { + if (syncAccounts) { + const currentAccountData = getAccountData(store.getState(), account.id) || {} + const transactions = uniqBy( + [...currentAccountData.transactions, ...account.transactions], + tx => tx.hash, + ) + + if (currentAccountData.transactions.length !== transactions.length) { + store.dispatch(syncAccount(account)) + } + } + }, + }, + }, accounts: { sync: { - success: accounts => { + success: () => { if (syncAccounts) { - 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) + const accounts = getAccounts(store.getState()) + startSyncAccounts(accounts) }, SYNC_ACCOUNT_TIMEOUT) } },