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=c4f55d0e7e6114caf66151ca71f276981eb31d16;hp=e17b40c7c62fe69d00dc8d842f72d80a701bf880;hb=31ddecc27155db9bf5f328335e55b6900c2a0030;hpb=ad16325ceea4984f0d383158f167af7791869477 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 e17b40c7..c4f55d0e 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java @@ -107,7 +107,7 @@ public class RetrieveTransactionsTask context.onRetrieveDone(null); } private String retrieveTransactionListLegacy(MobileLedgerProfile profile) - throws IOException, ParseException { + throws IOException, ParseException, HTTPException { Progress progress = new Progress(); int maxTransactionId = Progress.INDETERMINATE; ArrayList accountList = new ArrayList<>(); @@ -118,6 +118,12 @@ public class RetrieveTransactionsTask HttpURLConnection http = NetworkUtil.prepareConnection(profile, "journal"); http.setAllowUserInteraction(false); publishProgress(progress); + switch (http.getResponseCode()) { + case 200: + break; + default: + throw new HTTPException(http.getResponseCode(), http.getResponseMessage()); + } try (SQLiteDatabase db = MLDB.getWritableDatabase()) { try (InputStream resp = http.getInputStream()) { if (http.getResponseCode() != 200) @@ -163,11 +169,11 @@ public class RetrieveTransactionsTask acct_name = acct_name.replace("\"", ""); L(String.format("found account: %s", acct_name)); - lastAccount = profile.loadAccount(acct_name); - if (lastAccount == null) { + lastAccount = profile.tryLoadAccount(db, acct_name); + if (lastAccount == null) lastAccount = new LedgerAccount(acct_name); - profile.storeAccount(db, lastAccount); - } + else lastAccount.removeAmounts(); + profile.storeAccount(db, lastAccount); // make sure the parent account(s) are present, // synthesising them if necessary @@ -183,16 +189,17 @@ public class RetrieveTransactionsTask while (!toAppend.isEmpty()) { String aName = toAppend.pop(); LedgerAccount acc = new LedgerAccount(aName); - acc.setHidden(lastAccount.isHidden()); - if (!onlyStarred || !acc.isHidden()) - accountList.add(acc); + acc.setHiddenByStar(lastAccount.isHiddenByStar()); + if ((!onlyStarred || !acc.isHiddenByStar()) && + acc.isVisible(accountList)) accountList.add(acc); L(String.format("gap-filling with %s", aName)); accountNames.put(aName, null); profile.storeAccount(db, acc); } } - if (!onlyStarred || !lastAccount.isHidden()) + if ((!onlyStarred || !lastAccount.isHiddenByStar()) && + lastAccount.isVisible(accountList)) accountList.add(lastAccount); accountNames.put(acct_name, null); @@ -422,9 +429,12 @@ public class RetrieveTransactionsTask http.setAllowUserInteraction(false); publishProgress(progress); switch (http.getResponseCode()) { - case 200: break; - case 404: return false; - default: throw new HTTPException(http.getResponseCode(), http.getResponseMessage()); + case 200: + break; + case 404: + return false; + default: + throw new HTTPException(http.getResponseCode(), http.getResponseMessage()); } try (SQLiteDatabase db = MLDB.getWritableDatabase()) { try (InputStream resp = http.getInputStream()) { @@ -465,6 +475,10 @@ public class RetrieveTransactionsTask progress.setTotal(maxTransactionId); } + if ((progress.getTotal() == Progress.INDETERMINATE) || + (progress.getTotal() < transaction.getId())) + progress.setTotal(transaction.getId()); + progress.setProgress(++processedTransactionCount); publishProgress(progress); } @@ -503,7 +517,7 @@ public class RetrieveTransactionsTask } catch (IOException e) { e.printStackTrace(); - return "Parse error"; + return e.getLocalizedMessage(); } catch (ParseException e) { e.printStackTrace();