|  |  |  | @ -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() | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |