X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fasync%2FUpdateTransactionsTask.java;h=785ec1447eac017e3303a192f2e9eafe7269504a;hb=e6c38110eaac249a03c397ff2f4707dbf23f92f9;hp=c7f0ad828e43a89c6b40dcca98a7f759acfedea8;hpb=6a4f07bbddf90574b8ed2e4b5a5a4a82285e8cfe;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 c7f0ad82..785ec144 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java @@ -17,60 +17,60 @@ 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.ui.MainModel; -import net.ktnx.mobileledger.utils.SimpleDate; +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(MainModel[] model) { - final MobileLedgerProfile profile = Data.getProfile(); + protected String doInBackground(MainModel[] parentModel) { + final Profile profile = Data.getProfile(); - long profile_id = profile.getId(); + long profileId = (profile == null) ? NO_PROFILE_ID : profile.getId(); Data.backgroundTaskStarted(); try { - String sql; - String[] params; + Logger.debug("UTT", "Starting DB transaction list retrieval"); - final String accFilter = model[0].getAccountFilter() - .getValue(); - if (accFilter == null) { - sql = "SELECT id, year, month, day FROM transactions WHERE profile_id=? ORDER BY " + - "year desc, month desc, day desc, id desc"; - params = new String[]{String.valueOf(profile_id)}; + 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 WHERE tr" + - ".profile_id=? 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[]{String.valueOf(profile_id), accFilter}; + transactions = DB.get() + .getTransactionDAO() + .getAllWithAccountsFilteredSync(profileId, accFilter); } - debug("UTT", sql); - TransactionAccumulator accumulator = new TransactionAccumulator(model[0]); + TransactionAccumulator accumulator = new TransactionAccumulator(accFilter); - SQLiteDatabase db = App.getDatabase(); - try (Cursor cursor = db.rawQuery(sql, params)) { - while (cursor.moveToNext()) { - if (isCancelled()) - return null; + for (TransactionWithAccounts tr : transactions) { + if (isCancelled()) + return null; - accumulator.put(new LedgerTransaction(cursor.getInt(0)), - new SimpleDate(cursor.getInt(1), cursor.getInt(2), cursor.getInt(3))); - } + accumulator.put(new LedgerTransaction(tr)); } - accumulator.done(); + accumulator.publishResults(model); + debug("UTT", "transaction list value updated"); return null;