X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fasync%2FRetrieveTransactionsTask.java;h=0e42f87dfcd75b3e0de018dc1c23224c8807675b;hb=451569cb01799c684b210cd6839d68825092a117;hp=7b1b4504300c9656b083b0a21ae09a9cc7a0d014;hpb=1fe7c92ffb82a8d6e4dd354154c46b26d8afe48b;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java index 7b1b4504..0e42f87d 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java @@ -22,21 +22,17 @@ import android.os.AsyncTask; import android.os.OperationCanceledException; import androidx.annotation.NonNull; -import androidx.room.Transaction; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.RuntimeJsonMappingException; import net.ktnx.mobileledger.dao.AccountDAO; -import net.ktnx.mobileledger.dao.AccountValueDAO; -import net.ktnx.mobileledger.dao.TransactionAccountDAO; import net.ktnx.mobileledger.dao.TransactionDAO; import net.ktnx.mobileledger.db.Account; import net.ktnx.mobileledger.db.AccountWithAmounts; import net.ktnx.mobileledger.db.DB; import net.ktnx.mobileledger.db.Option; import net.ktnx.mobileledger.db.Profile; -import net.ktnx.mobileledger.db.TransactionAccount; import net.ktnx.mobileledger.db.TransactionWithAccounts; import net.ktnx.mobileledger.err.HTTPException; import net.ktnx.mobileledger.json.API; @@ -86,6 +82,7 @@ public class RetrieveTransactionsTask extends private static final Pattern reEnd = Pattern.compile("\\bid=\"addmodal\""); private static final Pattern reDecimalPoint = Pattern.compile("\\.\\d\\d?$"); private static final Pattern reDecimalComma = Pattern.compile(",\\d\\d?$"); + private static final String TAG = "RTT"; // %3A is '=' private final Pattern reAccountName = Pattern.compile("/register\\?q=inacct%3A([a-zA-Z0-9%]+)\""); @@ -573,11 +570,11 @@ public class RetrieveTransactionsTask extends retrieveTransactionListLegacy(accounts, transactions); } - storeAccountsAndTransactions(accounts, transactions); - mainModel.updateDisplayedTransactionsFromWeb(transactions); - return new Result(accounts, transactions); + new AccountAndTransactionListSaver(accounts, transactions).start(); + + return new Result(null); } catch (MalformedURLException e) { e.printStackTrace(); @@ -612,55 +609,6 @@ public class RetrieveTransactionsTask extends Data.backgroundTaskFinished(); } } - @Transaction - private void storeAccountsAndTransactions(List accounts, - List transactions) { - AccountDAO accDao = DB.get() - .getAccountDAO(); - TransactionDAO trDao = DB.get() - .getTransactionDAO(); - TransactionAccountDAO trAccDao = DB.get() - .getTransactionAccountDAO(); - AccountValueDAO valDao = DB.get() - .getAccountValueDAO(); - - final List 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() { if (isCancelled()) throw new OperationCanceledException(null); @@ -758,4 +706,60 @@ public class RetrieveTransactionsTask extends this.transactions = transactions; } } + + private class AccountAndTransactionListSaver extends Thread { + private final List accounts; + private final List transactions; + public AccountAndTransactionListSaver(List accounts, + List transactions) { + this.accounts = accounts; + this.transactions = transactions; + } + private void storeAccountsAndTransactions(List accounts, + List transactions) { + AccountDAO accDao = DB.get() + .getAccountDAO(); + TransactionDAO trDao = DB.get() + .getTransactionDAO(); + + Logger.debug(TAG, "Preparing account list"); + final List 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"); + + Logger.debug(TAG, "Preparing transaction list"); + final List tranList = new ArrayList<>(); + + for (LedgerTransaction tr : transactions) + tranList.add(tr.toDBO()); + + Logger.debug(TAG, "Storing transaction list"); + trDao.storeTransactionsSync(tranList, profile.getId()); + + Logger.debug(TAG, "Transactions stored"); + + DB.get() + .getOptionDAO() + .insertSync(new Option(profile.getId(), Option.OPT_LAST_SCRAPE, + String.valueOf((new Date()).getTime()))); + } + @Override + public void run() { + storeAccountsAndTransactions(accounts, transactions); + } + } }