1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-09-03 23:29:33 +00:00

try to fix cancelling on timeout for long polling

This commit is contained in:
2025-08-06 13:14:22 +06:00
parent 0f7536a21c
commit f975754058
2 changed files with 15 additions and 13 deletions

View File

@@ -2,6 +2,9 @@
## 27.1.2 ## 27.1.2
* `Core`:
* Try to fix cancelling on timeout for long polling
## 27.1.1 ## 27.1.1
* `Version`: * `Version`:

View File

@@ -1,5 +1,6 @@
package dev.inmo.tgbotapi.extensions.utils.updates.retrieving package dev.inmo.tgbotapi.extensions.utils.updates.retrieving
import dev.inmo.kslog.common.logger
import dev.inmo.micro_utils.coroutines.* import dev.inmo.micro_utils.coroutines.*
import dev.inmo.tgbotapi.bot.RequestsExecutor import dev.inmo.tgbotapi.bot.RequestsExecutor
import dev.inmo.tgbotapi.bot.TelegramBot import dev.inmo.tgbotapi.bot.TelegramBot
@@ -107,17 +108,13 @@ fun TelegramBot.longPollingFlow(
lastUpdateIdentifier = update.updateId lastUpdateIdentifier = update.updateId
} }
} }
}.onFailure {
it.causedCancellationException() ?.let {
cancel(it)
}
} }
} }
} }
withContext(contextToWork) { withContext(contextToWork) {
while (isActive) { while (isActive) {
runCatching { runCatchingLogging(logger = Log) {
execute( execute(
GetUpdates( GetUpdates(
offset = lastUpdateIdentifier?.plus(1), offset = lastUpdateIdentifier?.plus(1),
@@ -128,14 +125,16 @@ fun TelegramBot.longPollingFlow(
updatesHandler(originalUpdates) updatesHandler(originalUpdates)
} }
}.onFailure { e -> }.onFailure { e ->
val isHttpRequestTimeoutException = runCatchingLogging(logger = Log) {
e is HttpRequestTimeoutException || (e is CommonBotException && e.cause is HttpRequestTimeoutException) val isHttpRequestTimeoutException =
if (isHttpRequestTimeoutException && autoSkipTimeoutExceptions) { e is HttpRequestTimeoutException || (e is CommonBotException && e.cause is HttpRequestTimeoutException)
return@onFailure if (isHttpRequestTimeoutException && autoSkipTimeoutExceptions) {
} return@onFailure
exceptionsHandler?.invoke(e) }
if (e is RequestException) { exceptionsHandler?.invoke(e)
delay(1000L) if (e is RequestException) {
delay(1000L)
}
} }
} }
} }