+ @Transaction
+ private void storeAccountsAndTransactions(List<LedgerAccount> accounts,
+ List<LedgerTransaction> transactions) {
+ AccountDAO accDao = DB.get()
+ .getAccountDAO();
+ TransactionDAO trDao = DB.get()
+ .getTransactionDAO();
+ TransactionAccountDAO trAccDao = DB.get()
+ .getTransactionAccountDAO();
+ AccountValueDAO valDao = DB.get()
+ .getAccountValueDAO();
+
+ final List<AccountWithAmounts> list = new ArrayList<>();
+ for (LedgerAccount acc : accounts) {
+ final AccountWithAmounts a = acc.toDBOWithAmounts();
+ Account existing = accDao.getByNameSync(profile.getId(), acc.getName());
+ if (existing != null) {
+ a.account.setExpanded(existing.isExpanded());
+ a.account.setAmountsExpanded(existing.isAmountsExpanded());
+ a.account.setId(
+ existing.getId()); // not strictly needed, but since we have it anyway...
+ }
+
+ list.add(a);
+ }
+ accDao.storeAccountsSync(list, profile.getId());
+
+ long trGen = trDao.getGenerationSync(profile.getId());
+ for (LedgerTransaction tr : transactions) {
+ TransactionWithAccounts tran = tr.toDBO();
+ tran.transaction.setGeneration(trGen);
+ tran.transaction.setProfileId(profile.getId());
+
+ tran.transaction.setId(trDao.insertSync(tran.transaction));
+
+ for (TransactionAccount trAcc : tran.accounts) {
+ trAcc.setGeneration(trGen);
+ trAcc.setTransactionId(tran.transaction.getId());
+ trAcc.setId(trAccDao.insertSync(trAcc));
+ }
+ }
+
+ trDao.purgeOldTransactionsSync(profile.getId(), trGen);
+
+ DB.get()
+ .getOptionDAO()
+ .insertSync(new Option(profile.getId(), Option.OPT_LAST_SCRAPE,
+ String.valueOf((new Date()).getTime())));
+ }
+ public void throwIfCancelled() {