mirror of
https://github.com/InsanusMokrassar/TelegramBotApiLibraries.git
synced 2024-12-22 16:47:16 +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
|
package dev.inmo.tgbotapi.libraries.cache.admins.micro_utils
|
||||||
|
|
||||||
import com.soywiz.klock.DateTime
|
import com.soywiz.klock.DateTime
|
||||||
import dev.inmo.micro_utils.coroutines.actor
|
import dev.inmo.micro_utils.coroutines.*
|
||||||
import dev.inmo.micro_utils.coroutines.safelyWithoutExceptions
|
|
||||||
import dev.inmo.micro_utils.repos.*
|
import dev.inmo.micro_utils.repos.*
|
||||||
import dev.inmo.tgbotapi.libraries.cache.admins.DefaultAdminsCacheAPIRepo
|
import dev.inmo.tgbotapi.libraries.cache.admins.DefaultAdminsCacheAPIRepo
|
||||||
import dev.inmo.tgbotapi.types.*
|
import dev.inmo.tgbotapi.types.*
|
||||||
import dev.inmo.tgbotapi.types.chat.member.AdministratorChatMember
|
import dev.inmo.tgbotapi.types.chat.member.AdministratorChatMember
|
||||||
|
import kotlinx.coroutines.CompletableDeferred
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.channels.Channel
|
import kotlinx.coroutines.channels.*
|
||||||
import kotlin.coroutines.*
|
import kotlin.coroutines.*
|
||||||
|
|
||||||
private sealed class RepoActions<T> {
|
private sealed class RepoActions<T> {
|
||||||
abstract val toReturn: Continuation<T>
|
abstract val deferred: CompletableDeferred<T>
|
||||||
}
|
}
|
||||||
private class GetUpdateDateTimeRepoAction(
|
private class GetUpdateDateTimeRepoAction(
|
||||||
val chatId: ChatId,
|
val chatId: ChatId,
|
||||||
override val toReturn: Continuation<DateTime?>
|
override val deferred: CompletableDeferred<DateTime?>
|
||||||
) : RepoActions<DateTime?>()
|
) : RepoActions<DateTime?>()
|
||||||
private class GetChatAdminsRepoAction(
|
private class GetChatAdminsRepoAction(
|
||||||
val chatId: ChatId,
|
val chatId: ChatId,
|
||||||
override val toReturn: Continuation<List<AdministratorChatMember>?>
|
override val deferred: CompletableDeferred<List<AdministratorChatMember>?>
|
||||||
) : RepoActions<List<AdministratorChatMember>?>()
|
) : RepoActions<List<AdministratorChatMember>?>()
|
||||||
private class SetChatAdminsRepoAction(
|
private class SetChatAdminsRepoAction(
|
||||||
val chatId: ChatId,
|
val chatId: ChatId,
|
||||||
val newValue: List<AdministratorChatMember>,
|
val newValue: List<AdministratorChatMember>,
|
||||||
override val toReturn: Continuation<Unit>
|
override val deferred: CompletableDeferred<Unit>
|
||||||
) : RepoActions<Unit>()
|
) : RepoActions<Unit>()
|
||||||
|
|
||||||
class DefaultAdminsCacheAPIRepoImpl(
|
class DefaultAdminsCacheAPIRepoImpl(
|
||||||
@ -33,32 +33,54 @@ class DefaultAdminsCacheAPIRepoImpl(
|
|||||||
private val updatesRepo: KeyValueRepo<ChatId, MilliSeconds>,
|
private val updatesRepo: KeyValueRepo<ChatId, MilliSeconds>,
|
||||||
private val scope: CoroutineScope
|
private val scope: CoroutineScope
|
||||||
) : DefaultAdminsCacheAPIRepo {
|
) : DefaultAdminsCacheAPIRepo {
|
||||||
private val actor = scope.actor<RepoActions<*>>(Channel.UNLIMITED) {
|
private val actor = scope.actorAsync<RepoActions<*>>(Channel.UNLIMITED) {
|
||||||
safelyWithoutExceptions {
|
safelyWithoutExceptions(
|
||||||
|
{ e ->
|
||||||
|
it.deferred.completeExceptionally(e)
|
||||||
|
}
|
||||||
|
) {
|
||||||
when (it) {
|
when (it) {
|
||||||
is GetUpdateDateTimeRepoAction -> it.toReturn.resume(
|
is GetUpdateDateTimeRepoAction -> it.deferred.complete(
|
||||||
updatesRepo.get(it.chatId) ?.let { DateTime(it.toDouble()) }
|
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 -> {
|
is SetChatAdminsRepoAction -> {
|
||||||
adminsRepo.clear(it.chatId)
|
adminsRepo.clear(it.chatId)
|
||||||
adminsRepo.set(it.chatId, it.newValue)
|
adminsRepo.set(it.chatId, it.newValue)
|
||||||
updatesRepo.set(it.chatId, DateTime.now().unixMillisLong)
|
updatesRepo.set(it.chatId, DateTime.now().unixMillisLong)
|
||||||
it.toReturn.resume(Unit)
|
it.deferred.complete(Unit)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun getChatAdmins(chatId: ChatId): List<AdministratorChatMember>? = suspendCoroutine {
|
override suspend fun getChatAdmins(chatId: ChatId): List<AdministratorChatMember>? {
|
||||||
actor.trySend(GetChatAdminsRepoAction(chatId, it))
|
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> {
|
override suspend fun setChatAdmins(chatId: ChatId, chatMembers: List<AdministratorChatMember>) {
|
||||||
actor.trySend(SetChatAdminsRepoAction(chatId, chatMembers, it))
|
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 {
|
override suspend fun lastUpdate(chatId: ChatId): DateTime? {
|
||||||
actor.trySend(GetUpdateDateTimeRepoAction(chatId, it))
|
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
|
github_release_plugin_version=2.4.1
|
||||||
|
|
||||||
tgbotapi_version=3.2.5
|
tgbotapi_version=3.2.6
|
||||||
micro_utils_version=0.12.13
|
micro_utils_version=0.12.13
|
||||||
exposed_version=0.39.2
|
exposed_version=0.39.2
|
||||||
plagubot_version=2.3.2
|
plagubot_version=2.3.2
|
||||||
|
Loading…
Reference in New Issue
Block a user