diff --git a/main.go b/main.go index e0b6305..03ed69f 100644 --- a/main.go +++ b/main.go @@ -86,22 +86,29 @@ func refreshData() { } lastRefresh = time.Now() + var wg *sync.WaitGroup + // Loop through each configured account provider and attempt to get the account balances, and update YNAB for _, p := range configuredProviders { - balances, accountIDs, err := p.GetBalances() - if err != nil { - log.Printf("failed to get balances with provider '%s': %v", p.Name(), err) - continue - } - if len(balances) != len(accountIDs) { - log.Printf("'%s' provider data validation error: mismatched balance and accountID slice lengths - expected the same: balances length = %d, accountIDs length = %d", p.Name(), len(balances), len(accountIDs)) - continue - } - for i := range balances { - err = ynabClient.SetAccountBalance(accountIDs[i], balances[i]) + wg.Add(1) + go func() { + defer wg.Done() + balances, accountIDs, err := p.GetBalances() if err != nil { - log.Printf("failed to update ynab account '%s' balance: %v", accountIDs[i], err) + log.Printf("failed to get balances with provider '%s': %v", p.Name(), err) + return } - } + if len(balances) != len(accountIDs) { + log.Printf("'%s' provider data validation error: mismatched balance and accountID slice lengths - expected the same: balances length = %d, accountIDs length = %d", p.Name(), len(balances), len(accountIDs)) + return + } + for i := range balances { + err = ynabClient.SetAccountBalance(accountIDs[i], balances[i]) + if err != nil { + log.Printf("failed to update ynab account '%s' balance: %v", accountIDs[i], err) + } + } + }() } + wg.Wait() }