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=85f7665146b556303edfbe8435738b740394e50b;hp=71131a075b9f3c2b183fcca8989548e731393fdd;hb=bcf517d0eae491de46b71a1e0f288852ca3d64df;hpb=5bba2c06a81c87327fdcf3f2a85c3206d932c2f9 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 71131a07..85f76651 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java @@ -27,8 +27,6 @@ import androidx.annotation.NonNull; import net.ktnx.mobileledger.App; import net.ktnx.mobileledger.err.HTTPException; import net.ktnx.mobileledger.json.v1_15.AccountListParser; -import net.ktnx.mobileledger.json.v1_15.ParsedBalance; -import net.ktnx.mobileledger.json.v1_15.ParsedLedgerAccount; import net.ktnx.mobileledger.json.v1_15.ParsedLedgerTransaction; import net.ktnx.mobileledger.json.v1_15.TransactionListParser; import net.ktnx.mobileledger.model.Data; @@ -74,12 +72,13 @@ public class RetrieveTransactionsTask extends private static final Pattern reDecimalPoint = Pattern.compile("\\.\\d\\d?$"); private static final Pattern reDecimalComma = Pattern.compile(",\\d\\d?$"); // %3A is '=' - private Pattern reAccountName = Pattern.compile("/register\\?q=inacct%3A([a-zA-Z0-9%]+)\""); - private Pattern reAccountValue = Pattern.compile( + private final Pattern reAccountName = + Pattern.compile("/register\\?q=inacct%3A([a-zA-Z0-9%]+)\""); + private final Pattern reAccountValue = Pattern.compile( "\\s*([-+]?[\\d.,]+)(?:\\s+(\\S+))?"); - private MainModel mainModel; - private MobileLedgerProfile profile; - private List prevAccounts; + private final MainModel mainModel; + private final MobileLedgerProfile profile; + private final List prevAccounts; private int expectedPostingsCount = -1; public RetrieveTransactionsTask(@NonNull MainModel mainModel, @NonNull MobileLedgerProfile profile, @@ -118,6 +117,9 @@ public class RetrieveTransactionsTask extends return null; } } + public MobileLedgerProfile getProfile() { + return profile; + } @Override protected void onProgressUpdate(Progress... values) { super.onProgressUpdate(values); @@ -355,9 +357,9 @@ public class RetrieveTransactionsTask extends throwIfCancelled(); } } - private @NonNull - LedgerAccount ensureAccountExists(String accountName, HashMap map, - ArrayList createdAccounts) { + @NonNull + public LedgerAccount ensureAccountExists(String accountName, HashMap map, + ArrayList createdAccounts) { LedgerAccount acc = map.get(accountName); if (acc != null) @@ -376,6 +378,9 @@ public class RetrieveTransactionsTask extends createdAccounts.add(acc); return acc; } + public void addNumberOfPostings(int number) { + expectedPostingsCount += number; + } private List retrieveAccountList() throws IOException, HTTPException { HttpURLConnection http = NetworkUtil.prepareConnection(profile, "accounts"); http.setAllowUserInteraction(false); @@ -405,53 +410,10 @@ public class RetrieveTransactionsTask extends while (true) { throwIfCancelled(); - ParsedLedgerAccount parsedAccount = parser.nextAccount(); - if (parsedAccount == null) { + LedgerAccount acc = parser.nextLedgerAccount(this, map); + if (acc == null) break; - } - expectedPostingsCount += parsedAccount.getAnumpostings(); - final String accName = parsedAccount.getAname(); - LedgerAccount acc = map.get(accName); - if (acc != null) - throw new RuntimeException( - String.format("Account '%s' already present", acc.getName())); - String parentName = LedgerAccount.extractParentName(accName); - ArrayList createdParents = new ArrayList<>(); - LedgerAccount parent; - if (parentName == null) { - parent = null; - } - else { - parent = ensureAccountExists(parentName, map, createdParents); - parent.setHasSubAccounts(true); - } - acc = new LedgerAccount(profile, accName, parent); list.add(acc); - map.put(accName, acc); - - String lastCurrency = null; - float lastCurrencyAmount = 0; - for (ParsedBalance b : parsedAccount.getAibalance()) { - throwIfCancelled(); - final String currency = b.getAcommodity(); - final float amount = b.getAquantity() - .asFloat(); - if (currency.equals(lastCurrency)) { - lastCurrencyAmount += amount; - } - else { - if (lastCurrency != null) { - acc.addAmount(lastCurrencyAmount, lastCurrency); - } - lastCurrency = currency; - lastCurrencyAmount = amount; - } - } - if (lastCurrency != null) { - acc.addAmount(lastCurrencyAmount, lastCurrency); - } - for (LedgerAccount p : createdParents) - acc.propagateAmountsTo(p); } throwIfCancelled(); } @@ -575,7 +537,7 @@ public class RetrieveTransactionsTask extends Data.backgroundTaskFinished(); } } - private void throwIfCancelled() { + public void throwIfCancelled() { if (isCancelled()) throw new OperationCanceledException(null); }