X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fdao%2FProfileDAO.java;h=77697230d60fd0e97d4c6d3bd9b756cdb54f5023;hp=52071745c4fc1eb35d620e0c7e8e023bb8f938e0;hb=5df10dc0b58df4d4be4e9ab34f1e0f477ca46766;hpb=7c71910950d18868e1f419eed5234f113ee51776 diff --git a/app/src/main/java/net/ktnx/mobileledger/dao/ProfileDAO.java b/app/src/main/java/net/ktnx/mobileledger/dao/ProfileDAO.java index 52071745..77697230 100644 --- a/app/src/main/java/net/ktnx/mobileledger/dao/ProfileDAO.java +++ b/app/src/main/java/net/ktnx/mobileledger/dao/ProfileDAO.java @@ -17,20 +17,40 @@ package net.ktnx.mobileledger.dao; +import android.os.AsyncTask; + import androidx.lifecycle.LiveData; import androidx.room.Dao; import androidx.room.Delete; import androidx.room.Insert; +import androidx.room.OnConflictStrategy; import androidx.room.Query; +import androidx.room.Transaction; import androidx.room.Update; import net.ktnx.mobileledger.db.Profile; +import java.util.List; + @Dao public abstract class ProfileDAO extends BaseDAO { - @Insert + @Insert(onConflict = OnConflictStrategy.REPLACE) abstract long insertSync(Profile item); + @Transaction + public long insertLastSync(Profile item) { + int count = getProfileCountSync(); + item.setOrderNo(count + 1); + return insertSync(item); + } + public void insertLast(Profile item, OnInsertedReceiver onInsertedReceiver) { + AsyncTask.execute(() -> { + long id = insertLastSync(item); + if (onInsertedReceiver != null) + onInsertedReceiver.onInsert(id); + }); + } + @Update abstract void updateSync(Profile item); @@ -43,6 +63,32 @@ public abstract class ProfileDAO extends BaseDAO { @Query("SELECT * FROM profiles WHERE id=:profileId") public abstract LiveData getById(long profileId); + @Query("SELECT * FROM profiles ORDER BY order_no") + public abstract List getAllOrderedSync(); + + @Query("SELECT * FROM profiles ORDER BY order_no") + public abstract LiveData> getAllOrdered(); + @Query("SELECT * FROM profiles LIMIT 1") public abstract Profile getAnySync(); + + @Query("SELECT MAX(order_no) FROM profiles") + public abstract int getProfileCountSync(); + public void updateOrderSync(List list) { + if (list == null) + list = getAllOrderedSync(); + int order = 1; + for (Profile p : list) { + p.setOrderNo(order++); + updateSync(p); + } + } + public void updateOrder(List list, Runnable onDone) { + AsyncTask.execute(() -> { + updateOrderSync(list); + if (onDone != null) + onDone.run(); + + }); + } }