2019-02-27 03:01:32 +00:00
|
|
|
package com.github.insanusmokrassar.TelegramBotAPI.utils
|
|
|
|
|
2019-05-16 06:58:19 +00:00
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.types.MediaGroupIdentifier
|
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage
|
2019-03-14 07:44:19 +00:00
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.*
|
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdates.*
|
2019-02-27 03:01:32 +00:00
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate
|
2019-05-16 06:58:19 +00:00
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update
|
2019-02-27 03:01:32 +00:00
|
|
|
|
2019-05-16 06:58:19 +00:00
|
|
|
private inline val Pair<MediaGroupMessage, *>.message
|
|
|
|
get() = first
|
|
|
|
|
|
|
|
internal fun List<BaseMessageUpdate>.convertWithMediaGroupUpdates(): List<Update> {
|
|
|
|
val resultUpdates = mutableListOf<Update>()
|
|
|
|
val mediaGroups = mutableMapOf<MediaGroupIdentifier, MutableList<BaseMessageUpdate>>()
|
|
|
|
for (update in this) {
|
|
|
|
val asEditMediaGroupMessage = update.toEditMediaGroupUpdate()
|
|
|
|
if (asEditMediaGroupMessage != null) {
|
|
|
|
resultUpdates.add(asEditMediaGroupMessage)
|
|
|
|
} else {
|
|
|
|
val data = update.data
|
|
|
|
if (data is MediaGroupMessage) {
|
|
|
|
(mediaGroups[data.mediaGroupId] ?: mutableListOf<BaseMessageUpdate>().also { mediaGroups[data.mediaGroupId] = it }).add(update)
|
|
|
|
} else {
|
|
|
|
resultUpdates.add(update)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mediaGroups.values.map {
|
|
|
|
it.toSentMediaGroupUpdate() ?.let { mediaGroupUpdate ->
|
|
|
|
resultUpdates.add(mediaGroupUpdate)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return resultUpdates.sortedBy { it.updateId }
|
|
|
|
}
|
|
|
|
|
|
|
|
internal fun List<BaseMessageUpdate>.toSentMediaGroupUpdate(): SentMediaGroupUpdate? = (this as? SentMediaGroupUpdate) ?: let {
|
|
|
|
if (isEmpty()) {
|
|
|
|
return@let null
|
|
|
|
}
|
2019-03-22 01:07:09 +00:00
|
|
|
val resultList = sortedBy { it.updateId }
|
2019-03-14 23:47:46 +00:00
|
|
|
when (first()) {
|
2019-03-22 01:07:09 +00:00
|
|
|
is MessageUpdate -> MessageMediaGroupUpdate(resultList)
|
|
|
|
is ChannelPostUpdate -> ChannelPostMediaGroupUpdate(resultList)
|
2019-05-16 06:58:19 +00:00
|
|
|
else -> null
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
internal fun BaseMessageUpdate.toEditMediaGroupUpdate(): EditMediaGroupUpdate? = (this as? EditMediaGroupUpdate) ?: let {
|
|
|
|
when (this) {
|
|
|
|
is EditMessageUpdate -> EditMessageMediaGroupUpdate(this)
|
|
|
|
is EditChannelPostUpdate -> EditChannelPostMediaGroupUpdate(this)
|
2019-03-14 07:44:19 +00:00
|
|
|
else -> null
|
|
|
|
}
|
2019-03-14 23:47:46 +00:00
|
|
|
}
|