mirror of
https://github.com/InsanusMokrassar/PlaguPoster.git
synced 2025-11-19 12:45:39 +00:00
fixes
This commit is contained in:
@@ -3,6 +3,21 @@ package dev.inmo.plaguposter.posts.panel
|
||||
import dev.inmo.plaguposter.posts.models.RegisteredPost
|
||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.InlineKeyboardButton
|
||||
|
||||
fun interface PanelButtonBuilder {
|
||||
interface PanelButtonBuilder {
|
||||
val weight: Int
|
||||
suspend fun buildButton(post: RegisteredPost): InlineKeyboardButton?
|
||||
|
||||
class Default(override val weight: Int = 0, private val block: suspend (RegisteredPost) -> InlineKeyboardButton?) : PanelButtonBuilder {
|
||||
override suspend fun buildButton(post: RegisteredPost): InlineKeyboardButton? = block(post)
|
||||
}
|
||||
|
||||
companion object {
|
||||
operator fun invoke(block: suspend (RegisteredPost) -> InlineKeyboardButton?) = Default(
|
||||
block = block
|
||||
)
|
||||
operator fun invoke(weight: Int, block: suspend (RegisteredPost) -> InlineKeyboardButton?) = Default(
|
||||
weight,
|
||||
block
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,14 +5,14 @@ import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineK
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
|
||||
class PanelButtonsAPI(
|
||||
private val preset: List<PanelButtonBuilder>,
|
||||
private val preset: Map<Int, List<PanelButtonBuilder>>,
|
||||
private val rootPanelButtonText: String
|
||||
) {
|
||||
private val _buttons = mutableSetOf<PanelButtonBuilder>().also {
|
||||
it.addAll(preset)
|
||||
private val _buttonsMap = mutableMapOf<Int, MutableList<PanelButtonBuilder>>().also {
|
||||
it.putAll(preset.map { it.key to it.value.toMutableList() })
|
||||
}
|
||||
internal val buttonsBuilders: List<PanelButtonBuilder>
|
||||
get() = _buttons.toList()
|
||||
get() = _buttonsMap.toList().sortedBy { it.first }.flatMap { it.second }
|
||||
internal val forceRefreshFlow = MutableSharedFlow<PostId>()
|
||||
|
||||
val RootPanelButtonBuilder = PanelButtonBuilder {
|
||||
@@ -22,8 +22,13 @@ class PanelButtonsAPI(
|
||||
)
|
||||
}
|
||||
|
||||
fun add(button: PanelButtonBuilder) = _buttons.add(button)
|
||||
fun remove(button: PanelButtonBuilder) = _buttons.remove(button)
|
||||
fun add(button: PanelButtonBuilder, weight: Int = button.weight) = _buttonsMap.getOrPut(weight) { mutableListOf() }.add(button)
|
||||
fun remove(button: PanelButtonBuilder) = _buttonsMap.mapNotNull { (k, v) ->
|
||||
v.remove(button)
|
||||
k.takeIf { v.isEmpty() }
|
||||
}.forEach {
|
||||
_buttonsMap.remove(it)
|
||||
}
|
||||
suspend fun forceRefresh(postId: PostId) {
|
||||
forceRefreshFlow.emit(postId)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user