feat: 更新Ktor版本
This commit is contained in:
3 files changed
+20
-12
No files matched your search
@@ -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()
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in new issue
Block a user