]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java
major refactor, make account summary and transaction list fragments, part of the...
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / async / RetrieveTransactionsTask.java
index 13941806240b07f42173e545dc3243b583b25270..b8a341344fb478ab5d5202173c02a1b257e26923 100644 (file)
@@ -24,9 +24,9 @@ import android.os.AsyncTask;
 import android.util.Log;
 
 import net.ktnx.mobileledger.R;
-import net.ktnx.mobileledger.TransactionListActivity;
 import net.ktnx.mobileledger.model.LedgerTransaction;
-import net.ktnx.mobileledger.model.LedgerTransactionItem;
+import net.ktnx.mobileledger.model.LedgerTransactionAccount;
+import net.ktnx.mobileledger.ui.transaction_list.TransactionListFragment;
 import net.ktnx.mobileledger.utils.MLDB;
 import net.ktnx.mobileledger.utils.NetworkUtil;
 
@@ -50,12 +50,12 @@ public class RetrieveTransactionsTask extends
     private static final Pattern transactionDescriptionPattern =
             Pattern.compile("<tr class=\"posting\" title=\"(\\S+)\\s(.+)");
     private static final Pattern transactionDetailsPattern =
-            Pattern.compile("^\\s+" + "(\\S[\\S\\s]+\\S)\\s\\s+([-+]?\\d[\\d,.]*)");
+            Pattern.compile("^\\s+" + "(\\S[\\S\\s]+\\S)\\s\\s+([-+]?\\d[\\d,.]*)(?:\\s+(\\S+)$)?");
     private static final Pattern endPattern = Pattern.compile("\\bid=\"addmodal\"");
-    protected WeakReference<TransactionListActivity> contextRef;
+    protected WeakReference<TransactionListFragment> contextRef;
     protected int error;
     private boolean success;
-    public RetrieveTransactionsTask(WeakReference<TransactionListActivity> contextRef) {
+    public RetrieveTransactionsTask(WeakReference<TransactionListFragment> contextRef) {
         this.contextRef = contextRef;
     }
     private static final void L(String msg) {
@@ -64,24 +64,31 @@ public class RetrieveTransactionsTask extends
     @Override
     protected void onProgressUpdate(Progress... values) {
         super.onProgressUpdate(values);
-        TransactionListActivity context = getContext();
+        TransactionListFragment context = getContext();
         if (context == null) return;
         context.onRetrieveProgress(values[0]);
     }
     @Override
     protected void onPreExecute() {
         super.onPreExecute();
-        TransactionListActivity context = getContext();
+        TransactionListFragment context = getContext();
         if (context == null) return;
         context.onRetrieveStart();
     }
     @Override
     protected void onPostExecute(Void aVoid) {
         super.onPostExecute(aVoid);
-        TransactionListActivity context = getContext();
+        TransactionListFragment context = getContext();
         if (context == null) return;
         context.onRetrieveDone(success);
     }
+    @Override
+    protected void onCancelled() {
+        super.onCancelled();
+        TransactionListFragment context = getContext();
+        if (context == null) return;
+        context.onRetrieveDone(false);
+    }
     @SuppressLint("DefaultLocale")
     @Override
     protected Void doInBackground(Params... params) {
@@ -93,9 +100,9 @@ public class RetrieveTransactionsTask extends
                     NetworkUtil.prepare_connection(params[0].getBackendPref(), "journal");
             http.setAllowUserInteraction(false);
             publishProgress(progress);
-            TransactionListActivity ctx = contextRef.get();
+            TransactionListFragment ctx = getContext();
             if (ctx == null) return null;
-            try (SQLiteDatabase db = MLDB.getWritableDatabase(ctx)) {
+            try (SQLiteDatabase db = MLDB.getWritableDatabase(ctx.getActivity())) {
                 try (InputStream resp = http.getInputStream()) {
                     if (http.getResponseCode() != 200) throw new IOException(
                             String.format("HTTP error %d", http.getResponseCode()));
@@ -214,9 +221,11 @@ public class RetrieveTransactionsTask extends
                                         if (m.find()) {
                                             String acc_name = m.group(1);
                                             String amount = m.group(2);
+                                            String currency = m.group(3);
                                             amount = amount.replace(',', '.');
-                                            transaction.add_item(new LedgerTransactionItem(acc_name,
-                                                    Float.valueOf(amount)));
+                                            transaction.addAccount(
+                                                    new LedgerTransactionAccount(acc_name,
+                                                            Float.valueOf(amount), currency));
                                             L(String.format("%s = %s", acc_name, amount));
                                         }
                                         else throw new IllegalStateException(
@@ -242,7 +251,8 @@ public class RetrieveTransactionsTask extends
 
             if (success && !isCancelled()) {
                 Log.d("db", "Updating transaction list stamp");
-                MLDB.set_option_value(ctx, MLDB.OPT_TRANSACTION_LIST_STAMP, new Date().getTime());
+                MLDB.set_option_value(ctx.getActivity(), MLDB.OPT_TRANSACTION_LIST_STAMP,
+                        new Date().getTime());
                 ctx.model.reloadTransactions(ctx);
             }
         }
@@ -260,7 +270,7 @@ public class RetrieveTransactionsTask extends
         }
         return null;
     }
-    TransactionListActivity getContext() {
+    TransactionListFragment getContext() {
         return contextRef.get();
     }