mirror of
https://github.com/InsanusMokrassar/TelegramBotApiLibraries.git
synced 2024-12-22 16:47:16 +00:00
commit
fd33cbfca3
@ -21,9 +21,7 @@ val Koin.adminsPlugin: AdminsPlugin?
|
|||||||
get() = getOrNull()
|
get() = getOrNull()
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
class AdminsPlugin(
|
class AdminsPlugin : Plugin {
|
||||||
private val chatsSettings: Map<ChatId, AdminsCacheSettings>? = null
|
|
||||||
) : Plugin {
|
|
||||||
@Transient
|
@Transient
|
||||||
private val globalAdminsCacheAPI = MutableStateFlow<AdminsCacheAPI?>(null)
|
private val globalAdminsCacheAPI = MutableStateFlow<AdminsCacheAPI?>(null)
|
||||||
@Transient
|
@Transient
|
||||||
@ -31,15 +29,10 @@ class AdminsPlugin(
|
|||||||
private val mutex = Mutex()
|
private val mutex = Mutex()
|
||||||
|
|
||||||
suspend fun adminsAPI(database: Database): AdminsCacheAPI {
|
suspend fun adminsAPI(database: Database): AdminsCacheAPI {
|
||||||
return when (chatsSettings) {
|
val flow = mutex.withLock {
|
||||||
null -> {
|
databaseToAdminsCacheAPI.getOrPut(database){ MutableStateFlow(null) }
|
||||||
val flow = mutex.withLock {
|
|
||||||
databaseToAdminsCacheAPI.getOrPut(database){ MutableStateFlow(null) }
|
|
||||||
}
|
|
||||||
flow.first { it != null }!!
|
|
||||||
}
|
|
||||||
else -> globalAdminsCacheAPI.first { it != null }!!
|
|
||||||
}
|
}
|
||||||
|
return flow.filterNotNull().first()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun Module.setupDI(database: Database, params: JsonObject) {
|
override fun Module.setupDI(database: Database, params: JsonObject) {
|
||||||
@ -48,17 +41,10 @@ class AdminsPlugin(
|
|||||||
|
|
||||||
override suspend fun BehaviourContext.setupBotPlugin(koin: Koin) {
|
override suspend fun BehaviourContext.setupBotPlugin(koin: Koin) {
|
||||||
with(koin) {
|
with(koin) {
|
||||||
when (chatsSettings) {
|
mutex.withLock {
|
||||||
null -> {
|
val flow = databaseToAdminsCacheAPI.getOrPut(koin.get()){ MutableStateFlow(null) }
|
||||||
mutex.withLock {
|
if (flow.value == null) {
|
||||||
val flow = databaseToAdminsCacheAPI.getOrPut(koin.get()){ MutableStateFlow(null) }
|
flow.value = AdminsCacheAPI(koin.get())
|
||||||
if (flow.value == null) {
|
|
||||||
flow.value = AdminsCacheAPI(koin.get())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else -> mutex.withLock {
|
|
||||||
globalAdminsCacheAPI.value = AdminsCacheAPI(koin.get())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,5 +33,5 @@ dokka_version=1.6.21
|
|||||||
# Project data
|
# Project data
|
||||||
|
|
||||||
group=dev.inmo
|
group=dev.inmo
|
||||||
version=0.4.0
|
version=0.4.1
|
||||||
android_code_version=24
|
android_code_version=25
|
||||||
|
Loading…
Reference in New Issue
Block a user