diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b62e8b97a..1732a4dada 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ bot. ### 0.21.1 +* **`KtorCallFactory` must return `HttpStatement` instead of `HttpClientCall`** * `SendMessage` was renamed to `SendTextMessage` and previous `SendMessage` is deprecated * Most part of requests have changed return type. They are listed below:
@@ -80,6 +81,8 @@ bot. * `StickerContent`
+* Version updates: + * Ktor `1.2.6` -> `1.3.0` ## 0.20.0 MPP Migration diff --git a/gradle.properties b/gradle.properties index 6291c88e99..dcebaeb8c3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ kotlin_coroutines_version=1.3.3 kotlin_serialisation_runtime_version=0.14.0 klock_version=1.8.6 uuid_version=0.0.7 -ktor_version=1.2.6 +ktor_version=1.3.0 gradle_bintray_plugin_version=1.8.4 diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/KtorCallFactory.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/KtorCallFactory.kt index e2aa6cfaeb..a4dda435ff 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/KtorCallFactory.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/KtorCallFactory.kt @@ -3,11 +3,12 @@ package com.github.insanusmokrassar.TelegramBotAPI.bot.Ktor import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.Request import io.ktor.client.HttpClient import io.ktor.client.call.HttpClientCall +import io.ktor.client.statement.HttpStatement interface KtorCallFactory { suspend fun prepareCall( client: HttpClient, baseUrl: String, request: Request - ) : HttpClientCall? + ) : HttpStatement? } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/KtorRequestsExecutor.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/KtorRequestsExecutor.kt index c75eb8bf95..ee184dcf90 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/KtorRequestsExecutor.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/KtorRequestsExecutor.kt @@ -11,10 +11,10 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.Response import com.github.insanusmokrassar.TelegramBotAPI.types.RetryAfterError import com.github.insanusmokrassar.TelegramBotAPI.utils.TelegramAPIUrlsKeeper import io.ktor.client.HttpClient -import io.ktor.client.call.HttpClientCall import io.ktor.client.call.receive import io.ktor.client.features.ClientRequestException -import io.ktor.client.response.readText +import io.ktor.client.statement.HttpStatement +import io.ktor.client.statement.readText import kotlinx.coroutines.delay import kotlinx.serialization.json.Json @@ -36,22 +36,20 @@ class KtorRequestsExecutor( override suspend fun execute(request: Request): T { return requestsLimiter.limit { - var call: HttpClientCall? = null + var statement: HttpStatement? = null for (factory in callsFactories) { - call = factory.prepareCall( + statement = factory.prepareCall( client, telegramAPIUrlsKeeper.commonAPIUrl, request ) - if (call != null) { + if (statement != null) { break } } - if (call == null) { - throw IllegalArgumentException("Can't execute request: $request") - } try { - val content = call.response.receive() + val response = statement ?.execute() ?: throw IllegalArgumentException("Can't execute request: $request") + val content = response.receive() val responseObject = jsonFormatter.parse(Response.serializer(), content) (responseObject.result?.let { @@ -64,7 +62,7 @@ class KtorRequestsExecutor( } else { null } - } ?: call.let { + } ?: response.let { throw newRequestException( responseObject, content, diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/base/AbstractRequestCallFactory.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/base/AbstractRequestCallFactory.kt index 4e8fb1f428..ff3a6b0661 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/base/AbstractRequestCallFactory.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/Ktor/base/AbstractRequestCallFactory.kt @@ -4,9 +4,8 @@ import com.github.insanusmokrassar.TelegramBotAPI.bot.Ktor.KtorCallFactory import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.Request import io.ktor.client.HttpClient import io.ktor.client.call.HttpClientCall -import io.ktor.client.call.call -import io.ktor.client.request.accept -import io.ktor.client.request.url +import io.ktor.client.request.* +import io.ktor.client.statement.HttpStatement import io.ktor.http.ContentType import io.ktor.http.HttpMethod import kotlin.collections.set @@ -17,20 +16,23 @@ abstract class AbstractRequestCallFactory : KtorCallFactory { client: HttpClient, baseUrl: String, request: Request - ): HttpClientCall? { + ): HttpStatement? { val preparedBody = prepareCallBody(client, baseUrl, request) ?: return null - return client.call { - url( - methodsCache[request.method()] ?: "$baseUrl/${request.method()}".also { - methodsCache[request.method()] = it - } - ) - method = HttpMethod.Post - accept(ContentType.Application.Json) + return HttpStatement( + HttpRequestBuilder().apply { + url( + methodsCache[request.method()] ?: "$baseUrl/${request.method()}".also { + methodsCache[request.method()] = it + } + ) + method = HttpMethod.Post + accept(ContentType.Application.Json) - body = preparedBody - } + body = preparedBody + }, + client + ) } protected abstract fun prepareCallBody( diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/RequestsExecutor.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/RequestsExecutor.kt index 862cf0d754..285793254b 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/RequestsExecutor.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/RequestsExecutor.kt @@ -1,7 +1,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.bot import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.Request -import kotlinx.io.core.Closeable +import io.ktor.utils.io.core.Closeable interface RequestsExecutor : Closeable { /** diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/UpdatesPoller.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/UpdatesPoller.kt index e7e78cb867..cf53676cb2 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/UpdatesPoller.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/UpdatesPoller.kt @@ -1,8 +1,8 @@ package com.github.insanusmokrassar.TelegramBotAPI.bot +import io.ktor.utils.io.core.Closeable import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers -import kotlinx.io.core.Closeable interface UpdatesPoller : Closeable { fun start(scope: CoroutineScope = CoroutineScope(Dispatchers.Default)) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/exceptions/RequestException.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/exceptions/RequestException.kt index e44d24356e..4ec766ec53 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/exceptions/RequestException.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/exceptions/RequestException.kt @@ -1,7 +1,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.bot.exceptions import com.github.insanusmokrassar.TelegramBotAPI.types.Response -import kotlinx.io.errors.IOException +import kotlinx.io.IOException fun newRequestException( response: Response, @@ -22,10 +22,9 @@ sealed class RequestException constructor( val response: Response, val plainAnswer: String, message: String? = null, - cause: Throwable? = null + override val cause: Throwable? = null ) : IOException( - message ?: "Something went wrong", - cause + message ?: "Something went wrong" ) class CommonRequestException(response: Response, plainAnswer: String, message: String?, cause: Throwable?) : diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StorageFile.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StorageFile.kt index eacc026511..c9fcf6700f 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StorageFile.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StorageFile.kt @@ -1,6 +1,6 @@ package com.github.insanusmokrassar.TelegramBotAPI.utils -import kotlinx.io.core.Input +import io.ktor.utils.io.core.Input import kotlinx.serialization.Serializable @Serializable diff --git a/src/jsMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StorageFile.kt b/src/jsMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StorageFile.kt index 8f236a770f..17bc529db9 100644 --- a/src/jsMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StorageFile.kt +++ b/src/jsMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StorageFile.kt @@ -1,7 +1,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.utils import com.benasher44.uuid.uuid4 -import kotlinx.io.core.Input +import io.ktor.utils.io.core.Input import kotlinx.serialization.Serializable import kotlinx.serialization.Transient diff --git a/src/jvmMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StorageFile.kt b/src/jvmMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StorageFile.kt index 03ea499383..878b534f0c 100644 --- a/src/jvmMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StorageFile.kt +++ b/src/jvmMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StorageFile.kt @@ -1,8 +1,8 @@ package com.github.insanusmokrassar.TelegramBotAPI.utils import com.benasher44.uuid.uuid4 -import kotlinx.io.core.Input -import kotlinx.io.streams.asInput +import io.ktor.utils.io.core.Input +import io.ktor.utils.io.streams.asInput import kotlinx.serialization.Serializable import kotlinx.serialization.Transient import java.io.File