From 1930f3fa34616229bd6a83654e6527672064196a Mon Sep 17 00:00:00 2001 From: Damyan Ivanov Date: Wed, 26 Aug 2020 23:05:35 +0300 Subject: [PATCH] proper transaction parsing progress accounts data has the number of postings which can be used to determine the remaining work --- .../mobileledger/async/RetrieveTransactionsTask.java | 11 ++++++++--- .../mobileledger/json/v1_14/ParsedLedgerAccount.java | 7 +++++++ .../mobileledger/json/v1_15/ParsedLedgerAccount.java | 7 +++++++ 3 files changed, 22 insertions(+), 3 deletions(-) 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 288301f0..ac9ec509 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java @@ -75,6 +75,7 @@ public class RetrieveTransactionsTask private Pattern reAccountValue = Pattern.compile( "\\s*([-+]?[\\d.,]+)(?:\\s+(\\S+))?"); private MobileLedgerProfile profile; + private int expectedPostingsCount = -1; public RetrieveTransactionsTask(@NonNull MobileLedgerProfile profile) { this.profile = profile; } @@ -131,6 +132,7 @@ public class RetrieveTransactionsTask private String retrieveTransactionListLegacy() throws IOException, HTTPException { Progress progress = Progress.indeterminate(); progress.setState(ProgressState.RUNNING); + progress.setTotal(expectedPostingsCount); int maxTransactionId = -1; ArrayList list = new ArrayList<>(); HashMap map = new HashMap<>(); @@ -393,6 +395,7 @@ public class RetrieveTransactionsTask throw new IOException(String.format("HTTP error %d", http.getResponseCode())); AccountListParser parser = new AccountListParser(resp); + expectedPostingsCount = 0; while (true) { throwIfCancelled(); @@ -400,7 +403,7 @@ public class RetrieveTransactionsTask if (parsedAccount == null) { break; } - + expectedPostingsCount += parsedAccount.getAnumpostings(); final String accName = parsedAccount.getAname(); LedgerAccount acc = map.get(accName); if (acc != null) @@ -462,6 +465,7 @@ public class RetrieveTransactionsTask private boolean retrieveTransactionList() throws IOException, ParseException, HTTPException { Progress progress = new Progress(); int maxTransactionId = Data.transactions.size(); + progress.setTotal(expectedPostingsCount); HttpURLConnection http = NetworkUtil.prepareConnection(profile, "transactions"); http.setAllowUserInteraction(false); @@ -480,7 +484,7 @@ public class RetrieveTransactionsTask TransactionListParser parser = new TransactionListParser(resp); - int processedTransactionCount = 0; + int processedPostings = 0; while (true) { throwIfCancelled(); @@ -492,7 +496,8 @@ public class RetrieveTransactionsTask LedgerTransaction transaction = parsedTransaction.asLedgerTransaction(); trList.add(transaction); - progress.setProgress(++processedTransactionCount); + progress.setProgress(processedPostings += transaction.getAccounts() + .size()); publishProgress(progress); } diff --git a/app/src/main/java/net/ktnx/mobileledger/json/v1_14/ParsedLedgerAccount.java b/app/src/main/java/net/ktnx/mobileledger/json/v1_14/ParsedLedgerAccount.java index d346cb76..30814009 100644 --- a/app/src/main/java/net/ktnx/mobileledger/json/v1_14/ParsedLedgerAccount.java +++ b/app/src/main/java/net/ktnx/mobileledger/json/v1_14/ParsedLedgerAccount.java @@ -26,8 +26,15 @@ public class ParsedLedgerAccount { private List aebalance; private List aibalance; private String aname; + private int anumpostings; public ParsedLedgerAccount() { } + public int getAnumpostings() { + return anumpostings; + } + public void setAnumpostings(int anumpostings) { + this.anumpostings = anumpostings; + } public List getAebalance() { return aebalance; } diff --git a/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedLedgerAccount.java b/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedLedgerAccount.java index 89f3ccce..460575fc 100644 --- a/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedLedgerAccount.java +++ b/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedLedgerAccount.java @@ -26,8 +26,15 @@ public class ParsedLedgerAccount { private List aebalance; private List aibalance; private String aname; + private int anumpostings; public ParsedLedgerAccount() { } + public int getAnumpostings() { + return anumpostings; + } + public void setAnumpostings(int anumpostings) { + this.anumpostings = anumpostings; + } public List getAebalance() { return aebalance; } -- 2.39.2