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