Make FlashImage constructable from mirai-core

This commit is contained in:
Him188 2020-04-03 08:44:18 +08:00
parent 5cb93c9fa1
commit 985b0b4ba4
2 changed files with 53 additions and 59 deletions

View File

@ -1,60 +1,13 @@
package net.mamoe.mirai.qqandroid.message
import net.mamoe.mirai.message.data.*
import net.mamoe.mirai.message.data.FriendFlashImage
import net.mamoe.mirai.message.data.GroupFlashImage
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.HummerCommelem
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.ImMsgBody
import net.mamoe.mirai.qqandroid.utils.io.serialization.toByteArray
fun FlashImage(image: Image) = when (image) {
is GroupImage -> GroupFlashImageImpl(image)
is FriendImage -> FriendFlashImageImpl(image)
else -> throw IllegalArgumentException("不支持的图片类型(Please use GroupImage or FriendImage)")
}
fun Image.flash() = FlashImage(this)
internal class GroupFlashImageImpl(
override val image: GroupImage
) : AbstractGroupFlashImage() {
private var stringValue: String? = null
get() {
return field ?: kotlin.run {
field = "[mirai:flash:${image.imageId}]"
field
}
}
override fun toString(): String = stringValue!!
override val length: Int get() = stringValue!!.length
override fun get(index: Int) = stringValue!![index]
override fun subSequence(startIndex: Int, endIndex: Int) = stringValue!!.subSequence(startIndex, endIndex)
override fun compareTo(other: String) = other.compareTo(stringValue!!)
}
internal class FriendFlashImageImpl(
override val image: FriendImage
) : AbstractFriendFlashImage() {
private val stringValue = "flash"
override fun toString() = stringValue
override val length = stringValue.length
override fun get(index: Int) = stringValue.get(index)
override fun subSequence(startIndex: Int, endIndex: Int) = stringValue.subSequence(startIndex, endIndex)
override fun compareTo(other: String) = other.compareTo(stringValue)
}
internal fun GroupFlashImageImpl.toJceData() = ImMsgBody.Elem(
internal fun GroupFlashImage.toJceData() = ImMsgBody.Elem(
commonElem = ImMsgBody.CommonElem(
serviceType = 3,
businessType = 0,
@ -68,7 +21,7 @@ internal fun GroupFlashImageImpl.toJceData() = ImMsgBody.Elem(
)
)
internal fun FriendFlashImageImpl.toJceData() = ImMsgBody.Elem(
internal fun FriendFlashImage.toJceData() = ImMsgBody.Elem(
commonElem = ImMsgBody.CommonElem(
serviceType = 3,
businessType = 0,

View File

@ -1,15 +1,56 @@
@file:Suppress("NOTHING_TO_INLINE", "unused")
package net.mamoe.mirai.message.data
import net.mamoe.mirai.utils.SinceMirai
import kotlin.jvm.JvmSynthetic
/**
* 闪照
*
* @see Image.flash
*/
@SinceMirai("")
sealed class FlashImage : MessageContent {
companion object Key : Message.Key<FlashImage>
companion object Key : Message.Key<FlashImage> {
operator fun invoke(image: Image): FlashImage {
return when (image) {
is GroupImage -> GroupFlashImage(image)
is FriendImage -> FriendFlashImage(image)
else -> throw IllegalArgumentException("不支持的图片类型(Please use GroupImage or FriendImage)")
}
}
}
abstract val image : Image
/**
* 闪照的图片, 不同于普通的图片.
*/
abstract val image: Image
private var stringValue: String? = null
get() {
return field ?: kotlin.run {
field = "[mirai:flash:${image.imageId}]"
field
}
}
override fun toString(): String = stringValue!!
override val length: Int get() = stringValue!!.length
override fun get(index: Int) = stringValue!![index]
override fun subSequence(startIndex: Int, endIndex: Int) = stringValue!!.subSequence(startIndex, endIndex)
override fun compareTo(other: String) = other.compareTo(stringValue!!)
}
abstract class AbstractGroupFlashImage : FlashImage() {
abstract override val image: GroupImage
}
@JvmSynthetic
inline fun Image.flash(): FlashImage = FlashImage(this)
abstract class AbstractFriendFlashImage : FlashImage() {
abstract override val image: FriendImage
}
@JvmSynthetic
inline fun GroupImage.flash(): GroupFlashImage = FlashImage(this) as GroupFlashImage
@JvmSynthetic
inline fun FriendImage.flash(): FriendFlashImage = FlashImage(this) as FriendFlashImage
class GroupFlashImage internal constructor(override val image: GroupImage) : FlashImage()
class FriendFlashImage internal constructor(override val image: FriendImage) : FlashImage()