TelegramBotApiLibraries/cache/admins/common/src/commonMain/kotlin/dev/inmo/tgbotapi/libraries/cache/admins/AdminsCacheSettingsAPI.kt

45 lines
1.4 KiB
Kotlin
Raw Normal View History

2021-02-22 12:11:12 +00:00
package dev.inmo.tgbotapi.libraries.cache.admins
import com.soywiz.klock.minutes
import dev.inmo.tgbotapi.types.ChatId
import dev.inmo.tgbotapi.types.Seconds
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.serialization.Serializable
@Serializable
data class AdminsCacheSettings(
val refreshSeconds: Seconds = 10.minutes.seconds.toInt(),
/**
* In case this setting set up to true, will request admins list just from time to time instead of refreshing on
* requests
*/
val disableRequestsRefreshMode: Boolean = false
) {
2022-09-10 12:54:25 +00:00
val refreshOnCacheCalls: Boolean
2021-02-22 12:11:12 +00:00
get() = !disableRequestsRefreshMode
2022-09-10 12:54:25 +00:00
@Deprecated("Renamed", ReplaceWith("refreshOnCacheCalls"))
val refreshOnRequests: Boolean
get() = refreshOnCacheCalls
2021-02-22 12:11:12 +00:00
}
interface AdminsCacheSettingsAPI {
suspend fun getChatSettings(chatId: ChatId): AdminsCacheSettings?
}
interface MutableAdminsCacheSettingsAPI : AdminsCacheSettingsAPI {
val chatSettingsUpdatedFlow: SharedFlow<Pair<ChatId, AdminsCacheSettings>>
suspend fun setChatSettings(chatId: ChatId, settings: AdminsCacheSettings)
}
fun AdminsCacheSettingsAPI.asMutable(): MutableAdminsCacheSettingsAPI? = this as? MutableAdminsCacheSettingsAPI
@Serializable
class StaticAdminsCacheSettingsAPI(
private val settings: Map<ChatId, AdminsCacheSettings>
) : AdminsCacheSettingsAPI {
override suspend fun getChatSettings(chatId: ChatId): AdminsCacheSettings? = settings[chatId]
}