X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fdao%2FProfileDAO.java;h=3c8fb4c373516c060c43fab91436c216676bd926;hb=860e0419d619210bb59bcae1b64d8c5db90eef70;hp=52071745c4fc1eb35d620e0c7e8e023bb8f938e0;hpb=fac0809065787fb473646db5770f4f2fae0d1e8f;p=mobile-ledger.git 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..3c8fb4c3 100644 --- a/app/src/main/java/net/ktnx/mobileledger/dao/ProfileDAO.java +++ b/app/src/main/java/net/ktnx/mobileledger/dao/ProfileDAO.java @@ -21,16 +21,34 @@ 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) { + BaseDAO.runAsync(() -> { + long id = insertLastSync(item); + if (onInsertedReceiver != null) + onInsertedReceiver.onInsert(id); + }); + } + @Update abstract void updateSync(Profile item); @@ -43,6 +61,38 @@ 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 * FROM profiles WHERE uuid=:uuid") + public abstract LiveData getByUuid(String uuid); + + @Query("SELECT * FROM profiles WHERE uuid=:uuid") + public abstract Profile getByUuidSync(String uuid); + + @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) { + BaseDAO.runAsync(() -> { + updateOrderSync(list); + if (onDone != null) + onDone.run(); + + }); + } }