start migration onto new dependencies

This commit is contained in:
2024-08-16 19:10:49 +06:00
parent 1a317f1455
commit a28448c3c1
31 changed files with 118 additions and 87 deletions

View File

@@ -3,9 +3,10 @@ package dev.inmo.micro_utils.ktor.client
import dev.inmo.micro_utils.common.MPPFile
import dev.inmo.micro_utils.ktor.common.*
import io.ktor.client.HttpClient
import io.ktor.client.content.*
expect suspend fun HttpClient.tempUpload(
fullTempUploadDraftPath: String,
file: MPPFile,
onUpload: OnUploadCallback = { _, _ -> }
onUpload: ProgressListener = ProgressListener { _, _ -> }
): TemporalFileId

View File

@@ -4,6 +4,7 @@ import dev.inmo.micro_utils.common.FileName
import dev.inmo.micro_utils.common.MPPFile
import dev.inmo.micro_utils.ktor.common.LambdaInputProvider
import io.ktor.client.HttpClient
import io.ktor.client.content.*
import io.ktor.http.Headers
import io.ktor.utils.io.core.Input
import kotlinx.serialization.DeserializationStrategy
@@ -31,7 +32,7 @@ expect suspend fun <T> HttpClient.uniUpload(
resultDeserializer: DeserializationStrategy<T>,
headers: Headers = Headers.Empty,
stringFormat: StringFormat = Json,
onUpload: OnUploadCallback = { _, _ -> }
onUpload: ProgressListener = ProgressListener { _, _ -> }
): T?
/**
@@ -46,7 +47,7 @@ suspend fun <T> HttpClient.uniUpload(
additionalData: Map<String, Any> = emptyMap(),
headers: Headers = Headers.Empty,
stringFormat: StringFormat = Json,
onUpload: OnUploadCallback = { _, _ -> }
onUpload: ProgressListener = ProgressListener { _, _ -> }
): T? = uniUpload(
url,
additionalData + ("bytes" to file),
@@ -68,7 +69,7 @@ suspend fun <T> HttpClient.uniUpload(
additionalData: Map<String, Any> = emptyMap(),
headers: Headers = Headers.Empty,
stringFormat: StringFormat = Json,
onUpload: OnUploadCallback = { _, _ -> }
onUpload: ProgressListener = ProgressListener { _, _ -> }
): T? = uniUpload(
url,
additionalData + ("bytes" to info),
@@ -93,7 +94,7 @@ suspend fun <T> HttpClient.uniUpload(
additionalData: Map<String, Any> = emptyMap(),
headers: Headers = Headers.Empty,
stringFormat: StringFormat = Json,
onUpload: OnUploadCallback = { _, _ -> }
onUpload: ProgressListener = ProgressListener { _, _ -> }
): T? = uniUpload(
url,
UniUploadFileInfo(fileName, mimeType, inputAllocator),

View File

@@ -5,16 +5,19 @@ import dev.inmo.micro_utils.coroutines.LinkedSupervisorJob
import dev.inmo.micro_utils.coroutines.launchSafelyWithoutExceptions
import dev.inmo.micro_utils.ktor.common.TemporalFileId
import io.ktor.client.HttpClient
import io.ktor.client.content.*
import kotlinx.coroutines.*
import kotlinx.io.files.SystemFileSystem
import org.w3c.dom.mediasource.ENDED
import org.w3c.dom.mediasource.ReadyState
import org.w3c.files.File
import org.w3c.xhr.*
import org.w3c.xhr.XMLHttpRequest.Companion.DONE
suspend fun tempUpload(
fullTempUploadDraftPath: String,
file: MPPFile,
onUpload: OnUploadCallback
onUpload: ProgressListener
): TemporalFileId {
val formData = FormData()
val answer = CompletableDeferred<TemporalFileId>(currentCoroutineContext().job)
@@ -28,7 +31,7 @@ suspend fun tempUpload(
val request = XMLHttpRequest()
request.responseType = XMLHttpRequestResponseType.TEXT
request.upload.onprogress = {
subscope.launchSafelyWithoutExceptions { onUpload(it.loaded.toLong(), it.total.toLong()) }
subscope.launchSafelyWithoutExceptions { onUpload.onProgress(it.loaded.toLong(), it.total.toLong()) }
}
request.onload = {
if (request.status == 200.toShort()) {
@@ -60,5 +63,5 @@ suspend fun tempUpload(
actual suspend fun HttpClient.tempUpload(
fullTempUploadDraftPath: String,
file: MPPFile,
onUpload: OnUploadCallback
onUpload: ProgressListener
): TemporalFileId = dev.inmo.micro_utils.ktor.client.tempUpload(fullTempUploadDraftPath, file, onUpload)

View File

@@ -5,6 +5,7 @@ import dev.inmo.micro_utils.common.Progress
import dev.inmo.micro_utils.coroutines.LinkedSupervisorJob
import dev.inmo.micro_utils.coroutines.launchSafelyWithoutExceptions
import io.ktor.client.HttpClient
import io.ktor.client.content.*
import io.ktor.http.Headers
import io.ktor.utils.io.core.readBytes
import kotlinx.coroutines.CompletableDeferred
@@ -36,7 +37,7 @@ actual suspend fun <T> HttpClient.uniUpload(
resultDeserializer: DeserializationStrategy<T>,
headers: Headers,
stringFormat: StringFormat,
onUpload: OnUploadCallback
onUpload: ProgressListener
): T? {
val formData = FormData()
val answer = CompletableDeferred<T?>(currentCoroutineContext().job)
@@ -66,7 +67,7 @@ actual suspend fun <T> HttpClient.uniUpload(
}
request.responseType = XMLHttpRequestResponseType.TEXT
request.upload.onprogress = {
subscope.launchSafelyWithoutExceptions { onUpload(it.loaded.toLong(), it.total.toLong()) }
subscope.launchSafelyWithoutExceptions { onUpload.onProgress(it.loaded.toLong(), it.total.toLong()) }
}
request.onload = {
if (request.status == 200.toShort()) {

View File

@@ -4,6 +4,7 @@ import dev.inmo.micro_utils.common.MPPFile
import dev.inmo.micro_utils.common.filename
import dev.inmo.micro_utils.ktor.common.TemporalFileId
import io.ktor.client.HttpClient
import io.ktor.client.content.*
import io.ktor.client.plugins.onUpload
import io.ktor.client.request.forms.formData
import io.ktor.client.request.forms.submitFormWithBinaryData
@@ -18,7 +19,7 @@ internal val MPPFile.mimeType: String
actual suspend fun HttpClient.tempUpload(
fullTempUploadDraftPath: String,
file: MPPFile,
onUpload: OnUploadCallback
onUpload: ProgressListener
): TemporalFileId {
val inputProvider = file.inputProvider()
val fileId = submitFormWithBinaryData(

View File

@@ -2,6 +2,7 @@ package dev.inmo.micro_utils.ktor.client
import dev.inmo.micro_utils.common.Progress
import io.ktor.client.HttpClient
import io.ktor.client.content.*
import io.ktor.client.engine.mergeHeaders
import io.ktor.client.plugins.onUpload
import io.ktor.client.request.HttpRequestBuilder
@@ -39,7 +40,7 @@ actual suspend fun <T> HttpClient.uniUpload(
resultDeserializer: DeserializationStrategy<T>,
headers: Headers,
stringFormat: StringFormat,
onUpload: OnUploadCallback
onUpload: ProgressListener
): T? {
val withBinary = data.values.any { it is File || it is UniUploadFileInfo }
@@ -75,9 +76,7 @@ actual suspend fun <T> HttpClient.uniUpload(
headers {
appendAll(headers)
}
onUpload { bytesSentTotal, contentLength ->
onUpload(bytesSentTotal, contentLength)
}
onUpload(onUpload)
}
val response = if (withBinary) {

View File

@@ -5,6 +5,7 @@ import dev.inmo.micro_utils.common.filename
import dev.inmo.micro_utils.ktor.common.TemporalFileId
import dev.inmo.micro_utils.mime_types.getMimeTypeOrAny
import io.ktor.client.HttpClient
import io.ktor.client.content.*
import io.ktor.client.plugins.onUpload
import io.ktor.client.request.forms.formData
import io.ktor.client.request.forms.submitFormWithBinaryData
@@ -18,7 +19,7 @@ internal val MPPFile.mimeType: String
actual suspend fun HttpClient.tempUpload(
fullTempUploadDraftPath: String,
file: MPPFile,
onUpload: OnUploadCallback
onUpload: ProgressListener
): TemporalFileId {
val inputProvider = file.inputProvider()
val fileId = submitFormWithBinaryData(

View File

@@ -3,6 +3,7 @@ package dev.inmo.micro_utils.ktor.client
import dev.inmo.micro_utils.common.MPPFile
import dev.inmo.micro_utils.common.Progress
import io.ktor.client.HttpClient
import io.ktor.client.content.*
import io.ktor.client.engine.mergeHeaders
import io.ktor.client.plugins.onUpload
import io.ktor.client.request.HttpRequestBuilder
@@ -39,7 +40,7 @@ actual suspend fun <T> HttpClient.uniUpload(
resultDeserializer: DeserializationStrategy<T>,
headers: Headers,
stringFormat: StringFormat,
onUpload: OnUploadCallback
onUpload: ProgressListener
): T? {
val withBinary = data.values.any { it is MPPFile || it is UniUploadFileInfo }
@@ -75,9 +76,7 @@ actual suspend fun <T> HttpClient.uniUpload(
headers {
appendAll(headers)
}
onUpload { bytesSentTotal, contentLength ->
onUpload(bytesSentTotal, contentLength)
}
onUpload(onUpload)
}
val response = if (withBinary) {

View File

@@ -5,6 +5,7 @@ import dev.inmo.micro_utils.common.filename
import dev.inmo.micro_utils.ktor.common.TemporalFileId
import dev.inmo.micro_utils.mime_types.getMimeTypeOrAny
import io.ktor.client.HttpClient
import io.ktor.client.content.*
import io.ktor.client.plugins.onUpload
import io.ktor.client.request.forms.formData
import io.ktor.client.request.forms.submitFormWithBinaryData
@@ -18,7 +19,7 @@ internal val MPPFile.mimeType: String
actual suspend fun HttpClient.tempUpload(
fullTempUploadDraftPath: String,
file: MPPFile,
onUpload: OnUploadCallback
onUpload: ProgressListener
): TemporalFileId {
val inputProvider = file.inputProvider()
val fileId = submitFormWithBinaryData(

View File

@@ -3,6 +3,7 @@ package dev.inmo.micro_utils.ktor.client
import dev.inmo.micro_utils.common.MPPFile
import dev.inmo.micro_utils.common.Progress
import io.ktor.client.HttpClient
import io.ktor.client.content.*
import io.ktor.client.engine.mergeHeaders
import io.ktor.client.plugins.onUpload
import io.ktor.client.request.HttpRequestBuilder
@@ -39,7 +40,7 @@ actual suspend fun <T> HttpClient.uniUpload(
resultDeserializer: DeserializationStrategy<T>,
headers: Headers,
stringFormat: StringFormat,
onUpload: OnUploadCallback
onUpload: ProgressListener
): T? {
val withBinary = data.values.any { it is MPPFile || it is UniUploadFileInfo }
@@ -75,9 +76,7 @@ actual suspend fun <T> HttpClient.uniUpload(
headers {
appendAll(headers)
}
onUpload { bytesSentTotal, contentLength ->
onUpload(bytesSentTotal, contentLength)
}
onUpload(onUpload)
}
val response = if (withBinary) {

View File

@@ -5,6 +5,7 @@ import dev.inmo.micro_utils.common.filename
import dev.inmo.micro_utils.ktor.common.TemporalFileId
import dev.inmo.micro_utils.mime_types.getMimeTypeOrAny
import io.ktor.client.HttpClient
import io.ktor.client.content.*
import io.ktor.client.plugins.onUpload
import io.ktor.client.request.forms.formData
import io.ktor.client.request.forms.submitFormWithBinaryData
@@ -18,7 +19,7 @@ internal val MPPFile.mimeType: String
actual suspend fun HttpClient.tempUpload(
fullTempUploadDraftPath: String,
file: MPPFile,
onUpload: OnUploadCallback
onUpload: ProgressListener
): TemporalFileId {
val inputProvider = file.inputProvider()
val fileId = submitFormWithBinaryData(

View File

@@ -3,6 +3,7 @@ package dev.inmo.micro_utils.ktor.client
import dev.inmo.micro_utils.common.MPPFile
import dev.inmo.micro_utils.common.Progress
import io.ktor.client.HttpClient
import io.ktor.client.content.*
import io.ktor.client.engine.mergeHeaders
import io.ktor.client.plugins.onUpload
import io.ktor.client.request.HttpRequestBuilder
@@ -39,7 +40,7 @@ actual suspend fun <T> HttpClient.uniUpload(
resultDeserializer: DeserializationStrategy<T>,
headers: Headers,
stringFormat: StringFormat,
onUpload: OnUploadCallback
onUpload: ProgressListener
): T? {
val withBinary = data.values.any { it is MPPFile || it is UniUploadFileInfo }
@@ -75,9 +76,7 @@ actual suspend fun <T> HttpClient.uniUpload(
headers {
appendAll(headers)
}
onUpload { bytesSentTotal, contentLength ->
onUpload(bytesSentTotal, contentLength)
}
onUpload(onUpload)
}
val response = if (withBinary) {

View File

@@ -1,11 +1,10 @@
package dev.inmo.micro_utils.ktor.common
import io.ktor.utils.io.core.Input
import io.ktor.utils.io.core.copyTo
import io.ktor.utils.io.streams.asOutput
import io.ktor.utils.io.core.*
import kotlinx.io.asSink
import java.io.File
import java.io.InputStream
import java.util.UUID
import kotlin.io.use
fun Input.downloadToTempFile(
fileName: String = UUID.randomUUID().toString(),
@@ -16,8 +15,8 @@ fun Input.downloadToTempFile(
fileExtension,
folder
).apply {
outputStream().use {
copyTo(it.asOutput())
outputStream().use { output ->
this@downloadToTempFile.transferTo(output.asSink())
}
deleteOnExit()
}

View File

@@ -4,14 +4,15 @@ import com.benasher44.uuid.uuid4
import io.ktor.http.content.PartData
import io.ktor.utils.io.copyTo
import io.ktor.utils.io.core.copyTo
import io.ktor.utils.io.jvm.javaio.copyTo
import io.ktor.utils.io.streams.asOutput
import io.ktor.utils.io.jvm.javaio.*
import io.ktor.utils.io.streams.*
import kotlinx.io.asSink
import java.io.File
fun PartData.FileItem.download(target: File) {
provider().use { input ->
target.outputStream().asOutput().use {
input.copyTo(it)
provider().toInputStream().asInput().use { input ->
target.outputStream().use { output ->
input.transferTo(output.asSink())
}
}
}
@@ -26,8 +27,8 @@ fun PartData.FileItem.downloadToTemporalFile(): File {
fun PartData.BinaryItem.download(target: File) {
provider().use { input ->
target.outputStream().use {
input.copyTo(it.asOutput())
target.outputStream().use { output ->
input.transferTo(output.asSink())
}
}
}

View File

@@ -5,14 +5,14 @@ import dev.inmo.micro_utils.ktor.common.*
import io.ktor.http.URLProtocol
import io.ktor.server.application.install
import io.ktor.server.application.pluginOrNull
import io.ktor.server.routing.Route
import io.ktor.server.routing.application
import io.ktor.server.routing.Routing
import io.ktor.server.routing.*
import io.ktor.server.websocket.*
import io.ktor.websocket.send
import kotlinx.coroutines.flow.Flow
import kotlinx.serialization.SerializationStrategy
inline fun <reified T : Any> Route.includeWebsocketHandling(
inline fun <reified T : Any> Routing.includeWebsocketHandling(
suburl: String,
flow: Flow<T>,
protocol: URLProtocol? = null,

View File

@@ -11,12 +11,12 @@ fun <TEngine : ApplicationEngine, TConfiguration : ApplicationEngine.Configurati
engine: ApplicationEngineFactory<TEngine, TConfiguration>,
host: String = "localhost",
port: Int = Random.nextInt(1024, 65535),
additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {},
additionalEngineEnvironmentConfigurator: ApplicationEnvironmentBuilder.() -> Unit = {},
additionalConfigurationConfigurator: TConfiguration.() -> Unit = {},
block: Application.() -> Unit
): TEngine = embeddedServer(
engine,
applicationEngineEnvironment {
applicationEnvironment {
module(block)
connector {
this.host = host
@@ -35,7 +35,7 @@ fun <TEngine : ApplicationEngine, TConfiguration : ApplicationEngine.Configurati
fun createKtorServer(
host: String = "localhost",
port: Int = Random.nextInt(1024, 65535),
additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {},
additionalEngineEnvironmentConfigurator: ApplicationEnvironmentBuilder.() -> Unit = {},
additionalConfigurationConfigurator: CIOApplicationEngine.Configuration.() -> Unit = {},
block: Application.() -> Unit
): CIOApplicationEngine = createKtorServer(
@@ -51,7 +51,7 @@ fun <TEngine : ApplicationEngine, TConfiguration : ApplicationEngine.Configurati
engine: ApplicationEngineFactory<TEngine, TConfiguration>,
host: String = "localhost",
port: Int = Random.nextInt(1024, 65535),
additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {},
additionalEngineEnvironmentConfigurator: ApplicationEnvironmentBuilder.() -> Unit = {},
additionalConfigurationConfigurator: TConfiguration.() -> Unit = {},
configurators: List<KtorApplicationConfigurator>
): TEngine = createKtorServer(
@@ -73,6 +73,6 @@ fun createKtorServer(
host: String = "localhost",
port: Int = Random.nextInt(1024, 65535),
configurators: List<KtorApplicationConfigurator>,
additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {},
additionalEngineEnvironmentConfigurator: ApplicationEnvironmentBuilder.() -> Unit = {},
additionalConfigurationConfigurator: CIOApplicationEngine.Configuration.() -> Unit = {},
): ApplicationEngine = createKtorServer(CIO, host, port, additionalEngineEnvironmentConfigurator, additionalConfigurationConfigurator, configurators)

View File

@@ -14,7 +14,7 @@ import io.ktor.server.application.call
import io.ktor.server.request.receiveMultipart
import io.ktor.server.response.respond
import io.ktor.server.response.respondText
import io.ktor.server.routing.Route
import io.ktor.server.routing.Routing
import io.ktor.server.routing.post
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
@@ -77,7 +77,7 @@ class TemporalFilesRoutingConfigurator(
private val filesFlow = MutableSharedFlow<TemporalFileId>()
val utilizerJob = temporalFilesUtilizer.start(temporalFilesMap, temporalFilesMutex, filesFlow.asSharedFlow())
override fun Route.invoke() {
override fun Routing.invoke() {
post(subpath) {
val multipart = call.receiveMultipart()

View File

@@ -2,7 +2,7 @@ package dev.inmo.micro_utils.ktor.server.configurators
import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator.Element
import io.ktor.server.application.*
import io.ktor.server.routing.Route
import io.ktor.server.routing.Routing
import io.ktor.server.routing.Routing
import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable
@@ -11,7 +11,7 @@ import kotlinx.serialization.Serializable
class ApplicationRoutingConfigurator(
private val elements: List<@Contextual Element>
) : KtorApplicationConfigurator {
fun interface Element { operator fun Route.invoke() }
fun interface Element { operator fun Routing.invoke() }
private val rootInstaller = Element {
elements.forEach {
it.apply { invoke() }