45 lines
1.5 KiB
Kotlin
45 lines
1.5 KiB
Kotlin
package dev.inmo.tgbotapi.libraries.cache.admins
|
|
|
|
import com.soywiz.klock.minutes
|
|
import dev.inmo.tgbotapi.types.IdChatIdentifier
|
|
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
|
|
) {
|
|
val refreshOnCacheCalls: Boolean
|
|
get() = !disableRequestsRefreshMode
|
|
@Deprecated("Renamed", ReplaceWith("refreshOnCacheCalls"))
|
|
val refreshOnRequests: Boolean
|
|
get() = refreshOnCacheCalls
|
|
}
|
|
|
|
interface AdminsCacheSettingsAPI {
|
|
suspend fun getChatSettings(chatId: IdChatIdentifier): AdminsCacheSettings?
|
|
}
|
|
|
|
interface MutableAdminsCacheSettingsAPI : AdminsCacheSettingsAPI {
|
|
val chatSettingsUpdatedFlow: SharedFlow<Pair<IdChatIdentifier, AdminsCacheSettings>>
|
|
|
|
suspend fun setChatSettings(chatId: IdChatIdentifier, settings: AdminsCacheSettings)
|
|
}
|
|
|
|
fun AdminsCacheSettingsAPI.asMutable(): MutableAdminsCacheSettingsAPI? = this as? MutableAdminsCacheSettingsAPI
|
|
|
|
@Serializable
|
|
class StaticAdminsCacheSettingsAPI(
|
|
private val settings: Map<IdChatIdentifier, AdminsCacheSettings>
|
|
) : AdminsCacheSettingsAPI {
|
|
override suspend fun getChatSettings(chatId: IdChatIdentifier): AdminsCacheSettings? = settings[chatId]
|
|
}
|
|
|
|
|