From 950eebea061d62bcb5b5135927e55eaedb5c7686 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Mon, 19 Sep 2022 02:42:10 +0600 Subject: [PATCH] fixes --- .../micro_utils/DefaultAdminsCacheAPI.kt | 58 +++++++++++++------ gradle.properties | 2 +- 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/cache/admins/micro_utils/src/commonMain/kotlin/dev/inmo/tgbotapi/libraries/cache/admins/micro_utils/DefaultAdminsCacheAPI.kt b/cache/admins/micro_utils/src/commonMain/kotlin/dev/inmo/tgbotapi/libraries/cache/admins/micro_utils/DefaultAdminsCacheAPI.kt index 2c51f1d..ee77c23 100644 --- a/cache/admins/micro_utils/src/commonMain/kotlin/dev/inmo/tgbotapi/libraries/cache/admins/micro_utils/DefaultAdminsCacheAPI.kt +++ b/cache/admins/micro_utils/src/commonMain/kotlin/dev/inmo/tgbotapi/libraries/cache/admins/micro_utils/DefaultAdminsCacheAPI.kt @@ -1,31 +1,31 @@ package dev.inmo.tgbotapi.libraries.cache.admins.micro_utils import com.soywiz.klock.DateTime -import dev.inmo.micro_utils.coroutines.actor -import dev.inmo.micro_utils.coroutines.safelyWithoutExceptions +import dev.inmo.micro_utils.coroutines.* import dev.inmo.micro_utils.repos.* import dev.inmo.tgbotapi.libraries.cache.admins.DefaultAdminsCacheAPIRepo import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.types.chat.member.AdministratorChatMember +import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.channels.* import kotlin.coroutines.* private sealed class RepoActions { - abstract val toReturn: Continuation + abstract val deferred: CompletableDeferred } private class GetUpdateDateTimeRepoAction( val chatId: ChatId, - override val toReturn: Continuation + override val deferred: CompletableDeferred ) : RepoActions() private class GetChatAdminsRepoAction( val chatId: ChatId, - override val toReturn: Continuation?> + override val deferred: CompletableDeferred?> ) : RepoActions?>() private class SetChatAdminsRepoAction( val chatId: ChatId, val newValue: List, - override val toReturn: Continuation + override val deferred: CompletableDeferred ) : RepoActions() class DefaultAdminsCacheAPIRepoImpl( @@ -33,32 +33,54 @@ class DefaultAdminsCacheAPIRepoImpl( private val updatesRepo: KeyValueRepo, private val scope: CoroutineScope ) : DefaultAdminsCacheAPIRepo { - private val actor = scope.actor>(Channel.UNLIMITED) { - safelyWithoutExceptions { + private val actor = scope.actorAsync>(Channel.UNLIMITED) { + safelyWithoutExceptions( + { e -> + it.deferred.completeExceptionally(e) + } + ) { when (it) { - is GetUpdateDateTimeRepoAction -> it.toReturn.resume( + is GetUpdateDateTimeRepoAction -> it.deferred.complete( updatesRepo.get(it.chatId) ?.let { DateTime(it.toDouble()) } ) - is GetChatAdminsRepoAction -> it.toReturn.resume(adminsRepo.getAll(it.chatId)) + is GetChatAdminsRepoAction -> it.deferred.complete(adminsRepo.getAll(it.chatId)) is SetChatAdminsRepoAction -> { adminsRepo.clear(it.chatId) adminsRepo.set(it.chatId, it.newValue) updatesRepo.set(it.chatId, DateTime.now().unixMillisLong) - it.toReturn.resume(Unit) + it.deferred.complete(Unit) } } } } - override suspend fun getChatAdmins(chatId: ChatId): List? = suspendCoroutine { - actor.trySend(GetChatAdminsRepoAction(chatId, it)) + override suspend fun getChatAdmins(chatId: ChatId): List? { + val deferred = CompletableDeferred?>() + actor.trySend( + GetChatAdminsRepoAction(chatId, deferred) + ).onFailure { + deferred.completeExceptionally(it ?: IllegalStateException("Something went wrong when tried to add getChatAdmins action")) + } + return deferred.await() } - override suspend fun setChatAdmins(chatId: ChatId, chatMembers: List) = suspendCoroutine { - actor.trySend(SetChatAdminsRepoAction(chatId, chatMembers, it)) + override suspend fun setChatAdmins(chatId: ChatId, chatMembers: List) { + val deferred = CompletableDeferred() + actor.trySend( + SetChatAdminsRepoAction(chatId, chatMembers, deferred) + ).onFailure { + deferred.completeExceptionally(it ?: IllegalStateException("Something went wrong when tried to add setChatAdmins action")) + } + return deferred.await() } - override suspend fun lastUpdate(chatId: ChatId): DateTime? = suspendCoroutine { - actor.trySend(GetUpdateDateTimeRepoAction(chatId, it)) + override suspend fun lastUpdate(chatId: ChatId): DateTime? { + val deferred = CompletableDeferred() + actor.trySend( + GetUpdateDateTimeRepoAction(chatId, deferred) + ).onFailure { + deferred.completeExceptionally(it ?: IllegalStateException("Something went wrong when tried to add lastUpdate action")) + } + return deferred.await() } } diff --git a/gradle.properties b/gradle.properties index 241e820..045c2c7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ kotlin_serialisation_core_version=1.4.0 github_release_plugin_version=2.4.1 -tgbotapi_version=3.2.5 +tgbotapi_version=3.2.6 micro_utils_version=0.12.13 exposed_version=0.39.2 plagubot_version=2.3.2