|
|
|
@ -5,9 +5,7 @@ import com.script.SimpleBindings |
|
|
|
|
import io.legado.app.constant.AppConst |
|
|
|
|
import io.legado.app.exception.RegexTimeoutException |
|
|
|
|
import io.legado.app.help.CrashHandler |
|
|
|
|
import io.legado.app.help.coroutine.Coroutine |
|
|
|
|
import kotlinx.coroutines.suspendCancellableCoroutine |
|
|
|
|
import splitties.init.appCtx |
|
|
|
|
import kotlin.coroutines.resume |
|
|
|
|
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 { |
|
|
|
|
val charSequence = this |
|
|
|
|
return suspendCancellableCoroutine { block -> |
|
|
|
|
val coroutine = Coroutine.async { |
|
|
|
|
val thread = Thread { |
|
|
|
|
try { |
|
|
|
|
if (replacement.startsWith("@js:")) { |
|
|
|
|
val js = replacement.substring(4) |
|
|
|
@ -43,18 +41,17 @@ suspend fun CharSequence.replace(regex: Regex, replacement: String, timeout: Lon |
|
|
|
|
block.resumeWithException(e) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
thread.start() |
|
|
|
|
handler.postDelayed(timeout) { |
|
|
|
|
if (coroutine.isActive) { |
|
|
|
|
val timeoutMsg = "替换超时,3秒后还未结束将重启应用\n替换规则$regex\n替换内容:${this}" |
|
|
|
|
if (thread.isAlive) { |
|
|
|
|
runCatching { |
|
|
|
|
@Suppress("DEPRECATION") |
|
|
|
|
thread.stop() |
|
|
|
|
} |
|
|
|
|
val timeoutMsg = "替换超时,将禁用替换规则" |
|
|
|
|
val exception = RegexTimeoutException(timeoutMsg) |
|
|
|
|
block.cancel(exception) |
|
|
|
|
appCtx.longToastOnUi(timeoutMsg) |
|
|
|
|
CrashHandler.saveCrashInfo2File(exception) |
|
|
|
|
handler.postDelayed(3000) { |
|
|
|
|
if (coroutine.isActive) { |
|
|
|
|
appCtx.restart() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|