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=c7a2e5d77a930ca4b8191d302d67d1a3c3d23eba;hp=b4eaf93572bf1b93934526869811fa2ef82ca8d1;hb=833544eb24cb630dc1ce221e4aa3dedb3f6341e3;hpb=25cd3a8bb9b8196cddd1f66b7757cadc8248a37f 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 b4eaf935..c7a2e5d7 100644 --- a/app/src/main/java/net/ktnx/mobileledger/dao/ProfileDAO.java +++ b/app/src/main/java/net/ktnx/mobileledger/dao/ProfileDAO.java @@ -17,25 +17,85 @@ package net.ktnx.mobileledger.dao; +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); @Delete public abstract void deleteSync(Profile item); + @Query("DELETE FROM profiles") + public abstract void deleteAllSync(); + @Query("select * from profiles where id = :profileId") public abstract Profile getByIdSync(long profileId); + + @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(); + + }); + } }