feat: 更新Ktor版本

This commit is contained in:
HapeLee committed 2026-06-06 01:28:43 +08:00
1 parent 1021e1086f
commit 451f2f8875
3 files changed
+20 -12

No files matched your search

+5 -1
View File
@@ -108,7 +108,11 @@
"Bash(node -e ' *)", "Bash(node -e ' *)",
"Bash(node *)", "Bash(node *)",
"Bash(Select-String -Pattern \"BUILD|error|Error\")", "Bash(Select-String -Pattern \"BUILD|error|Error\")",
"Bash(Select-Object -First 10)" "Bash(Select-Object -First 10)",
"Bash(git push *)",
"Bash(gh run *)",
"WebFetch(domain:ktor.io)",
"WebFetch(domain:api.ktor.io)"
] ]
} }
} }
@@ -13,8 +13,7 @@ import io.ktor.server.request.*
import io.ktor.server.response.* import io.ktor.server.response.*
import io.ktor.server.routing.* import io.ktor.server.routing.*
import io.ktor.server.websocket.* import io.ktor.server.websocket.*
import io.ktor.util.pipeline.* import io.ktor.utils.io.readAvailable
import io.ktor.util.toMap
import io.legado.app.api.ReturnData import io.legado.app.api.ReturnData
import io.legado.app.api.controller.BookController import io.legado.app.api.controller.BookController
import io.legado.app.api.controller.BookSourceController import io.legado.app.api.controller.BookSourceController
@@ -35,8 +34,8 @@ import java.io.ByteArrayOutputStream
import java.io.File import java.io.File
class KtorServer(private val port: Int) { class KtorServer(private val port: Int) {
private var server: ApplicationEngine? = null private var server: EmbeddedServer<*, *>? = null
private var wsServer: ApplicationEngine? = null private var wsServer: EmbeddedServer<*, *>? = null
private val assetsWeb = AssetsWeb("web") private val assetsWeb = AssetsWeb("web")
fun start() { fun start() {
@@ -73,9 +72,13 @@ class KtorServer(private val port: Int) {
if (part.name == "fileName") fileName = part.value if (part.name == "fileName") fileName = part.value
} }
is PartData.FileItem -> { is PartData.FileItem -> {
part.streamProvider().use { input -> val channel = part.provider()
tempFile.outputStream().use { output -> tempFile.outputStream().use { output ->
input.copyTo(output) val buffer = ByteArray(8192)
while (true) {
val bytesRead = channel.readAvailable(buffer)
if (bytesRead == -1) break
output.write(buffer, 0, bytesRead)
} }
} }
if (fileName == null) { if (fileName == null) {
@@ -169,7 +172,7 @@ class KtorServer(private val port: Int) {
wsServer?.stop(0, 0) wsServer?.stop(0, 0)
} }
private suspend fun PipelineContext<Unit, ApplicationCall>.handlePost( private suspend fun RoutingContext.handlePost(
block: suspend (String?) -> ReturnData block: suspend (String?) -> ReturnData
) { ) {
WebService.serve() WebService.serve()
@@ -183,12 +186,13 @@ class KtorServer(private val port: Int) {
} }
} }
private suspend fun PipelineContext<Unit, ApplicationCall>.handleGet( private suspend fun RoutingContext.handleGet(
block: (Map<String, List<String>>) -> ReturnData? block: (Map<String, List<String>>) -> ReturnData?
) { ) {
WebService.serve() WebService.serve()
try { try {
val parameters = call.request.queryParameters.toMap() val parameters = call.queryParameters.entries()
.associate { it.key to it.value }
val returnData = block(parameters) val returnData = block(parameters)
if (returnData != null) { if (returnData != null) {
respondReturnData(returnData) respondReturnData(returnData)
@@ -201,7 +205,7 @@ class KtorServer(private val port: Int) {
} }
} }
private suspend fun PipelineContext<Unit, ApplicationCall>.respondReturnData(returnData: ReturnData) { private suspend fun RoutingContext.respondReturnData(returnData: ReturnData) {
if (returnData.data is Bitmap) { if (returnData.data is Bitmap) {
val bitmap = returnData.data as Bitmap val bitmap = returnData.data as Bitmap
val outputStream = ByteArrayOutputStream() val outputStream = ByteArrayOutputStream()
+1 -1
View File
@@ -37,7 +37,7 @@ lifecycle = "2.10.0"
glide = "5.0.7" glide = "5.0.7"
gson = "2.14.0" gson = "2.14.0"
jsonPath = "3.0.0" jsonPath = "3.0.0"
ktor = "2.3.12" ktor = "3.5.0"
# issue #3811,不要更新版本,新版引入了一个破坏性变更(详见https://github.com/jhy/jsoup/pull/2017) # issue #3811,不要更新版本,新版引入了一个破坏性变更(详见https://github.com/jhy/jsoup/pull/2017)
# 若要升级请确保相关代码不会受此变更影响(如AnalyzeByJSoup.kt、JsoupXpath库等) # 若要升级请确保相关代码不会受此变更影响(如AnalyzeByJSoup.kt、JsoupXpath库等)
jsoup = "1.16.2" jsoup = "1.16.2"