优化
This commit is contained in:
@@ -48,7 +48,7 @@ data class ReplaceRule(
|
|||||||
var timeoutMillisecond: Long = 3000L,
|
var timeoutMillisecond: Long = 3000L,
|
||||||
//排序
|
//排序
|
||||||
@ColumnInfo(name = "sortOrder", defaultValue = "0")
|
@ColumnInfo(name = "sortOrder", defaultValue = "0")
|
||||||
var order: Int = 0
|
var order: Int = Int.MIN_VALUE
|
||||||
) : Parcelable {
|
) : Parcelable {
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
|
|||||||
@@ -13,13 +13,13 @@ class ReplaceEditViewModel(application: Application) : BaseViewModel(application
|
|||||||
fun initData(intent: Intent, finally: (replaceRule: ReplaceRule) -> Unit) {
|
fun initData(intent: Intent, finally: (replaceRule: ReplaceRule) -> Unit) {
|
||||||
execute {
|
execute {
|
||||||
val id = intent.getLongExtra("id", -1)
|
val id = intent.getLongExtra("id", -1)
|
||||||
if (id > 0) {
|
replaceRule = if (id > 0) {
|
||||||
replaceRule = appDb.replaceRuleDao.findById(id)
|
appDb.replaceRuleDao.findById(id)
|
||||||
} else {
|
} else {
|
||||||
val pattern = intent.getStringExtra("pattern") ?: ""
|
val pattern = intent.getStringExtra("pattern") ?: ""
|
||||||
val isRegex = intent.getBooleanExtra("isRegex", false)
|
val isRegex = intent.getBooleanExtra("isRegex", false)
|
||||||
val scope = intent.getStringExtra("scope")
|
val scope = intent.getStringExtra("scope")
|
||||||
replaceRule = ReplaceRule(
|
ReplaceRule(
|
||||||
name = pattern,
|
name = pattern,
|
||||||
pattern = pattern,
|
pattern = pattern,
|
||||||
isRegex = isRegex,
|
isRegex = isRegex,
|
||||||
@@ -35,7 +35,7 @@ class ReplaceEditViewModel(application: Application) : BaseViewModel(application
|
|||||||
|
|
||||||
fun save(replaceRule: ReplaceRule, success: () -> Unit) {
|
fun save(replaceRule: ReplaceRule, success: () -> Unit) {
|
||||||
execute {
|
execute {
|
||||||
if (replaceRule.order == 0) {
|
if (replaceRule.order == Int.MIN_VALUE) {
|
||||||
replaceRule.order = appDb.replaceRuleDao.maxOrder + 1
|
replaceRule.order = appDb.replaceRuleDao.maxOrder + 1
|
||||||
}
|
}
|
||||||
appDb.replaceRuleDao.insert(replaceRule)
|
appDb.replaceRuleDao.insert(replaceRule)
|
||||||
|
|||||||
@@ -5,9 +5,7 @@ import com.script.SimpleBindings
|
|||||||
import io.legado.app.constant.AppConst
|
import io.legado.app.constant.AppConst
|
||||||
import io.legado.app.exception.RegexTimeoutException
|
import io.legado.app.exception.RegexTimeoutException
|
||||||
import io.legado.app.help.CrashHandler
|
import io.legado.app.help.CrashHandler
|
||||||
import io.legado.app.help.coroutine.Coroutine
|
|
||||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||||
import splitties.init.appCtx
|
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
import kotlin.coroutines.resumeWithException
|
import kotlin.coroutines.resumeWithException
|
||||||
|
|
||||||
@@ -20,7 +18,7 @@ private val handler by lazy { buildMainHandler() }
|
|||||||
suspend fun CharSequence.replace(regex: Regex, replacement: String, timeout: Long): String {
|
suspend fun CharSequence.replace(regex: Regex, replacement: String, timeout: Long): String {
|
||||||
val charSequence = this
|
val charSequence = this
|
||||||
return suspendCancellableCoroutine { block ->
|
return suspendCancellableCoroutine { block ->
|
||||||
val coroutine = Coroutine.async {
|
val thread = Thread {
|
||||||
try {
|
try {
|
||||||
if (replacement.startsWith("@js:")) {
|
if (replacement.startsWith("@js:")) {
|
||||||
val js = replacement.substring(4)
|
val js = replacement.substring(4)
|
||||||
@@ -43,18 +41,17 @@ suspend fun CharSequence.replace(regex: Regex, replacement: String, timeout: Lon
|
|||||||
block.resumeWithException(e)
|
block.resumeWithException(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
thread.start()
|
||||||
handler.postDelayed(timeout) {
|
handler.postDelayed(timeout) {
|
||||||
if (coroutine.isActive) {
|
if (thread.isAlive) {
|
||||||
val timeoutMsg = "替换超时,3秒后还未结束将重启应用\n替换规则$regex\n替换内容:${this}"
|
runCatching {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
thread.stop()
|
||||||
|
}
|
||||||
|
val timeoutMsg = "替换超时,将禁用替换规则"
|
||||||
val exception = RegexTimeoutException(timeoutMsg)
|
val exception = RegexTimeoutException(timeoutMsg)
|
||||||
block.cancel(exception)
|
block.cancel(exception)
|
||||||
appCtx.longToastOnUi(timeoutMsg)
|
|
||||||
CrashHandler.saveCrashInfo2File(exception)
|
CrashHandler.saveCrashInfo2File(exception)
|
||||||
handler.postDelayed(3000) {
|
|
||||||
if (coroutine.isActive) {
|
|
||||||
appCtx.restart()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user