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=8b795ac1296ab703a74918a3a53393ba7418882f;hpb=5df10dc0b58df4d4be4e9ab34f1e0f477ca46766;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 8b795ac1..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%]+)\""); @@ -408,21 +408,20 @@ public class RetrieveTransactionsTask extends } } private List retrieveAccountListAnyVersion() - throws HTTPException, ApiNotSupportedException { + 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); } - throw new ApiNotSupportedException(); } - throw new RuntimeException("This should never be reached"); + throw new ApiNotSupportedException(); } private List retrieveAccountListForVersion(API version) throws IOException, HTTPException { @@ -437,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(); @@ -483,16 +481,15 @@ public class RetrieveTransactionsTask extends try { return retrieveTransactionListForVersion(ver); } - catch (Exception | HTTPException e) { + catch (Exception e) { Logger.debug("json", String.format(Locale.US, "Error during account list retrieval using API %s", ver.getDescription())); } - throw new ApiNotSupportedException(); } - throw new RuntimeException("This should never be reached"); + throw new ApiNotSupportedException(); } private List retrieveTransactionListForVersion(API apiVersion) throws IOException, ParseException, HTTPException { @@ -590,8 +587,8 @@ public class RetrieveTransactionsTask extends } catch (HTTPException e) { e.printStackTrace(); - return new Result(String.format("HTTP error %d: %s", e.getResponseCode(), - e.getResponseMessage())); + return new Result( + String.format("HTTP error %d: %s", e.getResponseCode(), e.getMessage())); } catch (IOException e) { e.printStackTrace(); @@ -629,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(); @@ -642,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() {