修复: 部分 Android 4.4 系统(随身WiFi)不支持 `instr()` 函数的问题

This commit is contained in:
pppscn 2024-01-15 14:32:34 +08:00
parent e736bd2c2a
commit 0d26a0de70
4 changed files with 20 additions and 6 deletions

View File

@ -41,8 +41,10 @@ interface FrpcDao {
fun getAutorun(): List<Frpc>
//使用 ORDER BY 子句和 instr() 函数按照列表中 uid 的顺序返回结果
@Query("SELECT * FROM Frpc WHERE uid IN (:uids) ORDER BY instr(:instr, uid)")
fun getByUids(uids: List<String>, instr: String): List<Frpc>
//@Query("SELECT * FROM Frpc WHERE uid IN (:uids) ORDER BY instr(:instr, uid)")
//fun getByUids(uids: List<String>, instr: String): List<Frpc>
@Query("SELECT * FROM Frpc WHERE uid IN (:uids)")
fun getByUids(uids: List<String>): List<Frpc>
@Query("SELECT * FROM Frpc ORDER BY time DESC")
fun pagingSource(): PagingSource<Int, Frpc>

View File

@ -42,8 +42,10 @@ interface SenderDao {
fun getOne(id: Long): Sender
//使用 ORDER BY 子句和 instr() 函数按照列表中 ID 的顺序返回结果
@Query("SELECT * FROM Sender WHERE id IN (:ids) ORDER BY instr(:instr, id)")
fun getByIds(ids: List<Long>, instr: String): List<Sender>
//@Query("SELECT * FROM Sender WHERE id IN (:ids) ORDER BY instr(:instr, id)")
//fun getByIds(ids: List<Long>, instr: String): List<Sender>
@Query("SELECT * FROM Sender WHERE id IN (:ids)")
fun getByIds(ids: List<Long>): List<Sender>
@Query("SELECT count(*) FROM Sender where type=:type and status=:status")
fun count(type: String, status: Int): Single<Int>

View File

@ -31,6 +31,11 @@ class FrpcRepository(private val frpcDao: FrpcDao) {
fun getAutorun(): List<Frpc> = frpcDao.getAutorun()
fun getByUids(uids: List<String>, instr: String): List<Frpc> = frpcDao.getByUids(uids, instr)
fun getByUids(uids: List<String>, instr: String): List<Frpc> {
val frpcs = frpcDao.getByUids(uids)
// 将结果按照 instr() 的顺序进行排序
frpcs.sortedBy { instr.indexOf(it.uid) }
return frpcs
}
}

View File

@ -30,7 +30,12 @@ class SenderRepository(private val senderDao: SenderDao) {
fun getOne(id: Long) = senderDao.getOne(id)
fun getByIds(ids: List<Long>, instr: String) = senderDao.getByIds(ids, instr)
fun getByIds(ids: List<Long>, instr: String): List<Sender> {
val senders = senderDao.getByIds(ids)
// 将结果按照 instr() 的顺序进行排序
senders.sortedBy { instr.indexOf(it.id.toString()) }
return senders
}
fun getAllNonCache(): List<Sender> {
val query = SimpleSQLiteQuery("SELECT * FROM Sender ORDER BY id ASC")