From ca0d0969b9aff98a6c3c485a11023da22bee786a Mon Sep 17 00:00:00 2001 From: Him188 Date: Sun, 1 Mar 2020 15:46:04 +0800 Subject: [PATCH] Add fast-paths --- .../mamoe/mirai/qqandroid/message/messages.kt | 30 +++++++++---------- .../message/data/MessageChain.kt | 2 ++ 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/messages.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/messages.kt index eb10d5105..b6385c8c9 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/messages.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/messages.kt @@ -334,7 +334,7 @@ internal fun MsgComm.Msg.toMessageChain(): MessageChain { return buildMessageChain(elements.size + 1) { +MessageSourceFromMsg(delegate = this@toMessageChain) elements.joinToMessageChain(this) - }.removeAtAfterQuoteReply().asMessageChain() + }.removeAtIfHasQuoteReply() } // These two functions are not identical, dont combine. @@ -345,23 +345,23 @@ internal fun ImMsgBody.SourceMsg.toMessageChain(): MessageChain { return buildMessageChain(elements.size + 1) { +MessageSourceFromServer(delegate = this@toMessageChain) elements.joinToMessageChain(this) - }.removeAtAfterQuoteReply().asMessageChain() + }.removeAtIfHasQuoteReply() } -private fun MessageChain.removeAtAfterQuoteReply(): List { - var last: Message? = null - return this.filter { message: Message -> - if (message is At) { // 筛除因 QuoteReply 导致的多余的 At - if (last != null || last !is QuoteReply) { - return@filter true +private fun MessageChain.removeAtIfHasQuoteReply(): MessageChain = + this +/* + if (this.any()) { + var removed = false + this.filter { + if (it is At && !removed) { + false + } else { + removed = true + true } - } else if (message is MessageContent) { - return@filter true - } - last = message - return@filter false - } -} + }.asMessageChain() + } else this*/ @UseExperimental(MiraiInternalAPI::class, ExperimentalUnsignedTypes::class, MiraiDebugAPI::class, LowLevelAPI::class) internal fun List.joinToMessageChain(message: MessageChainBuilder) { diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt index 89c716f26..d1970d37c 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt @@ -229,6 +229,8 @@ fun Collection.asMessageChain(): MessageChain = MessageChainImplBySeque @JvmSynthetic fun Iterable.asMessageChain(): MessageChain = MessageChainImplByIterable(this) +inline fun MessageChain.asMessageChain(): MessageChain = this // 避免套娃 + /** * 将 [this] [扁平化后][flatten] 委托为一个 [MessageChain] */