X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fasync%2FRetrieveAccountsTask.java;h=83f15fb7e7dec9258a7e35cef6829c2d4bca9167;hp=8117a198d73cac29941eab98b867edc43fe76483;hb=b011feba6b09f35a0e07c9502f126877b5f05905;hpb=6b740c280c79b0170321f533747cdbfc3e179a29 diff --git a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveAccountsTask.java b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveAccountsTask.java index 8117a198..83f15fb7 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveAccountsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveAccountsTask.java @@ -1,5 +1,5 @@ /* - * 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 @@ -21,10 +21,10 @@ import android.content.SharedPreferences; import android.database.sqlite.SQLiteDatabase; import android.util.Log; -import net.ktnx.mobileledger.AccountSummary; import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.model.LedgerAccount; -import net.ktnx.mobileledger.utils.MobileLedgerDatabase; +import net.ktnx.mobileledger.ui.account_summary.AccountSummaryFragment; +import net.ktnx.mobileledger.utils.MLDB; import net.ktnx.mobileledger.utils.NetworkUtil; import java.io.BufferedReader; @@ -41,11 +41,10 @@ import java.util.regex.Pattern; public class RetrieveAccountsTask extends android.os.AsyncTask { int error; - + WeakReference mContext; private SharedPreferences pref; - WeakReference mContext; - public RetrieveAccountsTask(WeakReference context) { + public RetrieveAccountsTask(WeakReference context) { mContext = context; error = 0; } @@ -56,111 +55,116 @@ public class RetrieveAccountsTask extends android.os.AsyncTask\\s*([-+]?[\\d.,]+)(?:\\s+(\\S+))?"); + Pattern tr_re = Pattern.compile(""); + 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) { + Matcher m = account_name_re.matcher(line); + if (m.find()) { + String acct_encoded = m.group(1); + String acct_name = URLDecoder.decode(acct_encoded, "UTF-8"); + acct_name = acct_name.replace("\"", ""); + Log.d("account-parser", acct_name); + + addAccount(db, acct_name); + publishProgress(++count); + + last_account_name = acct_name; + + continue; + } - Matcher tr_m = tr_re.matcher(line); - if (tr_m.find()) { - Log.d("account-parser", " - another account expected"); - last_account_name = null; - continue; - } + Matcher tr_m = tr_re.matcher(line); + if (tr_m.find()) { + Log.d("account-parser", " - another account expected"); + last_account_name = null; + continue; + } - if (last_account_name != null) { - m = value_re.matcher(line); - boolean match_found = false; - while (m.find()) { - match_found = true; - String value = m.group(1); - String currency = m.group(2); - if (currency == null) currency = ""; - value = value.replace(',', '.'); - Log.d("db", "curr=" + currency + ", value=" + value); - db.execSQL( - "insert or replace into account_values(account, currency, value, keep) values(?, ?, ?, 1);", - new Object[]{last_account_name, currency, Float.valueOf(value) - }); - } - - if (match_found) continue; + if (last_account_name != null) { + m = value_re.matcher(line); + boolean match_found = false; + while (m.find()) { + match_found = true; + String value = m.group(1); + String currency = m.group(2); + if (currency == null) currency = ""; + value = value.replace(',', '.'); + Log.d("db", "curr=" + currency + ", value=" + value); + db.execSQL( + "insert or replace into account_values(account, currency, value, keep) values(?, ?, ?, 1);", + new Object[]{last_account_name, currency, + Float.valueOf(value) + }); } - m = descriptions_line_re.matcher(line); - if (m.find()) { - db.execSQL("update description_history set keep=0;"); - m = description_items_re.matcher(line); - while (m.find()) { - String description = m.group(1); - if (description.isEmpty()) continue; - - Log.d("db", String.format("Stored description: %s", - description)); - db.execSQL("insert or replace into description_history" - + "(description, description_upper, keep) " + "values(?, ?, 1);", - new Object[]{description, description.toUpperCase() - }); - } - } + if (match_found) 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(); - } - finally { - db.endTransaction(); + m = descriptions_line_re.matcher(line); + if (m.find()) { + db.execSQL("update description_history set keep=0;"); + m = description_items_re.matcher(line); + while (m.find()) { + String description = m.group(1); + if (description.isEmpty()) continue; + + Log.d("db", String.format("Stored description: %s", + description)); + db.execSQL("insert or replace into description_history" + + "(description, description_upper, keep) " + + "values(?, ?, 1);", + new Object[]{description, description.toUpperCase() + }); + } + } } + 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(); + } + finally { + db.endTransaction(); } + } } } - } catch (MalformedURLException e) { + } + catch (MalformedURLException e) { error = R.string.err_bad_backend_url; e.printStackTrace(); } @@ -183,18 +187,17 @@ public class RetrieveAccountsTask extends android.os.AsyncTask