diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/dao/FrpcDao.kt b/app/src/main/java/com/idormy/sms/forwarder/database/dao/FrpcDao.kt index e4a0f84d..5162484e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/dao/FrpcDao.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/dao/FrpcDao.kt @@ -2,7 +2,9 @@ package com.idormy.sms.forwarder.database.dao import androidx.paging.PagingSource import androidx.room.* +import androidx.sqlite.db.SupportSQLiteQuery import com.idormy.sms.forwarder.database.entity.Frpc +import com.idormy.sms.forwarder.database.entity.Sender import io.reactivex.Single @Dao @@ -33,9 +35,9 @@ interface FrpcDao { @Query("SELECT * FROM Frpc ORDER BY time DESC") fun pagingSource(): PagingSource - //TODO:允许主线程访问,后面再优化 - @Query("SELECT * FROM Frpc ORDER BY time ASC") - fun getAll(): List + @Transaction + @RawQuery(observedEntities = [Frpc::class]) + fun getAllRaw(query: SupportSQLiteQuery): List @Query("DELETE FROM Frpc") fun deleteAll() diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/dao/RuleDao.kt b/app/src/main/java/com/idormy/sms/forwarder/database/dao/RuleDao.kt index 1cf74893..5b7e0cfe 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/dao/RuleDao.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/dao/RuleDao.kt @@ -2,8 +2,8 @@ package com.idormy.sms.forwarder.database.dao import androidx.paging.PagingSource import androidx.room.* +import androidx.sqlite.db.SupportSQLiteQuery import com.idormy.sms.forwarder.database.entity.Rule -//import com.idormy.sms.forwarder.database.entity.RuleAndSender import io.reactivex.Completable import io.reactivex.Single @@ -34,29 +34,15 @@ interface RuleDao { @Query("SELECT count(*) FROM Rule where type=:type and status=:status") fun count(type: String, status: Int): Single - /*@Query( - "SELECT Rule.*," + - "Sender.name as sender_name,Sender.type as sender_type" + - " FROM Rule" + - " LEFT JOIN Sender ON Rule.sender_id = Sender.id" + - " where Rule.type=:type" + - " ORDER BY Rule.time DESC" - ) - fun pagingSource(type: String): PagingSource*/ - @Transaction @Query("SELECT * FROM Rule where type=:type ORDER BY id DESC") fun pagingSource(type: String): PagingSource - //@Transaction - //@Query("SELECT * FROM Rule where type=:type and status=:status and (sim_slot='ALL' or sim_slot=:simSlot)") - //suspend fun getRuleAndSender(type: String, status: Int, simSlot: String): List - @Transaction @Query("SELECT * FROM Rule where type=:type and status=:status and (sim_slot='ALL' or sim_slot=:simSlot)") fun getRuleList(type: String, status: Int, simSlot: String): List - //TODO:允许主线程访问,后面再优化 - @Query("SELECT * FROM Rule ORDER BY id ASC") - fun getAll(): List + @Transaction + @RawQuery(observedEntities = [Rule::class]) + fun getAllRaw(query: SupportSQLiteQuery): List } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/dao/SenderDao.kt b/app/src/main/java/com/idormy/sms/forwarder/database/dao/SenderDao.kt index 12baf331..9ba18927 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/dao/SenderDao.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/dao/SenderDao.kt @@ -2,6 +2,7 @@ package com.idormy.sms.forwarder.database.dao import androidx.paging.PagingSource import androidx.room.* +import androidx.sqlite.db.SupportSQLiteQuery import com.idormy.sms.forwarder.database.entity.Sender import io.reactivex.Completable import io.reactivex.Single @@ -37,14 +38,13 @@ interface SenderDao { @Query("SELECT * FROM Sender ORDER BY id DESC") fun getAll(): Single> + @Transaction + @RawQuery(observedEntities = [Sender::class]) + fun getAllRaw(query: SupportSQLiteQuery): List + @Query("SELECT COUNT(id) FROM Sender WHERE status = 1") fun getOnCount(): Flow - //TODO:允许主线程访问,后面再优化 - @Query("SELECT * FROM Sender ORDER BY id ASC") - fun getAll2(): List - @Query("DELETE FROM Sender") fun deleteAll() - } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/repository/FrpcRepository.kt b/app/src/main/java/com/idormy/sms/forwarder/database/repository/FrpcRepository.kt index 2a97388f..a19d7276 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/repository/FrpcRepository.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/repository/FrpcRepository.kt @@ -1,15 +1,15 @@ package com.idormy.sms.forwarder.database.repository import androidx.annotation.WorkerThread +import androidx.sqlite.db.SimpleSQLiteQuery import com.idormy.sms.forwarder.database.dao.FrpcDao import com.idormy.sms.forwarder.database.entity.Frpc +import com.idormy.sms.forwarder.database.entity.Sender class FrpcRepository( private val frpcDao: FrpcDao, ) { - //var listener: Listener? = null - @WorkerThread fun insert(frpc: Frpc) { frpcDao.insert(frpc) @@ -26,8 +26,10 @@ class FrpcRepository( @WorkerThread fun update(frpc: Frpc) = frpcDao.update(frpc) - //TODO:允许主线程访问,后面再优化 - val all: List = frpcDao.getAll() + fun getAllNonCache(): List { + val query = SimpleSQLiteQuery("SELECT * FROM Frpc ORDER BY time DESC") + return frpcDao.getAllRaw(query) + } fun deleteAll() { frpcDao.deleteAll() diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/repository/RuleRepository.kt b/app/src/main/java/com/idormy/sms/forwarder/database/repository/RuleRepository.kt index a0fe270e..de3d0b4c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/repository/RuleRepository.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/repository/RuleRepository.kt @@ -1,8 +1,10 @@ package com.idormy.sms.forwarder.database.repository import androidx.annotation.WorkerThread +import androidx.sqlite.db.SimpleSQLiteQuery import com.idormy.sms.forwarder.database.dao.RuleDao import com.idormy.sms.forwarder.database.entity.Rule +import com.idormy.sms.forwarder.database.entity.Sender class RuleRepository( private val ruleDao: RuleDao, @@ -27,15 +29,15 @@ class RuleRepository( @WorkerThread fun getOne(id: Long) = ruleDao.getOne(id) - //suspend fun getRuleAndSender(type: String, status: Int, simSlot: String) = ruleDao.getRuleAndSender(type, status, simSlot) - fun getRuleList(type: String, status: Int, simSlot: String) = ruleDao.getRuleList(type, status, simSlot) @WorkerThread fun update(rule: Rule) = ruleDao.update(rule) - //TODO:允许主线程访问,后面再优化 - val all: List = ruleDao.getAll() + fun getAllNonCache(): List { + val query = SimpleSQLiteQuery("SELECT * FROM Rule ORDER BY id ASC") + return ruleDao.getAllRaw(query) + } fun deleteAll() { ruleDao.deleteAll() diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/repository/SenderRepository.kt b/app/src/main/java/com/idormy/sms/forwarder/database/repository/SenderRepository.kt index 32d766b8..0a30fc36 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/repository/SenderRepository.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/repository/SenderRepository.kt @@ -4,6 +4,7 @@ import androidx.annotation.WorkerThread import com.idormy.sms.forwarder.database.dao.SenderDao import com.idormy.sms.forwarder.database.entity.Sender import kotlinx.coroutines.flow.Flow +import androidx.sqlite.db.SimpleSQLiteQuery class SenderRepository(private val senderDao: SenderDao) { @@ -24,13 +25,14 @@ class SenderRepository(private val senderDao: SenderDao) { fun update(sender: Sender) = senderDao.update(sender) - val count: Flow = senderDao.getOnCount() + fun getAllNonCache(): List { + val query = SimpleSQLiteQuery("SELECT * FROM Sender ORDER BY id ASC") + return senderDao.getAllRaw(query) + } - //TODO:允许主线程访问,后面再优化 - val all: List = senderDao.getAll2() + val count: Flow = senderDao.getOnCount() fun deleteAll() { senderDao.deleteAll() } - } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CloneFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CloneFragment.kt index ae9a7abc..97178ec0 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CloneFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CloneFragment.kt @@ -46,7 +46,7 @@ import java.util.* @Page(name = "一键换新机") class CloneFragment : BaseFragment(), View.OnClickListener { - val TAG: String = SmsQueryFragment::class.java.simpleName + val TAG: String = CloneFragment::class.java.simpleName private var backupPath: String? = null private val backupFile = "SmsForwarder.json" private var pushCountDownHelper: CountDownButtonHelper? = null @@ -171,6 +171,7 @@ class CloneFragment : BaseFragment(), View.OnClickL FileUtils.createFileByDeleteOldFile(file) val cloneInfo = HttpServerUtils.exportSettings() val jsonStr = Gson().toJson(cloneInfo) + Log.d(TAG, "jsonStr = $jsonStr") if (FileIOUtils.writeFileFromString(file, jsonStr)) { XToastUtils.success(getString(R.string.export_succeeded)) } else { @@ -273,6 +274,7 @@ class CloneFragment : BaseFragment(), View.OnClickL } postRequest.upString(requestMsg) } + 3 -> { try { val sm4Key = ConvertTools.hexStringToByteArray(HttpServerUtils.clientSignKey) @@ -287,6 +289,7 @@ class CloneFragment : BaseFragment(), View.OnClickL } postRequest.upString(requestMsg) } + else -> { postRequest.upJson(requestMsg) } @@ -372,6 +375,7 @@ class CloneFragment : BaseFragment(), View.OnClickL } postRequest.upString(requestMsg) } + 3 -> { try { val sm4Key = ConvertTools.hexStringToByteArray(HttpServerUtils.clientSignKey) @@ -386,6 +390,7 @@ class CloneFragment : BaseFragment(), View.OnClickL } postRequest.upString(requestMsg) } + else -> { postRequest.upJson(requestMsg) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/HttpServerUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/HttpServerUtils.kt index 34e60576..fb94cd31 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/HttpServerUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/HttpServerUtils.kt @@ -145,9 +145,9 @@ class HttpServerUtils private constructor() { cloneInfo.versionCode = AppUtils.getAppVersionCode() cloneInfo.versionName = AppUtils.getAppVersionName() cloneInfo.settings = SharedPreference.exportPreference() - cloneInfo.senderList = Core.sender.all - cloneInfo.ruleList = Core.rule.all - cloneInfo.frpcList = Core.frpc.all + cloneInfo.senderList = Core.sender.getAllNonCache() + cloneInfo.ruleList = Core.rule.getAllNonCache() + cloneInfo.frpcList = Core.frpc.getAllNonCache() return cloneInfo }