From 09cb429a597362afa02533cba0db60cb49d29e36 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Mon, 21 Jan 2019 10:22:51 +0800 Subject: [PATCH] optimise Photo#biggest, add MediaGroupContent#toMediaGroupMemberInputMedia --- CHANGELOG | 1 + .../types/InputMedia/DuratedInputMedia.kt | 2 +- .../types/InputMedia/InputMediaAnimation.kt | 2 +- .../types/InputMedia/InputMediaAudio.kt | 2 +- .../types/InputMedia/InputMediaVideo.kt | 2 +- .../TelegramBotAPI/types/files/PhotoSize.kt | 10 ++-------- .../message/content/abstracts/MediaGroupContent.kt | 6 +++++- .../types/message/content/media/PhotoContent.kt | 8 ++++++++ .../types/message/content/media/VideoContent.kt | 12 ++++++++++++ 9 files changed, 32 insertions(+), 13 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 78ceb0e68f..f5b3309789 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -31,3 +31,4 @@ * `MessageContent` now is `ResendableContent` * Now all media sending factories which contains `thumb` have default `null` value * `ChatIdentifier` classes now are `data` classes +* Now `MediaGroupContent` interface contains `toMediaGroupMemberInputMedia` method for easily creating mirror input media diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/DuratedInputMedia.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/DuratedInputMedia.kt index 3ba3c0820a..0162eecf42 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/DuratedInputMedia.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/DuratedInputMedia.kt @@ -1,5 +1,5 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.InputMedia interface DuratedInputMedia : InputMedia { - val duration: Int? + val duration: Long? } \ No newline at end of file diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/InputMediaAnimation.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/InputMediaAnimation.kt index 862e6d482e..9eb5a4446f 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/InputMediaAnimation.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/InputMediaAnimation.kt @@ -20,7 +20,7 @@ data class InputMediaAnimation( @Optional override val height: Int? = null, @Optional - override val duration: Int? = null, + override val duration: Long? = null, @Transient override val thumb: InputFile? = null ) : InputMedia, SizedInputMedia, DuratedInputMedia, ThumbedInputMedia, CaptionedInputMedia { diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/InputMediaAudio.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/InputMediaAudio.kt index ddd786ad5a..f7c47e0fb2 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/InputMediaAudio.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/InputMediaAudio.kt @@ -16,7 +16,7 @@ data class InputMediaAudio( @Optional override val parseMode: ParseMode? = null, @Optional - override val duration: Int? = null, + override val duration: Long? = null, @Optional val performer: String? = null, @Optional diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/InputMediaVideo.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/InputMediaVideo.kt index d1ab35e9cc..b55eeae2a2 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/InputMediaVideo.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/InputMedia/InputMediaVideo.kt @@ -20,7 +20,7 @@ data class InputMediaVideo( @Optional override val height: Int? = null, @Optional - override val duration: Int? = null, + override val duration: Long? = null, @Transient override val thumb: InputFile? = null ) : InputMedia, SizedInputMedia, DuratedInputMedia, ThumbedInputMedia, CaptionedInputMedia, MediaGroupMemberInputMedia { diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/files/PhotoSize.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/files/PhotoSize.kt index c64731427e..963554dc6b 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/files/PhotoSize.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/files/PhotoSize.kt @@ -7,14 +7,8 @@ import kotlinx.serialization.internal.ArrayListSerializer typealias Photo = List -fun Photo.biggest(): PhotoSize? { - var biggest: PhotoSize = firstOrNull() ?: return null - forEach { - if (it.resolution > biggest.resolution) { - biggest = it - } - } - return biggest +fun Photo.biggest(): PhotoSize? = maxBy { + it.resolution } object PhotoSerializer : KSerializer by ArrayListSerializer( diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/abstracts/MediaGroupContent.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/abstracts/MediaGroupContent.kt index 587efd1fea..78d0a8d1af 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/abstracts/MediaGroupContent.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/abstracts/MediaGroupContent.kt @@ -1,3 +1,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstracts -interface MediaGroupContent : MessageContent \ No newline at end of file +import com.github.insanusmokrassar.TelegramBotAPI.types.InputMedia.MediaGroupMemberInputMedia + +interface MediaGroupContent : MessageContent { + fun toMediaGroupMemberInputMedia(): MediaGroupMemberInputMedia +} \ No newline at end of file diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/media/PhotoContent.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/media/PhotoContent.kt index 6a2a562660..3b62698857 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/media/PhotoContent.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/media/PhotoContent.kt @@ -3,6 +3,8 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.message.content.media import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.Request import com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.SendPhoto import com.github.insanusmokrassar.TelegramBotAPI.types.ChatIdentifier +import com.github.insanusmokrassar.TelegramBotAPI.types.InputMedia.InputMediaPhoto +import com.github.insanusmokrassar.TelegramBotAPI.types.InputMedia.MediaGroupMemberInputMedia import com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity.MessageEntity import com.github.insanusmokrassar.TelegramBotAPI.types.MessageIdentifier import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.MarkdownParseMode @@ -32,4 +34,10 @@ data class PhotoContent( replyToMessageId, replyMarkup ) + + override fun toMediaGroupMemberInputMedia(): MediaGroupMemberInputMedia = InputMediaPhoto( + media.biggest() ?.fileId ?: throw IllegalStateException("Can't locate any photo size for this content"), + toMarkdownCaption(), + MarkdownParseMode + ) } diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/media/VideoContent.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/media/VideoContent.kt index efa50707ff..3312be91f0 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/media/VideoContent.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/message/content/media/VideoContent.kt @@ -3,6 +3,8 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.message.content.media import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.Request import com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.SendVideo import com.github.insanusmokrassar.TelegramBotAPI.types.ChatIdentifier +import com.github.insanusmokrassar.TelegramBotAPI.types.InputMedia.InputMediaVideo +import com.github.insanusmokrassar.TelegramBotAPI.types.InputMedia.MediaGroupMemberInputMedia import com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity.MessageEntity import com.github.insanusmokrassar.TelegramBotAPI.types.MessageIdentifier import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.MarkdownParseMode @@ -36,4 +38,14 @@ data class VideoContent( replyToMessageId, replyMarkup ) + + override fun toMediaGroupMemberInputMedia(): MediaGroupMemberInputMedia = InputMediaVideo( + media.fileId, + toMarkdownCaption(), + MarkdownParseMode, + media.width, + media.height, + media.duration, + media.thumb ?.fileId + ) }