pull/2468/head
kunfei 3 years ago
parent de78eb233b
commit 83a51865b4
  1. 66
      app/src/main/java/io/legado/app/api/controller/ReplaceRuleController.kt
  2. 5
      app/src/main/java/io/legado/app/web/HttpServer.kt

@ -5,10 +5,19 @@ import io.legado.app.data.appDb
import io.legado.app.data.entities.ReplaceRule
import io.legado.app.utils.GSON
import io.legado.app.utils.fromJsonObject
import io.legado.app.utils.replace
import io.legado.app.utils.stackTraceStr
import kotlinx.coroutines.runBlocking
object ReplaceRuleController {
val allRules get() = appDb.replaceRuleDao.all
val allRules: ReturnData
get() {
val rules = appDb.replaceRuleDao.all
val returnData = ReturnData()
returnData.setData(GSON.toJson(rules))
return returnData
}
fun saveRule(postData: String?): ReturnData {
@ -26,11 +35,64 @@ object ReplaceRuleController {
return returnData
}
fun delete(postData: String?): ReturnData {
val returnData = ReturnData()
postData ?: return returnData.setErrorMsg("数据不能为空")
val rule = GSON.fromJsonObject<ReplaceRule>(postData).getOrNull()
if (rule == null) {
returnData.setErrorMsg("格式不对")
} else {
appDb.replaceRuleDao.delete(rule)
}
return returnData
}
/**
* 传入测试数据格式
* {
* rule: Replace,
* text: "xxx"
* }
*/
fun testRule(postData: String?): ReturnData {
val returnData = ReturnData()
postData ?: return returnData.setErrorMsg("数据不能为空")
val map = GSON.fromJsonObject<Map<String, *>>(postData).getOrNull()
if (map == null) {
returnData.setErrorMsg("格式不对")
} else {
val rule = map["rule"]?.let {
if (it is String) {
GSON.fromJsonObject<ReplaceRule>(it).getOrNull()
} else {
GSON.fromJsonObject<ReplaceRule>(GSON.toJson(it)).getOrNull()
}
}
if (rule == null) {
returnData.setErrorMsg("格式不对")
return returnData
}
if (rule.pattern.isEmpty()) {
returnData.setErrorMsg("替换规则不能为空")
}
val text = map["text"] as String
val content = runBlocking {
try {
if (rule.isRegex) {
text.replace(
rule.pattern.toRegex(),
rule.replacement, rule.timeoutMillisecond
)
} else {
text.replace(rule.pattern, rule.replacement)
}
} catch (e: Exception) {
e.stackTraceStr
}
}
returnData.setData(content)
}
return returnData
}

@ -6,6 +6,7 @@ import fi.iki.elonen.NanoHTTPD
import io.legado.app.api.ReturnData
import io.legado.app.api.controller.BookController
import io.legado.app.api.controller.BookSourceController
import io.legado.app.api.controller.ReplaceRuleController
import io.legado.app.api.controller.RssSourceController
import io.legado.app.utils.FileUtils
import io.legado.app.utils.externalFiles
@ -50,6 +51,9 @@ class HttpServer(port: Int) : NanoHTTPD(port) {
"/saveRssSource" -> RssSourceController.saveSource(postData)
"/saveRssSources" -> RssSourceController.saveSources(postData)
"/deleteRssSources" -> RssSourceController.deleteSources(postData)
"/saveReplaceRule" -> ReplaceRuleController.saveRule(postData)
"/deleteReplaceRule" -> ReplaceRuleController.delete(postData)
"/testReplaceRule" -> ReplaceRuleController.testRule(postData)
else -> null
}
}
@ -68,6 +72,7 @@ class HttpServer(port: Int) : NanoHTTPD(port) {
"/getReadConfig" -> BookController.getWebReadConfig()
"/getRssSource" -> RssSourceController.getSource(parameters)
"/getRssSources" -> RssSourceController.sources
"/getReplaceRules" -> ReplaceRuleController.allRules
else -> null
}
}

Loading…
Cancel
Save