From 83a51865b4476d045ac3d079fabe8f7f2f97c6ee Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 21 Oct 2022 21:22:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controller/ReplaceRuleController.kt | 66 ++++++++++++++++++- .../main/java/io/legado/app/web/HttpServer.kt | 5 ++ 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/api/controller/ReplaceRuleController.kt b/app/src/main/java/io/legado/app/api/controller/ReplaceRuleController.kt index f31801bc4..6ec260cc4 100644 --- a/app/src/main/java/io/legado/app/api/controller/ReplaceRuleController.kt +++ b/app/src/main/java/io/legado/app/api/controller/ReplaceRuleController.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(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>(postData).getOrNull() - + if (map == null) { + returnData.setErrorMsg("格式不对") + } else { + val rule = map["rule"]?.let { + if (it is String) { + GSON.fromJsonObject(it).getOrNull() + } else { + GSON.fromJsonObject(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 } diff --git a/app/src/main/java/io/legado/app/web/HttpServer.kt b/app/src/main/java/io/legado/app/web/HttpServer.kt index c8f31c6b1..593260b4c 100644 --- a/app/src/main/java/io/legado/app/web/HttpServer.kt +++ b/app/src/main/java/io/legado/app/web/HttpServer.kt @@ -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 } }