mirror of
https://github.com/InsanusMokrassar/TelegramBotApiLibraries.git
synced 2024-11-18 06:13:51 +00:00
fixes
This commit is contained in:
parent
7845b7cc5f
commit
950eebea06
@ -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<T> {
|
||||
abstract val toReturn: Continuation<T>
|
||||
abstract val deferred: CompletableDeferred<T>
|
||||
}
|
||||
private class GetUpdateDateTimeRepoAction(
|
||||
val chatId: ChatId,
|
||||
override val toReturn: Continuation<DateTime?>
|
||||
override val deferred: CompletableDeferred<DateTime?>
|
||||
) : RepoActions<DateTime?>()
|
||||
private class GetChatAdminsRepoAction(
|
||||
val chatId: ChatId,
|
||||
override val toReturn: Continuation<List<AdministratorChatMember>?>
|
||||
override val deferred: CompletableDeferred<List<AdministratorChatMember>?>
|
||||
) : RepoActions<List<AdministratorChatMember>?>()
|
||||
private class SetChatAdminsRepoAction(
|
||||
val chatId: ChatId,
|
||||
val newValue: List<AdministratorChatMember>,
|
||||
override val toReturn: Continuation<Unit>
|
||||
override val deferred: CompletableDeferred<Unit>
|
||||
) : RepoActions<Unit>()
|
||||
|
||||
class DefaultAdminsCacheAPIRepoImpl(
|
||||
@ -33,32 +33,54 @@ class DefaultAdminsCacheAPIRepoImpl(
|
||||
private val updatesRepo: KeyValueRepo<ChatId, MilliSeconds>,
|
||||
private val scope: CoroutineScope
|
||||
) : DefaultAdminsCacheAPIRepo {
|
||||
private val actor = scope.actor<RepoActions<*>>(Channel.UNLIMITED) {
|
||||
safelyWithoutExceptions {
|
||||
private val actor = scope.actorAsync<RepoActions<*>>(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<AdministratorChatMember>? = suspendCoroutine {
|
||||
actor.trySend(GetChatAdminsRepoAction(chatId, it))
|
||||
override suspend fun getChatAdmins(chatId: ChatId): List<AdministratorChatMember>? {
|
||||
val deferred = CompletableDeferred<List<AdministratorChatMember>?>()
|
||||
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<AdministratorChatMember>) = suspendCoroutine<Unit> {
|
||||
actor.trySend(SetChatAdminsRepoAction(chatId, chatMembers, it))
|
||||
override suspend fun setChatAdmins(chatId: ChatId, chatMembers: List<AdministratorChatMember>) {
|
||||
val deferred = CompletableDeferred<Unit>()
|
||||
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<DateTime?>()
|
||||
actor.trySend(
|
||||
GetUpdateDateTimeRepoAction(chatId, deferred)
|
||||
).onFailure {
|
||||
deferred.completeExceptionally(it ?: IllegalStateException("Something went wrong when tried to add lastUpdate action"))
|
||||
}
|
||||
return deferred.await()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user