1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2024-11-22 16:23:48 +00:00

executes was replaced

This commit is contained in:
InsanusMokrassar 2020-06-02 13:39:09 +06:00
parent 6073d914d5
commit 1fb2ecf15f
4 changed files with 52 additions and 3 deletions

View File

@ -62,6 +62,7 @@
* All `String` formatting public extensions and functions * All `String` formatting public extensions and functions
* All extensions like `CaptionedInput#toHtmlCaptions` * All extensions like `CaptionedInput#toHtmlCaptions`
* All helper extensions for `List<BaseMessageUpdate>` * All helper extensions for `List<BaseMessageUpdate>`
* All `RequestsExecutor#executeAsync` and `RequestsExecutor#executeUnsafe`
* `TelegramBotAPI-extensions-utils`: * `TelegramBotAPI-extensions-utils`:
* `safely` function was introduced. It is in `PreviewFeature` state currently * `safely` function was introduced. It is in `PreviewFeature` state currently
* `makeLinkToMessage` extensions has been added * `makeLinkToMessage` extensions has been added
@ -76,6 +77,7 @@
* `SentMediaGroupUpdate#chat` * `SentMediaGroupUpdate#chat`
* `SentMediaGroupUpdate#mediaGroupId` * `SentMediaGroupUpdate#mediaGroupId`
* Several `List<MediaGroupMessage>.createResend` extensions were added * Several `List<MediaGroupMessage>.createResend` extensions were added
* `RequestsExecutor#executeAsync` and `RequestsExecutor#executeUnsafe`
### 0.27.4 ### 0.27.4

View File

@ -0,0 +1,45 @@
package com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.shortcuts
import com.github.insanusmokrassar.TelegramBotAPI.bot.RequestsExecutor
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.Request
import com.github.insanusmokrassar.TelegramBotAPI.utils.handleSafely
import kotlinx.coroutines.*
fun <T: Any> RequestsExecutor.executeAsync(
request: Request<T>,
scope: CoroutineScope
): Deferred<T> = scope.async {
handleSafely {
execute(request)
}
}
suspend fun <T: Any> RequestsExecutor.executeAsync(
request: Request<T>
): Deferred<T> = coroutineScope {
executeAsync(request, this)
}
suspend fun <T: Any> RequestsExecutor.executeUnsafe(
request: Request<T>,
retries: Int = 0,
retriesDelay: Long = 1000L,
onAllFailed: (suspend (exceptions: Array<Exception>) -> Unit)? = null
): T? {
var leftRetries = retries
val exceptions = onAllFailed ?.let { mutableListOf<Exception>() }
do {
return handleSafely(
{
leftRetries--
delay(retriesDelay)
exceptions ?.add(it)
null
}
) {
execute(request)
} ?: continue
} while(leftRetries >= 0)
onAllFailed ?.invoke(exceptions ?.toTypedArray() ?: emptyArray())
return null
}

View File

@ -13,8 +13,8 @@ import io.ktor.utils.io.core.Closeable
interface RequestsExecutor : Closeable { interface RequestsExecutor : Closeable {
/** /**
* Unsafe execution of incoming [request]. Can throw almost any exception. So, it is better to use * Unsafe execution of incoming [request]. Can throw almost any exception. So, it is better to use
* something like [com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.executeAsync] or * something like [com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.shortcuts.executeAsync] or
* [com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.executeUnsafe] * [com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.shortcuts.executeUnsafe]
* *
* @throws Exception * @throws Exception
*/ */

View File

@ -7,7 +7,7 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.Response
import com.github.insanusmokrassar.TelegramBotAPI.utils.handleSafely import com.github.insanusmokrassar.TelegramBotAPI.utils.handleSafely
import kotlinx.coroutines.* import kotlinx.coroutines.*
@Deprecated("Will be removed in next major update")
fun <T: Any> RequestsExecutor.executeAsync( fun <T: Any> RequestsExecutor.executeAsync(
request: Request<T>, request: Request<T>,
onFail: (suspend (Response) -> Unit)? = null, onFail: (suspend (Response) -> Unit)? = null,
@ -24,6 +24,7 @@ fun <T: Any> RequestsExecutor.executeAsync(
} }
} }
@Deprecated("Replaced and modified inside of TelegramBotAPI-extensions-utils")
fun <T: Any> RequestsExecutor.executeAsync( fun <T: Any> RequestsExecutor.executeAsync(
request: Request<T>, request: Request<T>,
scope: CoroutineScope = GlobalScope scope: CoroutineScope = GlobalScope
@ -31,6 +32,7 @@ fun <T: Any> RequestsExecutor.executeAsync(
return scope.async { execute(request) } return scope.async { execute(request) }
} }
@Deprecated("Replaced and modified inside of TelegramBotAPI-extensions-utils")
suspend fun <T: Any> RequestsExecutor.executeUnsafe( suspend fun <T: Any> RequestsExecutor.executeUnsafe(
request: Request<T>, request: Request<T>,
retries: Int = 0, retries: Int = 0,