+ @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();
+
+ Logger.debug(TAG, "Preparing account list");
+ 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);
+ }
+ Logger.debug(TAG, "Account list prepared. Storing");
+ accDao.storeAccountsSync(list, profile.getId());
+ Logger.debug(TAG, "Account list stored");
+
+ Profiler tranProfiler = new Profiler("transactions");
+ Profiler tranAccProfiler = new Profiler("transaction accounts");
+
+ Logger.debug(TAG, "Storing transactions");
+ long trGen = trDao.getGenerationSync(profile.getId());
+ for (LedgerTransaction tr : transactions) {
+ TransactionWithAccounts tran = tr.toDBO();
+ tran.transaction.setGeneration(trGen);
+ tran.transaction.setProfileId(profile.getId());
+
+ tranProfiler.opStart();
+ tran.transaction.setId(trDao.insertSync(tran.transaction));
+ tranProfiler.opEnd();
+
+ for (TransactionAccount trAcc : tran.accounts) {
+ trAcc.setGeneration(trGen);
+ trAcc.setTransactionId(tran.transaction.getId());
+ tranAccProfiler.opStart();
+ trAcc.setId(trAccDao.insertSync(trAcc));
+ tranAccProfiler.opEnd();
+ }
+ }
+
+ tranProfiler.dumpStats();
+ tranAccProfiler.dumpStats();
+
+ Logger.debug(TAG, "Transactions stored. Purging old");
+ trDao.purgeOldTransactionsSync(profile.getId(), trGen);
+ Logger.debug(TAG, "Old transactions purged");
+
+ DB.get()
+ .getOptionDAO()
+ .insertSync(new Option(profile.getId(), Option.OPT_LAST_SCRAPE,
+ String.valueOf((new Date()).getTime())));
+ }
+ public void throwIfCancelled() {