X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fasync%2FRetrieveTransactionsTask.java;h=b004ec9a0f1a11e6077f3327c0425365a3b4e443;hb=b30e9bd1cb3347a5db4b53729e491f4adcbb12ba;hp=8ac793663eb686ccc00d428db93b965ef8c4a2f8;hpb=24eea00d6f49faeaf5bbbdad6178dc53ecfa08a5;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 8ac79366..b004ec9a 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java @@ -18,16 +18,15 @@ package net.ktnx.mobileledger.async; import android.annotation.SuppressLint; -import android.database.sqlite.SQLiteDatabase; 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.App; import net.ktnx.mobileledger.dao.AccountDAO; import net.ktnx.mobileledger.dao.AccountValueDAO; import net.ktnx.mobileledger.dao.TransactionAccountDAO; @@ -50,8 +49,8 @@ import net.ktnx.mobileledger.model.LedgerTransaction; import net.ktnx.mobileledger.model.LedgerTransactionAccount; import net.ktnx.mobileledger.ui.MainModel; import net.ktnx.mobileledger.utils.Logger; -import net.ktnx.mobileledger.utils.MLDB; import net.ktnx.mobileledger.utils.NetworkUtil; +import net.ktnx.mobileledger.utils.Profiler; import java.io.BufferedReader; import java.io.IOException; @@ -88,6 +87,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%]+)\""); @@ -407,15 +407,16 @@ public class RetrieveTransactionsTask extends return retrieveAccountListForVersion(apiVersion); } } - private List retrieveAccountListAnyVersion() throws ApiNotSupportedException { + private List retrieveAccountListAnyVersion() + throws ApiNotSupportedException, IOException, HTTPException { for (API ver : API.allVersions) { try { return retrieveAccountListForVersion(ver); } - catch (Exception e) { + catch (JsonParseException | RuntimeJsonMappingException e) { Logger.debug("json", String.format(Locale.US, "Error during account list retrieval using API %s", - ver.getDescription())); + ver.getDescription()), e); } } @@ -435,7 +436,6 @@ public class RetrieveTransactionsTask extends throw new HTTPException(http.getResponseCode(), http.getResponseMessage()); } publishProgress(Progress.indeterminate()); - SQLiteDatabase db = App.getDatabase(); ArrayList list = new ArrayList<>(); HashMap map = new HashMap<>(); throwIfCancelled(); @@ -626,6 +626,7 @@ public class RetrieveTransactionsTask extends AccountValueDAO valDao = DB.get() .getAccountValueDAO(); + Logger.debug(TAG, "Preparing account list"); final List list = new ArrayList<>(); for (LedgerAccount acc : accounts) { final AccountWithAmounts a = acc.toDBOWithAmounts(); @@ -639,28 +640,43 @@ public class RetrieveTransactionsTask extends 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(), MLDB.OPT_LAST_SCRAPE, + .insertSync(new Option(profile.getId(), Option.OPT_LAST_SCRAPE, String.valueOf((new Date()).getTime()))); } public void throwIfCancelled() {