X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fasync%2FRetrieveTransactionsTask.java;h=0b751b4c6d7df0c94174973ec7a2e449352c9dc9;hb=HEAD;hp=9636208b65a2446787383307ce4efb9ffc371a51;hpb=de897f405d8b9885835dd8ecc7c622607b3716a0;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 9636208b..0b751b4c 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java @@ -18,7 +18,6 @@ package net.ktnx.mobileledger.async; import android.annotation.SuppressLint; -import android.os.AsyncTask; import android.os.OperationCanceledException; import androidx.annotation.NonNull; @@ -43,7 +42,6 @@ import net.ktnx.mobileledger.model.Data; import net.ktnx.mobileledger.model.LedgerAccount; 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.NetworkUtil; @@ -67,8 +65,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -public class RetrieveTransactionsTask extends - AsyncTask { +public class RetrieveTransactionsTask extends Thread { private static final int MATCHING_TRANSACTIONS_LIMIT = 150; private static final Pattern reComment = Pattern.compile("^\\s*;"); private static final Pattern reTransactionStart = Pattern.compile( @@ -88,11 +85,9 @@ public class RetrieveTransactionsTask extends Pattern.compile("/register\\?q=inacct%3A([a-zA-Z0-9%]+)\""); private final Pattern reAccountValue = Pattern.compile( "\\s*([-+]?[\\d.,]+)(?:\\s+(\\S+))?"); - private final MainModel mainModel; private final Profile profile; private int expectedPostingsCount = -1; - public RetrieveTransactionsTask(@NonNull MainModel mainModel, @NonNull Profile profile) { - this.mainModel = mainModel; + public RetrieveTransactionsTask(@NonNull Profile profile) { this.profile = profile; } private static void L(String msg) { @@ -125,25 +120,19 @@ public class RetrieveTransactionsTask extends return null; } } - @Override - protected void onProgressUpdate(Progress... values) { - super.onProgressUpdate(values); - Data.backgroundTaskProgress.postValue(values[0]); + private void publishProgress(Progress progress) { + Data.backgroundTaskProgress.postValue(progress); } - @Override - protected void onPostExecute(Result result) { - super.onPostExecute(result); + private void finish(Result result) { Progress progress = new Progress(); progress.setState(ProgressState.FINISHED); progress.setError(result.error); - onProgressUpdate(progress); + publishProgress(progress); } - @Override - protected void onCancelled() { - super.onCancelled(); + private void cancel() { Progress progress = new Progress(); progress.setState(ProgressState.FINISHED); - onProgressUpdate(progress); + publishProgress(progress); } private void retrieveTransactionListLegacy(List accounts, List transactions) @@ -450,6 +439,10 @@ public class RetrieveTransactionsTask extends list.add(acc); } throwIfCancelled(); + + Logger.warn("accounts", + String.format(Locale.US, "Got %d accounts using protocol %s", list.size(), + version.getDescription())); } return list; @@ -477,9 +470,9 @@ public class RetrieveTransactionsTask extends return retrieveTransactionListForVersion(ver); } catch (Exception e) { - Logger.debug("json", - String.format(Locale.US, "Error during account list retrieval using API %s", - ver.getDescription())); + Logger.debug("json", String.format(Locale.US, + "Error during transaction list retrieval using API %s", + ver.getDescription()), e); } } @@ -533,9 +526,13 @@ public class RetrieveTransactionsTask extends } throwIfCancelled(); + + Logger.warn("transactions", + String.format(Locale.US, "Got %d transactions using protocol %s", trList.size(), + apiVersion.getDescription())); } - // json interface returns transactions if file order and the rest of the machinery + // json interface returns transactions in file order and the rest of the machinery // expects them in reverse chronological order Collections.sort(trList, (o1, o2) -> { int res = o2.getDate() @@ -549,7 +546,7 @@ public class RetrieveTransactionsTask extends @SuppressLint("DefaultLocale") @Override - protected Result doInBackground(Void... params) { + public void run() { Data.backgroundTaskStarted(); List accounts; List transactions; @@ -570,47 +567,47 @@ public class RetrieveTransactionsTask extends retrieveTransactionListLegacy(accounts, transactions); } - mainModel.updateDisplayedTransactionsFromWeb(transactions); - new AccountAndTransactionListSaver(accounts, transactions).start(); - return new Result(null); + Data.lastUpdateDate.postValue(new Date()); + + finish(new Result(null)); } catch (MalformedURLException e) { e.printStackTrace(); - return new Result("Invalid server URL"); + finish(new Result("Invalid server URL")); } catch (HTTPException e) { e.printStackTrace(); - return new Result( - String.format("HTTP error %d: %s", e.getResponseCode(), e.getMessage())); + finish(new Result( + String.format("HTTP error %d: %s", e.getResponseCode(), e.getMessage()))); } catch (IOException e) { e.printStackTrace(); - return new Result(e.getLocalizedMessage()); + finish(new Result(e.getLocalizedMessage())); } catch (RuntimeJsonMappingException e) { e.printStackTrace(); - return new Result(Result.ERR_JSON_PARSER_ERROR); + finish(new Result(Result.ERR_JSON_PARSER_ERROR)); } catch (ParseException e) { e.printStackTrace(); - return new Result("Network error"); + finish(new Result("Network error")); } catch (OperationCanceledException e) { - e.printStackTrace(); - return new Result("Operation cancelled"); + Logger.debug("RTT", "Retrieval was cancelled", e); + finish(new Result(null)); } catch (ApiNotSupportedException e) { e.printStackTrace(); - return new Result("Server version not supported"); + finish(new Result("Server version not supported")); } finally { Data.backgroundTaskFinished(); } } public void throwIfCancelled() { - if (isCancelled()) + if (isInterrupted()) throw new OperationCanceledException(null); } private enum ParserState {