X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fasync%2FUpdateTransactionsTask.java;h=38db6b17f8c7b30648a92d980f23626f4fbe222e;hb=63d4636c19652b688fb0a1e4f3081843c740bf78;hp=bb3d3dde82fe94fa14d632b71f2a201d262ef239;hpb=217da55a224e2ae899d0b50604e2e54f882ec04f;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java b/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java index bb3d3dde..38db6b17 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java @@ -1,5 +1,5 @@ /* - * Copyright © 2020 Damyan Ivanov. + * Copyright © 2021 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -17,80 +17,61 @@ package net.ktnx.mobileledger.async; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; import android.os.AsyncTask; -import net.ktnx.mobileledger.App; +import net.ktnx.mobileledger.db.DB; +import net.ktnx.mobileledger.db.Profile; +import net.ktnx.mobileledger.db.TransactionWithAccounts; import net.ktnx.mobileledger.model.Data; import net.ktnx.mobileledger.model.LedgerTransaction; -import net.ktnx.mobileledger.model.MobileLedgerProfile; -import net.ktnx.mobileledger.model.TransactionListItem; -import net.ktnx.mobileledger.utils.SimpleDate; +import net.ktnx.mobileledger.ui.MainModel; +import net.ktnx.mobileledger.utils.Logger; import java.util.ArrayList; +import java.util.List; +import static net.ktnx.mobileledger.db.Profile.NO_PROFILE_ID; import static net.ktnx.mobileledger.utils.Logger.debug; -public class UpdateTransactionsTask extends AsyncTask { - protected String doInBackground(String[] filterAccName) { - final MobileLedgerProfile profile = Data.profile.getValue(); - if (profile == null) - return "Profile not configured"; +public class UpdateTransactionsTask extends AsyncTask { + protected String doInBackground(MainModel[] parentModel) { + final Profile profile = Data.getProfile(); - String profile_uuid = profile.getUuid(); + long profileId = (profile == null) ? NO_PROFILE_ID : profile.getId(); Data.backgroundTaskStarted(); try { - ArrayList newList = new ArrayList<>(); + Logger.debug("UTT", "Starting DB transaction list retrieval"); - String sql; - String[] params; - - if (filterAccName[0] == null) { - sql = "SELECT id, year, month, day FROM transactions WHERE profile=? ORDER BY " + - "year desc, month desc, day desc, id desc"; - params = new String[]{profile_uuid}; + final MainModel model = parentModel[0]; + final String accFilter = model.getAccountFilter() + .getValue(); + final List transactions; + if (profileId == NO_PROFILE_ID) + transactions = new ArrayList<>(); + else if (accFilter == null) { + transactions = DB.get() + .getTransactionDAO() + .getAllWithAccountsSync(profileId); } else { - sql = "SELECT distinct tr.id, tr.year, tr.month, tr.day from transactions tr " + - "JOIN " + "transaction_accounts ta " + - "ON ta.transaction_id=tr.id AND ta.profile=tr.profile WHERE tr.profile=? " + - "and ta.account_name LIKE ?||'%' AND ta" + - ".amount <> 0 ORDER BY tr.year desc, tr.month desc, tr.day desc, tr.id " + - "desc"; - params = new String[]{profile_uuid, filterAccName[0]}; + transactions = DB.get() + .getTransactionDAO() + .getAllWithAccountsFilteredSync(profileId, accFilter); } - debug("UTT", sql); - SQLiteDatabase db = App.getDatabase(); - boolean odd = true; - SimpleDate lastDate = SimpleDate.today(); - try (Cursor cursor = db.rawQuery(sql, params)) { - while (cursor.moveToNext()) { - if (isCancelled()) - return null; - - int transaction_id = cursor.getInt(0); - SimpleDate date = - new SimpleDate(cursor.getInt(1), cursor.getInt(2), cursor.getInt(3)); + TransactionAccumulator accumulator = new TransactionAccumulator(model); - if (!date.equals(lastDate)) { - boolean showMonth = - (date.month != lastDate.month) || (date.year != lastDate.year); - newList.add(new TransactionListItem(date, showMonth)); - } - newList.add( - new TransactionListItem(new LedgerTransaction(transaction_id), odd)); -// debug("UTT", String.format("got transaction %d", transaction_id)); + for (TransactionWithAccounts tr : transactions) { + if (isCancelled()) + return null; - lastDate = date; - odd = !odd; - } - Data.transactions.setList(newList); - debug("UTT", "transaction list value updated"); + accumulator.put(new LedgerTransaction(tr)); } + accumulator.done(); + debug("UTT", "transaction list value updated"); + return null; } finally {