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=1962173cfecb1011bb3edfc3ea5470a74393d931;hp=207793bbaa7fdc176968cfd5f5d05b2addd1b559;hb=90383a155ec16a9f13b1e6ac94a118033e09b3aa;hpb=1c42b2e42a6fe3fe2aaae3ad3480d924db75f4ba 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 207793bb..1962173c 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java @@ -22,6 +22,7 @@ import android.database.sqlite.SQLiteDatabase; import android.os.AsyncTask; import android.os.OperationCanceledException; +import net.ktnx.mobileledger.App; import net.ktnx.mobileledger.err.HTTPException; import net.ktnx.mobileledger.json.AccountListParser; import net.ktnx.mobileledger.json.ParsedBalance; @@ -34,7 +35,6 @@ import net.ktnx.mobileledger.model.LedgerTransaction; import net.ktnx.mobileledger.model.LedgerTransactionAccount; import net.ktnx.mobileledger.model.MobileLedgerProfile; import net.ktnx.mobileledger.ui.activity.MainActivity; -import net.ktnx.mobileledger.utils.MLDB; import net.ktnx.mobileledger.utils.NetworkUtil; import java.io.BufferedReader; @@ -69,13 +69,15 @@ public class RetrieveTransactionsTask Pattern.compile("^\\s+(\\S[\\S\\s]+\\S)\\s\\s+([-+]?\\d[\\d,.]*)(?:\\s+(\\S+)$)?"); private static final Pattern reEnd = Pattern.compile("\\bid=\"addmodal\""); private WeakReference contextRef; - private int error; // %3A is '=' private Pattern reAccountName = Pattern.compile("/register\\?q=inacct%3A([a-zA-Z0-9%]+)\""); private Pattern reAccountValue = Pattern.compile( "\\s*([-+]?[\\d.,]+)(?:\\s+(\\S+))?"); - public RetrieveTransactionsTask(WeakReference contextRef) { + private MobileLedgerProfile profile; + public RetrieveTransactionsTask(WeakReference contextRef, + MobileLedgerProfile profile) { this.contextRef = contextRef; + this.profile = profile; } private static void L(String msg) { //debug("transaction-parser", msg); @@ -108,7 +110,7 @@ public class RetrieveTransactionsTask if (context == null) return; context.onRetrieveDone(null); } - private String retrieveTransactionListLegacy(MobileLedgerProfile profile) + private String retrieveTransactionListLegacy() throws IOException, ParseException, HTTPException { Progress progress = new Progress(); int maxTransactionId = Progress.INDETERMINATE; @@ -127,7 +129,8 @@ public class RetrieveTransactionsTask default: throw new HTTPException(http.getResponseCode(), http.getResponseMessage()); } - try (SQLiteDatabase db = MLDB.getDatabase()) { + // FIXME: why the resource block here? that would close the global DB connection + try (SQLiteDatabase db = App.getDatabase()) { try (InputStream resp = http.getInputStream()) { if (http.getResponseCode() != 200) throw new IOException(String.format("HTTP error %d", http.getResponseCode())); @@ -250,7 +253,8 @@ public class RetrieveTransactionsTask lastAccount.addAmount(val, currency); for (LedgerAccount syn : syntheticAccounts.values()) { syn.addAmount(val, currency); - profile.storeAccountValue(db, syn.getName(), currency, val); + profile.storeAccountValue(db, syn.getName(), currency, + val); } } @@ -394,7 +398,7 @@ public class RetrieveTransactionsTask new String[]{profile.getUuid()}); db.execSQL("update accounts set keep=0 where profile=?;", new String[]{profile.getUuid()}); } - private boolean retrieveAccountList(MobileLedgerProfile profile) + private boolean retrieveAccountList() throws IOException, HTTPException { Progress progress = new Progress(); @@ -409,7 +413,7 @@ public class RetrieveTransactionsTask throw new HTTPException(http.getResponseCode(), http.getResponseMessage()); } publishProgress(progress); - SQLiteDatabase db = MLDB.getDatabase(); + SQLiteDatabase db = App.getDatabase(); ArrayList accountList = new ArrayList<>(); boolean listFilledOK = false; try (InputStream resp = http.getInputStream()) { @@ -482,7 +486,7 @@ public class RetrieveTransactionsTask return true; } - private boolean retrieveTransactionList(MobileLedgerProfile profile) + private boolean retrieveTransactionList() throws IOException, ParseException, HTTPException { Progress progress = new Progress(); int maxTransactionId = Progress.INDETERMINATE; @@ -498,7 +502,7 @@ public class RetrieveTransactionsTask default: throw new HTTPException(http.getResponseCode(), http.getResponseMessage()); } - SQLiteDatabase db = MLDB.getDatabase(); + SQLiteDatabase db = App.getDatabase(); try (InputStream resp = http.getInputStream()) { if (http.getResponseCode() != 200) throw new IOException(String.format("HTTP error %d", http.getResponseCode())); @@ -590,11 +594,10 @@ public class RetrieveTransactionsTask @SuppressLint("DefaultLocale") @Override protected String doInBackground(Void... params) { - MobileLedgerProfile profile = Data.profile.get(); Data.backgroundTaskStarted(); try { - if (!retrieveAccountList(profile) || !retrieveTransactionList(profile)) - return retrieveTransactionListLegacy(profile); + if (!retrieveAccountList() || !retrieveTransactionList()) + return retrieveTransactionListLegacy(); return null; } catch (MalformedURLException e) {