X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fasync%2FRetrieveTransactionsTask.java;h=ad0641216b68b28cbb98292d04b1a082df2cec7b;hp=f0a7e0e6f0152b3f2c2291b4dd10bda8d79959ac;hb=bb21e22f7b251a22cc830358e9f2c1d2911965c4;hpb=a4ab99925eefb09f23745bae8bdeb29f76aa6bc2 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 f0a7e0e6..ad064121 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java @@ -30,7 +30,6 @@ import net.ktnx.mobileledger.model.LedgerAccount; import net.ktnx.mobileledger.model.LedgerTransaction; import net.ktnx.mobileledger.model.LedgerTransactionAccount; import net.ktnx.mobileledger.ui.activity.MainActivity; -import net.ktnx.mobileledger.ui.transaction_list.TransactionListViewModel; import net.ktnx.mobileledger.utils.MLDB; import net.ktnx.mobileledger.utils.NetworkUtil; @@ -45,13 +44,13 @@ import java.net.MalformedURLException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Date; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RetrieveTransactionsTask extends AsyncTask { + public static final int MATCHING_TRANSACTIONS_LIMIT = 50; private static final Pattern transactionStartPattern = Pattern.compile("([\\d.-]+)"); private static final Pattern transactionDescriptionPattern = @@ -62,6 +61,7 @@ public class RetrieveTransactionsTask extends protected WeakReference contextRef; protected int error; // %3A is '=' + private Pattern ledger_title_re = Pattern.compile("

([^<]+)

"); Pattern account_name_re = Pattern.compile("/register\\?q=inacct%3A([a-zA-Z0-9%]+)\""); Pattern account_value_re = Pattern.compile( "\\s*([-+]?[\\d.,]+)(?:\\s+(\\S+))?"); @@ -109,7 +109,8 @@ public class RetrieveTransactionsTask extends Progress progress = new Progress(); int maxTransactionId = Progress.INDETERMINATE; success = false; - List accountList = new ArrayList<>(); + ArrayList accountList = new ArrayList<>(); + ArrayList transactionList = new ArrayList<>(); LedgerAccount lastAccount = null; Data.backgroundTaskCount.incrementAndGet(); try { @@ -125,6 +126,8 @@ public class RetrieveTransactionsTask extends String.format("HTTP error %d", http.getResponseCode())); db.beginTransaction(); try { + String ledgerTitle = null; + db.execSQL("UPDATE transactions set keep=0"); db.execSQL("update account_values set keep=0;"); db.execSQL("update accounts set keep=0;"); @@ -165,6 +168,13 @@ public class RetrieveTransactionsTask extends state = ParserState.EXPECTING_ACCOUNT_AMOUNT; L("→ expecting account amount"); } + else if (ledgerTitle == null) { + m = ledger_title_re.matcher(line); + if (m.find()) { + ledgerTitle = m.group(1); + Data.ledgerTitle.set(ledgerTitle); + } + } break; case EXPECTING_ACCOUNT_AMOUNT: @@ -181,8 +191,7 @@ public class RetrieveTransactionsTask extends L("curr=" + currency + ", value=" + value); db.execSQL( "insert or replace into account_values(account, currency, value, keep) values(?, ?, ?, 1);", - new Object[]{lastAccount.getName(), - currency, + new Object[]{lastAccount.getName(), currency, Float.valueOf(value) }); lastAccount.addAmount(Float.parseFloat(value), currency); @@ -247,7 +256,9 @@ public class RetrieveTransactionsTask extends "=?", new Integer[]{transaction.getId()}); matchedTransactionsCount++; - if (matchedTransactionsCount == 100) { + if (matchedTransactionsCount == + MATCHING_TRANSACTIONS_LIMIT) + { db.execSQL("UPDATE transactions SET keep=1 WHERE " + "id < ?", new Integer[]{transaction.getId()}); @@ -272,6 +283,7 @@ public class RetrieveTransactionsTask extends L(String.format( "transaction %s saved → expecting transaction", transaction.getId())); + transactionList.add(transaction); // sounds like a good idea, but transaction-1 may not be the first one chronologically // for example, when you add the initial seeding transaction after entering some others @@ -300,25 +312,27 @@ public class RetrieveTransactionsTask extends break; default: throw new RuntimeException( - String.format("Unknown parser updating %s", state.name())); + String.format("Unknown parser updating %s", + state.name())); } } - if (!isCancelled()) { - db.execSQL("DELETE FROM transactions WHERE keep = 0"); - db.setTransactionSuccessful(); - } + + throwIfCancelled(); + + db.execSQL("DELETE FROM transactions WHERE keep = 0"); + db.setTransactionSuccessful(); + + Log.d("db", "Updating transaction value stamp"); + Date now = new Date(); + MLDB.set_option_value(MLDB.OPT_TRANSACTION_LIST_STAMP, now.getTime()); + Data.lastUpdateDate.set(now); + Data.transactions.set(transactionList); } finally { db.endTransaction(); } } } - - if (success && !isCancelled()) { - Log.d("db", "Updating transaction value stamp"); - MLDB.set_option_value(MLDB.OPT_TRANSACTION_LIST_STAMP, new Date().getTime()); - TransactionListViewModel.scheduleTransactionListReload(ctx); - } } catch (MalformedURLException e) { error = R.string.err_bad_backend_url; @@ -332,6 +346,10 @@ public class RetrieveTransactionsTask extends error = R.string.err_net_io_error; e.printStackTrace(); } + catch (OperationCanceledException e) { + error = R.string.err_cancelled; + e.printStackTrace(); + } finally { Data.backgroundTaskCount.decrementAndGet(); }