From 70c486fbea2d6606f68d35fceedc90680fd13f7f Mon Sep 17 00:00:00 2001 From: Damyan Ivanov Date: Sun, 16 Dec 2018 17:09:57 +0000 Subject: [PATCH] reformat/rewrap --- .../net/ktnx/mobileledger/AccountSummary.java | 79 +++---- .../mobileledger/NewTransactionActivity.java | 91 ++++---- .../mobileledger/TransactionListAdapter.java | 55 +++-- .../async/RetrieveAccountsTask.java | 198 +++++++++--------- .../async/RetrieveTransactionsTask.java | 187 +++++++++-------- 5 files changed, 308 insertions(+), 302 deletions(-) diff --git a/app/src/main/java/net/ktnx/mobileledger/AccountSummary.java b/app/src/main/java/net/ktnx/mobileledger/AccountSummary.java index 2c9589e3..3a59003d 100644 --- a/app/src/main/java/net/ktnx/mobileledger/AccountSummary.java +++ b/app/src/main/java/net/ktnx/mobileledger/AccountSummary.java @@ -52,10 +52,9 @@ import java.util.List; import static net.ktnx.mobileledger.SettingsActivity.PREF_KEY_SHOW_ONLY_STARRED_ACCOUNTS; public class AccountSummary extends AppCompatActivity { - DrawerLayout drawer; - private static long account_list_last_updated; private static boolean account_list_needs_update = true; + DrawerLayout drawer; MenuItem mShowHiddenAccounts; SharedPreferences.OnSharedPreferenceChangeListener sBindPreferenceSummaryToValueListener; private AccountSummaryViewModel model; @@ -74,17 +73,20 @@ public class AccountSummary extends AppCompatActivity { setSupportActionBar(toolbar); drawer = findViewById(R.id.drawer_layout); - ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( - this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + ActionBarDrawerToggle toggle = + new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, + R.string.navigation_drawer_close); drawer.addDrawerListener(toggle); toggle.syncState(); android.widget.TextView ver = drawer.findViewById(R.id.drawer_version_text); try { - PackageInfo pi = getApplicationContext().getPackageManager().getPackageInfo(getPackageName(), 0); + PackageInfo pi = + getApplicationContext().getPackageManager().getPackageInfo(getPackageName(), 0); ver.setText(pi.versionName); - } catch (Exception e) { + } + catch (Exception e) { e.printStackTrace(); } @@ -99,30 +101,33 @@ public class AccountSummary extends AppCompatActivity { llm.setOrientation(LinearLayoutManager.VERTICAL); root.setLayoutManager(llm); - root.addOnItemTouchListener(new RecyclerItemListener(this, root, new RecyclerItemListener.RecyclerTouchListener() { - @Override - public void onClickItem(View v, int position) { - Log.d("list", String.format("item %d clicked", position)); - if (modelAdapter.isSelectionActive()) { - modelAdapter.selectItem(position); - } - } - - @Override - public void onLongClickItem(View v, int position) { - Log.d("list", String.format("item %d long-clicked", position)); - modelAdapter.startSelection(); - if (optMenu != null) { - optMenu.findItem(R.id.menu_acc_summary_cancel_selection).setVisible(true); - optMenu.findItem(R.id.menu_acc_summary_confirm_selection).setVisible(true); - optMenu.findItem(R.id.menu_acc_summary_only_starred).setVisible(false); - } - { - FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.btn_add_transaction); - if (fab != null) fab.hide(); - } - } - })); + root.addOnItemTouchListener(new RecyclerItemListener(this, root, + new RecyclerItemListener.RecyclerTouchListener() { + @Override + public void onClickItem(View v, int position) { + Log.d("list", String.format("item %d clicked", position)); + if (modelAdapter.isSelectionActive()) { + modelAdapter.selectItem(position); + } + } + + @Override + public void onLongClickItem(View v, int position) { + Log.d("list", String.format("item %d long-clicked", position)); + modelAdapter.startSelection(); + if (optMenu != null) { + optMenu.findItem(R.id.menu_acc_summary_cancel_selection) + .setVisible(true); + optMenu.findItem(R.id.menu_acc_summary_confirm_selection) + .setVisible(true); + optMenu.findItem(R.id.menu_acc_summary_only_starred).setVisible(false); + } + { + FloatingActionButton fab = findViewById(R.id.btn_add_transaction); + if (fab != null) fab.hide(); + } + } + })); root.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override @@ -190,7 +195,8 @@ public class AccountSummary extends AppCompatActivity { DrawerLayout drawer = findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); - } else { + } + else { super.onBackPressed(); } } @@ -233,8 +239,7 @@ public class AccountSummary extends AppCompatActivity { update_accounts(true); } - public - void onShowOnlyStarredClicked(MenuItem mi) { + public void onShowOnlyStarredClicked(MenuItem mi) { SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); boolean flag = pref.getBoolean(PREF_KEY_SHOW_ONLY_STARRED_ACCOUNTS, false); @@ -252,8 +257,10 @@ public class AccountSummary extends AppCompatActivity { private void update_accounts(boolean force) { long now = new Date().getTime(); - if ((now > (account_list_last_updated + (24 * 3600*1000))) || force) { - Log.d("db", "accounts last updated at " + account_list_last_updated+" and now is " + now+". re-fetching"); + if ((now > (account_list_last_updated + (24 * 3600 * 1000))) || force) { + Log.d("db", + "accounts last updated at " + account_list_last_updated + " and now is " + now + + ". re-fetching"); update_accounts(); } } @@ -271,7 +278,7 @@ public class AccountSummary extends AppCompatActivity { if (error != 0) { String err_text = getResources().getString(error); Log.d("visual", String.format("showing snackbar: %s", err_text)); - Snackbar.make(drawer, err_text, Snackbar.LENGTH_LONG ).show(); + Snackbar.make(drawer, err_text, Snackbar.LENGTH_LONG).show(); } else { MLDB.set_option_value(this, "last_refresh", new Date().getTime()); diff --git a/app/src/main/java/net/ktnx/mobileledger/NewTransactionActivity.java b/app/src/main/java/net/ktnx/mobileledger/NewTransactionActivity.java index 38289020..22b518a0 100644 --- a/app/src/main/java/net/ktnx/mobileledger/NewTransactionActivity.java +++ b/app/src/main/java/net/ktnx/mobileledger/NewTransactionActivity.java @@ -74,11 +74,11 @@ import java.util.Objects; * */ public class NewTransactionActivity extends AppCompatActivity implements TaskCallback { + private static SaveTransactionTask saver; private TableLayout table; private ProgressBar progress; private TextView text_date; private AutoCompleteTextView text_descr; - private static SaveTransactionTask saver; private MenuItem mSave; @Override @@ -91,8 +91,7 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal text_date = findViewById(R.id.new_transaction_date); text_date.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override - public - void onFocusChange(View v, boolean hasFocus) { + public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) pickTransactionDate(v); } }); @@ -117,8 +116,7 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal } @Override - protected - void onStart() { + protected void onStart() { super.onStart(); if (text_descr.getText().toString().isEmpty()) text_descr.requestFocus(); } @@ -152,14 +150,13 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal LedgerTransaction tr = new LedgerTransaction(date, text_descr.getText().toString()); TableLayout table = findViewById(R.id.new_transaction_accounts_table); - for ( int i = 0; i < table.getChildCount(); i++ ) { + for (int i = 0; i < table.getChildCount(); i++) { TableRow row = (TableRow) table.getChildAt(i); String acc = ((TextView) row.getChildAt(0)).getText().toString(); String amt = ((TextView) row.getChildAt(1)).getText().toString(); LedgerTransactionItem item = - amt.length() > 0 - ? new LedgerTransactionItem( acc, Float.parseFloat(amt)) - : new LedgerTransactionItem( acc ); + amt.length() > 0 ? new LedgerTransactionItem(acc, Float.parseFloat(amt)) + : new LedgerTransactionItem(acc); tr.add_item(item); } @@ -211,11 +208,11 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal // Toast.makeText(NewTransactionActivity.this, "LEFT", Toast.LENGTH_LONG).show(); } else { - Snackbar.make(table, R.string.msg_at_least_two_accounts_are_required, Snackbar.LENGTH_LONG) - .setAction("Action", null).show(); + Snackbar.make(table, R.string.msg_at_least_two_accounts_are_required, + Snackbar.LENGTH_LONG).setAction("Action", null).show(); } } -// @Override + // @Override // public boolean performClick(View view, MotionEvent m) { // return true; // } @@ -247,7 +244,8 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal } @TargetApi(Build.VERSION_CODES.N) - private void hook_autocompletion_adapter(final AutoCompleteTextView view, final String table, final String field) { + private void hook_autocompletion_adapter(final AutoCompleteTextView view, final String table, + final String field) { String[] from = {field}; int[] to = {android.R.id.text1}; SimpleCursorAdapter adapter = @@ -257,8 +255,7 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal FilterQueryProvider provider = new FilterQueryProvider() { @Override - public - Cursor runQuery(CharSequence constraint) { + public Cursor runQuery(CharSequence constraint) { if (constraint == null) return null; String str = constraint.toString().toUpperCase(); @@ -269,11 +266,11 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal try (SQLiteDatabase db = MLDB.getReadableDatabase(getApplicationContext())) { try (Cursor matches = db.rawQuery(String.format( - "SELECT %s as a, case when %s_upper LIKE ?||'%%' then 1 " - + "WHEN %s_upper LIKE '%%:'||?||'%%' then 2 " - + "WHEN %s_upper LIKE '%% '||?||'%%' then 3 " + "else 9 end " - + "FROM %s " + "WHERE %s_upper LIKE '%%'||?||'%%' " - + "ORDER BY 2, 1;", field, field, field, field, table, field), + "SELECT %s as a, case when %s_upper LIKE ?||'%%' then 1 " + + "WHEN %s_upper LIKE '%%:'||?||'%%' then 2 " + + "WHEN %s_upper LIKE '%% '||?||'%%' then 3 " + "else 9 end " + + "FROM %s " + "WHERE %s_upper LIKE '%%'||?||'%%' " + "ORDER BY 2, 1;", + field, field, field, field, table, field), new String[]{str, str, str, str})) { int i = 0; @@ -313,16 +310,18 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal } public int dp2px(float dp) { - return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics())); + return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, + getResources().getDisplayMetrics())); } private void do_add_account_row(boolean focus) { final AutoCompleteTextView acc = new AutoCompleteTextView(this); - acc.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 9f)); + acc.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, + TableRow.LayoutParams.WRAP_CONTENT, 9f)); acc.setHint(R.string.new_transaction_account_hint); acc.setWidth(0); - acc.setImeOptions(EditorInfo.IME_ACTION_NEXT | EditorInfo.IME_FLAG_NO_ENTER_ACTION - | EditorInfo.IME_FLAG_NAVIGATE_NEXT); + acc.setImeOptions(EditorInfo.IME_ACTION_NEXT | EditorInfo.IME_FLAG_NO_ENTER_ACTION | + EditorInfo.IME_FLAG_NAVIGATE_NEXT); acc.setSingleLine(true); final EditText amt = new EditText(this); @@ -330,7 +329,8 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal TableRow.LayoutParams.MATCH_PARENT, 1f)); amt.setHint(R.string.new_transaction_amount_hint); amt.setWidth(0); - amt.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_NUMBER_FLAG_DECIMAL ); + amt.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED | + InputType.TYPE_NUMBER_FLAG_DECIMAL); amt.setMinWidth(dp2px(40)); amt.setTextAlignment(EditText.TEXT_ALIGNMENT_VIEW_END); amt.setImeOptions(EditorInfo.IME_ACTION_DONE); @@ -345,7 +345,8 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal acc.setNextFocusRightId(amt.getId()); final TableRow row = new TableRow(this); - row.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT)); + row.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, + TableRow.LayoutParams.MATCH_PARENT)); row.setGravity(Gravity.BOTTOM); row.addView(acc); row.addView(amt); @@ -363,8 +364,7 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal do_add_account_row(true); } - public - void resetTransactionFromMenu(MenuItem item) { + public void resetTransactionFromMenu(MenuItem item) { reset_form(); } @@ -372,8 +372,7 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal save_transaction(); } - private - boolean is_zero(float f) { + private boolean is_zero(float f) { return (f < 0.005) && (f > -0.005); } @@ -435,22 +434,21 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal } } - if ((empty_rows == 0) && ((table.getChildCount() == accounts) || (table.getChildCount() - == amounts))) + if ((empty_rows == 0) && + ((table.getChildCount() == accounts) || (table.getChildCount() == amounts))) { do_add_account_row(false); } - Log.d("submittable", String.format("accounts=%d, accounts_with_values=%s, " - + "amounts_with_accounts=%d, amounts=%d, running_total=%1.2f, " - + "single_empty_with_acc=%s", accounts, accounts_with_values, - amounts_with_accounts, amounts, running_total, + Log.d("submittable", String.format("accounts=%d, accounts_with_values=%s, " + + "amounts_with_accounts=%d, amounts=%d, running_total=%1.2f, " + + "single_empty_with_acc=%s", accounts, + accounts_with_values, amounts_with_accounts, amounts, running_total, (single_empty_amount && single_empty_amount_has_account) ? "true" : "false")); - if (have_description && (accounts >= 2) && (accounts_with_values >= (accounts - 1)) && ( - amounts_with_accounts == amounts) && ( - single_empty_amount && single_empty_amount_has_account || is_zero( - running_total))) + if (have_description && (accounts >= 2) && (accounts_with_values >= (accounts - 1)) && + (amounts_with_accounts == amounts) && + (single_empty_amount && single_empty_amount_has_account || is_zero(running_total))) { if (mSave != null) mSave.setVisible(true); } @@ -472,8 +470,7 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal } @Override - public - void done(String error) { + public void done(String error) { progress.setVisibility(View.INVISIBLE); Log.d("visuals", "hiding progress"); @@ -491,15 +488,15 @@ public class NewTransactionActivity extends AppCompatActivity implements TaskCal text_descr.requestFocus(); - while(table.getChildCount() > 2) { + while (table.getChildCount() > 2) { table.removeViewAt(2); } - for( int i = 0; i < 2; i++ ) { + for (int i = 0; i < 2; i++) { TableRow tr = (TableRow) table.getChildAt(i); - if ( tr == null) break; + if (tr == null) break; - ((TextView)tr.getChildAt(0)).setText(""); - ((TextView)tr.getChildAt(1)).setText(""); + ((TextView) tr.getChildAt(0)).setText(""); + ((TextView) tr.getChildAt(1)).setText(""); } } } diff --git a/app/src/main/java/net/ktnx/mobileledger/TransactionListAdapter.java b/app/src/main/java/net/ktnx/mobileledger/TransactionListAdapter.java index d0b2e943..263aa96e 100644 --- a/app/src/main/java/net/ktnx/mobileledger/TransactionListAdapter.java +++ b/app/src/main/java/net/ktnx/mobileledger/TransactionListAdapter.java @@ -53,37 +53,34 @@ class TransactionListAdapter try (SQLiteDatabase db = MLDB.getReadableDatabase(ctx.getApplicationContext())) { tr.loadData(db); - holder.tvDescription - .setText(String.format("%s\n%s", tr.getDescription(), tr.getDate())); - TableLayout tbl = holder.row.findViewById(R.id.transaction_row_acc_amounts); - tbl.removeAllViews(); - for (Iterator it = tr.getItemsIterator(); it.hasNext(); ) { - LedgerTransactionItem acc = it.next(); - TableRow row = new TableRow(holder.row.getContext()); - TextView child = new TextView(ctx); - child.setText(acc.getShortAccountName()); - row.addView(child); - child = new TextView(ctx); - child.setText(acc.toString()); - row.addView(child); - tbl.addView(row); - } - - if (position % 2 == 0) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) holder.row - .setBackgroundColor( - rm.getColor(R.color.table_row_even_bg, ctx.getTheme())); - else holder.row.setBackgroundColor(rm.getColor(R.color.table_row_even_bg)); - } - else { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) holder.row - .setBackgroundColor( - rm.getColor(R.color.drawer_background, ctx.getTheme())); - else holder.row.setBackgroundColor(rm.getColor(R.color.drawer_background)); - } + holder.tvDescription + .setText(String.format("%s\n%s", tr.getDescription(), tr.getDate())); + TableLayout tbl = holder.row.findViewById(R.id.transaction_row_acc_amounts); + tbl.removeAllViews(); + for (Iterator it = tr.getItemsIterator(); it.hasNext(); ) { + LedgerTransactionItem acc = it.next(); + TableRow row = new TableRow(holder.row.getContext()); + TextView child = new TextView(ctx); + child.setText(acc.getShortAccountName()); + row.addView(child); + child = new TextView(ctx); + child.setText(acc.toString()); + row.addView(child); + tbl.addView(row); + } - holder.row.setTag(R.id.POS, position); + if (position % 2 == 0) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) holder.row + .setBackgroundColor(rm.getColor(R.color.table_row_even_bg, ctx.getTheme())); + else holder.row.setBackgroundColor(rm.getColor(R.color.table_row_even_bg)); } + else { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) holder.row + .setBackgroundColor(rm.getColor(R.color.drawer_background, ctx.getTheme())); + else holder.row.setBackgroundColor(rm.getColor(R.color.drawer_background)); + } + + holder.row.setTag(R.id.POS, position); } } 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 3d96d327..a342ca4d 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveAccountsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveAccountsTask.java @@ -41,9 +41,8 @@ import java.util.regex.Pattern; public class RetrieveAccountsTask extends android.os.AsyncTask { int error; - - private SharedPreferences pref; WeakReference mContext; + private SharedPreferences pref; public RetrieveAccountsTask(WeakReference context) { mContext = context; @@ -56,110 +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(); } @@ -182,11 +187,10 @@ public class RetrieveAccountsTask extends android.os.AsyncTaskGeneral Journal")) { - state = ParserState.EXPECTING_TRANSACTION; - L("→ expecting transaction"); - } - break; - case ParserState.EXPECTING_TRANSACTION: - m = transactionStartPattern.matcher(line); - if (m.find()) { - transactionId = Integer.valueOf(m.group(1)); - state = ParserState.EXPECTING_TRANSACTION_DESCRIPTION; - L(String.format("found transaction %d → expecting " + - "description", transactionId)); - progress.setProgress(++transactionCount); - if (progress.getTotal() == Progress.INDETERMINATE) - progress.setTotal(transactionId); - publishProgress(progress); - } - m = endPattern.matcher(line); - if (m.find()) { - L("--- transaction list complete ---"); - success = true; - break LINES; - } - break; - case ParserState.EXPECTING_TRANSACTION_DESCRIPTION: - m = transactionDescriptionPattern.matcher(line); - if (m.find()) { - if (transactionId == 0) - throw new TransactionParserException( - "Transaction Id is 0 while expecting " + - "description"); + int transactionCount = 0; + int transactionId = 0; + LedgerTransaction transaction = null; + LINES: + while ((line = buf.readLine()) != null) { + if (isCancelled()) break; + Matcher m; + //L(String.format("State is %d", state)); + switch (state) { + case ParserState.EXPECTING_JOURNAL: + if (!line.isEmpty() && (line.charAt(0) == ' ')) continue; + if (line.equals("

General Journal

")) { + state = ParserState.EXPECTING_TRANSACTION; + L("→ expecting transaction"); + } + break; + case ParserState.EXPECTING_TRANSACTION: + if (!line.isEmpty() && (line.charAt(0) == ' ')) continue; + m = transactionStartPattern.matcher(line); + if (m.find()) { + transactionId = Integer.valueOf(m.group(1)); + state = ParserState.EXPECTING_TRANSACTION_DESCRIPTION; + L(String.format( + "found transaction %d → expecting " + "description", + transactionId)); + progress.setProgress(++transactionCount); + if (progress.getTotal() == Progress.INDETERMINATE) + progress.setTotal(transactionId); + publishProgress(progress); + } + m = endPattern.matcher(line); + if (m.find()) { + L("--- transaction list complete ---"); + success = true; + break LINES; + } + break; + case ParserState.EXPECTING_TRANSACTION_DESCRIPTION: + if (!line.isEmpty() && (line.charAt(0) == ' ')) continue; + m = transactionDescriptionPattern.matcher(line); + if (m.find()) { + if (transactionId == 0) + throw new TransactionParserException( + "Transaction Id is 0 while expecting " + + "description"); - transaction = - new LedgerTransaction(transactionId, m.group(1), - m.group(2)); - state = ParserState.EXPECTING_TRANSACTION_DETAILS; - L(String.format("transaction %d created for %s (%s) →" + - " expecting details", transactionId, - m.group(1), m.group(2))); - } - break; - case ParserState.EXPECTING_TRANSACTION_DETAILS: - if (line.isEmpty()) { - // transaction data collected - transaction.insertInto(db); + transaction = + new LedgerTransaction(transactionId, m.group(1), + m.group(2)); + state = ParserState.EXPECTING_TRANSACTION_DETAILS; + L(String.format("transaction %d created for %s (%s) →" + + " expecting details", transactionId, + m.group(1), m.group(2))); + } + break; + case ParserState.EXPECTING_TRANSACTION_DETAILS: + if (line.isEmpty()) { + // transaction data collected + transaction.insertInto(db); - state = ParserState.EXPECTING_TRANSACTION; - L(String.format("transaction %s saved → expecting " + - "transaction", transaction.getId())); + state = ParserState.EXPECTING_TRANSACTION; + L(String.format( + "transaction %s saved → expecting " + "transaction", + transaction.getId())); // sounds like a good idea, but transaction-1 may not be the first one chronologically // for example, when you add the initial seeding transaction after entering some others @@ -176,33 +180,30 @@ public class RetrieveTransactionsTask extends // "parser"); // break LINES; // } + } + else { + m = transactionDetailsPattern.matcher(line); + if (m.find()) { + String acc_name = m.group(1); + String amount = m.group(2); + amount = amount.replace(',', '.'); + transaction.add_item(new LedgerTransactionItem(acc_name, + Float.valueOf(amount))); + L(String.format("%s = %s", acc_name, amount)); } - else { - m = transactionDetailsPattern.matcher(line); - if (m.find()) { - String acc_name = m.group(1); - String amount = m.group(2); - amount = amount.replace(',', '.'); - transaction.add_item( - new LedgerTransactionItem(acc_name, - Float.valueOf(amount))); - L(String.format("%s = %s", acc_name, amount)); - } - else throw new IllegalStateException(String.format( - "Can't parse transaction details")); - } - break; - default: - throw new RuntimeException( - String.format("Unknown " + "parser state %d", - state)); - } + else throw new IllegalStateException( + String.format("Can't parse transaction details")); + } + break; + default: + throw new RuntimeException( + String.format("Unknown " + "parser state %d", state)); } - if (!isCancelled()) db.setTransactionSuccessful(); - } - finally { - db.endTransaction(); } + if (!isCancelled()) db.setTransactionSuccessful(); + } + finally { + db.endTransaction(); } } } -- 2.39.5