From ba2c4cbb30d2c315a0303aab91de256dd5ca86cd Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 17 Mar 2020 17:16:14 +0600 Subject: [PATCH] UpdatesFilter now is interface --- CHANGELOG.md | 4 ++ .../updateshandlers/FlowsUpdatesFilter.kt | 10 ++- .../updateshandlers/UpdatesFilter.kt | 61 +++++++++++++++++-- 3 files changed, 67 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01100cd50f..0442b5d865 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,10 @@ * `UpdateReceiver` was replaced to the package `com.github.insanusmokrassar.TelegramBotAPI.updateshandlers` * All functions inside `com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.UpdatesPolling` are deprecated and will be removed in some soon versions. Their replacement are able inside `TelegramBotAPI-extensions-api` + * `UpdatesFilter` is interface for now + * Previous `UpdatesFilter` class was renamed to `SimpleUpdatesFilter` and for backward compatibility was added + builder function `UpdatesFilter`, which will be removed in near releases + * `FlowsUpdatesFilter` now implements `UpdatesFilter` * `TelegramBotAPI-extensions-api`: * All functions from `com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.UpdatesPolling` now available in package `com.github.insanusmokrassar.TelegramBotAPI.extensions.api.updates.UpdatesPolling` diff --git a/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/updateshandlers/FlowsUpdatesFilter.kt b/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/updateshandlers/FlowsUpdatesFilter.kt index ff86675e05..e57697e4fa 100644 --- a/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/updateshandlers/FlowsUpdatesFilter.kt +++ b/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/updateshandlers/FlowsUpdatesFilter.kt @@ -2,6 +2,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.updateshandlers import com.github.insanusmokrassar.TelegramBotAPI.types.update.* import com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdates.* +import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update import kotlinx.coroutines.channels.BroadcastChannel import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow @@ -11,7 +12,7 @@ private fun BroadcastChannel.createUpdateReceiver(): UpdateReceiver = class FlowsUpdatesFilter( broadcastChannelsSize: Int = Channel.CONFLATED -) { +): UpdatesFilter { private val messageChannel: BroadcastChannel = BroadcastChannel(broadcastChannelsSize) private val messageMediaGroupChannel: BroadcastChannel = BroadcastChannel(broadcastChannelsSize) private val editedMessageChannel: BroadcastChannel = BroadcastChannel(broadcastChannelsSize) @@ -27,7 +28,12 @@ class FlowsUpdatesFilter( private val preCheckoutQueryChannel: BroadcastChannel = BroadcastChannel(broadcastChannelsSize) private val pollChannel: BroadcastChannel = BroadcastChannel(broadcastChannelsSize) - val filter = UpdatesFilter( + override val allowedUpdates: List + get() = filter.allowedUpdates + override val asUpdateReceiver: UpdateReceiver + get() = filter.asUpdateReceiver + + val filter = SimpleUpdatesFilter( messageChannel.createUpdateReceiver(), messageMediaGroupChannel.createUpdateReceiver(), editedMessageChannel.createUpdateReceiver(), diff --git a/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/updateshandlers/UpdatesFilter.kt b/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/updateshandlers/UpdatesFilter.kt index 0732b3562f..e436b81b90 100644 --- a/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/updateshandlers/UpdatesFilter.kt +++ b/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/updateshandlers/UpdatesFilter.kt @@ -6,7 +6,57 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdates import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.UnknownUpdateType import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update -data class UpdatesFilter( +typealias UpdateReceiver = suspend (T) -> Unit + +interface UpdatesFilter { + val asUpdateReceiver: UpdateReceiver + val allowedUpdates: List +} + +@Deprecated( + "It is builder function for SimpleUpdatesFilter", + ReplaceWith( + "SimpleUpdatesFilter", + "com.github.insanusmokrassar.TelegramBotAPI.updateshandlers.SimpleUpdatesFilter" + ) +) +fun UpdatesFilter( + messageCallback: UpdateReceiver? = null, + messageMediaGroupCallback: UpdateReceiver? = null, + editedMessageCallback: UpdateReceiver? = null, + editedMessageMediaGroupCallback: UpdateReceiver? = null, + channelPostCallback: UpdateReceiver? = null, + channelPostMediaGroupCallback: UpdateReceiver? = null, + editedChannelPostCallback: UpdateReceiver? = null, + editedChannelPostMediaGroupCallback: UpdateReceiver? = null, + chosenInlineResultCallback: UpdateReceiver? = null, + inlineQueryCallback: UpdateReceiver? = null, + callbackQueryCallback: UpdateReceiver? = null, + shippingQueryCallback: UpdateReceiver? = null, + preCheckoutQueryCallback: UpdateReceiver? = null, + pollUpdateCallback: UpdateReceiver? = null, + pollAnswerUpdateCallback: UpdateReceiver? = null, + unknownUpdateTypeCallback: UpdateReceiver? = null +) = SimpleUpdatesFilter( + messageCallback, + messageMediaGroupCallback, + editedMessageCallback, + editedMessageMediaGroupCallback, + channelPostCallback, + channelPostMediaGroupCallback, + editedChannelPostCallback, + editedChannelPostMediaGroupCallback, + chosenInlineResultCallback, + inlineQueryCallback, + callbackQueryCallback, + shippingQueryCallback, + preCheckoutQueryCallback, + pollUpdateCallback, + pollAnswerUpdateCallback, + unknownUpdateTypeCallback +) + +data class SimpleUpdatesFilter( private val messageCallback: UpdateReceiver? = null, private val messageMediaGroupCallback: UpdateReceiver? = null, private val editedMessageCallback: UpdateReceiver? = null, @@ -23,9 +73,9 @@ data class UpdatesFilter( private val pollUpdateCallback: UpdateReceiver? = null, private val pollAnswerUpdateCallback: UpdateReceiver? = null, private val unknownUpdateTypeCallback: UpdateReceiver? = null -) { - val asUpdateReceiver: UpdateReceiver = this::invoke - val allowedUpdates = listOfNotNull( +) : UpdatesFilter { + override val asUpdateReceiver: UpdateReceiver = this::invoke + override val allowedUpdates = listOfNotNull( (messageCallback ?: messageMediaGroupCallback) ?.let { UPDATE_MESSAGE }, (editedMessageCallback ?: editedMessageMediaGroupCallback) ?.let { UPDATE_EDITED_MESSAGE }, (channelPostCallback ?: channelPostMediaGroupCallback) ?.let { UPDATE_CHANNEL_POST }, @@ -112,5 +162,4 @@ fun createSimpleUpdateFilter( pollUpdateCallback = pollCallback, pollAnswerUpdateCallback = pollAnswerCallback, unknownUpdateTypeCallback = unknownCallback -) -typealias UpdateReceiver = suspend (T) -> Unit \ No newline at end of file +) \ No newline at end of file