/*
- * Copyright © 2018 Damyan Ivanov.
+ * Copyright © 2019 Damyan Ivanov.
* This file is part of Mobile-Ledger.
* Mobile-Ledger is free software: you can distribute it and/or modify it
* under the term of the GNU General Public License as published by
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
+import android.os.OperationCanceledException;
import android.util.Log;
-import net.ktnx.mobileledger.ui.account_summary.AccountSummaryFragment;
import net.ktnx.mobileledger.R;
import net.ktnx.mobileledger.model.LedgerAccount;
+import net.ktnx.mobileledger.ui.activity.MainActivity;
import net.ktnx.mobileledger.utils.MLDB;
import net.ktnx.mobileledger.utils.NetworkUtil;
public class RetrieveAccountsTask extends android.os.AsyncTask<Void, Integer, Void> {
int error;
- WeakReference<AccountSummaryFragment> mContext;
+ WeakReference<MainActivity> mContext;
private SharedPreferences pref;
- public RetrieveAccountsTask(WeakReference<AccountSummaryFragment> context) {
+ public RetrieveAccountsTask(WeakReference<MainActivity> context) {
mContext = context;
error = 0;
}
try {
HttpURLConnection http = NetworkUtil.prepare_connection(pref, "add");
publishProgress(0);
- try (SQLiteDatabase db = MLDB.getWritableDatabase(mContext.get().getActivity())) {
+ try (SQLiteDatabase db = MLDB.getWritableDatabase()) {
try (InputStream resp = http.getInputStream()) {
Log.d("update_accounts", String.valueOf(http.getResponseCode()));
if (http.getResponseCode() != 200) {
// %3A is '='
Pattern account_name_re =
Pattern.compile("/register\\?q=inacct%3A([a-zA-Z0-9%]+)\"");
- Pattern value_re = Pattern.compile(
+ Pattern account_value_re = Pattern.compile(
"<span class=\"[^\"]*\\bamount\\b[^\"]*\">\\s*([-+]?[\\d.,]+)(?:\\s+(\\S+))?</span>");
- Pattern tr_re = Pattern.compile("</tr>");
+ Pattern tr_end_re = Pattern.compile("</tr>");
Pattern descriptions_line_re =
Pattern.compile("\\bdescriptionsSuggester\\s*=\\s*new\\b");
Pattern description_items_re =
Pattern.compile("\"value\":\"([^\"]+)\"");
int count = 0;
while ((line = buf.readLine()) != null) {
+ throwIfCancelled();
+
Matcher m = account_name_re.matcher(line);
if (m.find()) {
String acct_encoded = m.group(1);
continue;
}
- Matcher tr_m = tr_re.matcher(line);
+ Matcher tr_m = tr_end_re.matcher(line);
if (tr_m.find()) {
Log.d("account-parser", "<tr> - another account expected");
last_account_name = null;
}
if (last_account_name != null) {
- m = value_re.matcher(line);
+ m = account_value_re.matcher(line);
boolean match_found = false;
while (m.find()) {
+ throwIfCancelled();
+
match_found = true;
String value = m.group(1);
String currency = m.group(2);
db.execSQL("update description_history set keep=0;");
m = description_items_re.matcher(line);
while (m.find()) {
+ throwIfCancelled();
+
String description = m.group(1);
if (description.isEmpty()) continue;
db.execSQL("delete from account_values where keep=0;");
db.execSQL("delete from accounts where keep=0;");
-// db.execSQL("delete from description_history where keep=0;");
db.setTransactionSuccessful();
}
+ catch (OperationCanceledException e) {
+ Log.w("async", "Account retrieval cancelled");
+ }
finally {
db.endTransaction();
}
-
}
}
}
return null;
}
+ private void throwIfCancelled() {
+ if (isCancelled()) throw new OperationCanceledException(null);
+ }
private void addAccount(SQLiteDatabase db, String name) {
do {
}
@Override
protected void onPostExecute(Void result) {
- AccountSummaryFragment ctx = mContext.get();
+ MainActivity ctx = mContext.get();
if (ctx == null) return;
- ctx.onAccountRefreshDone(this.error);
+ ctx.onRetrieveDone(this.error == 0);
}
}