Fix length estimate for the case Quote + Image

This commit is contained in:
Him188 2020-04-02 16:16:09 +08:00
parent 997261fa3b
commit 993faee554

View File

@ -12,10 +12,7 @@
package net.mamoe.mirai.qqandroid.utils
import net.mamoe.mirai.message.data.Image
import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.PlainText
import net.mamoe.mirai.message.data.QuoteReply
import net.mamoe.mirai.message.data.*
import kotlin.jvm.JvmMultifileClass
import kotlin.jvm.JvmName
@ -40,14 +37,21 @@ internal fun String.chineseLength(upTo: Int): Int {
internal fun MessageChain.estimateLength(upTo: Int = Int.MAX_VALUE): Int =
sumUpTo(upTo) { it, up ->
when (it) {
is QuoteReply -> 700
is Image -> 300
is PlainText -> it.stringValue.chineseLength(up)
else -> it.toString().chineseLength(up)
}
it.estimateLength(up)
}
@OptIn(ExperimentalMessageSource::class)
internal fun SingleMessage.estimateLength(upTo: Int = Int.MAX_VALUE): Int {
return when (this) {
is QuoteReply -> {
700 + source.originalMessage.estimateLength(upTo)
}
is Image -> 300
is PlainText -> stringValue.chineseLength(upTo)
else -> this.toString().chineseLength(upTo)
}
}
internal inline fun <T> Iterable<T>.sumUpTo(upTo: Int, selector: (T, remaining: Int) -> Int): Int {
var sum = 0
for (element in this) {