mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-04 15:40:13 +08:00
Serialization support for MusicShare;
Rename MusicShare.type to kind; Rename MusicType to MusicKind;
This commit is contained in:
parent
9d77382b6d
commit
8da048af63
@ -4661,39 +4661,61 @@ public final class net/mamoe/mirai/message/data/MessageUtils {
|
||||
public static final synthetic fun toPlainText (Ljava/lang/String;)Lnet/mamoe/mirai/message/data/PlainText;
|
||||
}
|
||||
|
||||
public final class net/mamoe/mirai/message/data/MusicShare : net/mamoe/mirai/message/data/ConstrainSingle, net/mamoe/mirai/message/data/MessageContent {
|
||||
public static final field Key Lnet/mamoe/mirai/message/data/MusicShare$Key;
|
||||
public fun <init> (Lnet/mamoe/mirai/message/data/MusicType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
public fun <init> (Lnet/mamoe/mirai/message/data/MusicType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
public synthetic fun <init> (Lnet/mamoe/mirai/message/data/MusicType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public fun contentToString ()Ljava/lang/String;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getBrief ()Ljava/lang/String;
|
||||
public final fun getJumpUrl ()Ljava/lang/String;
|
||||
public fun getKey ()Lnet/mamoe/mirai/message/data/MessageKey;
|
||||
public final fun getMusicUrl ()Ljava/lang/String;
|
||||
public final fun getPictureUrl ()Ljava/lang/String;
|
||||
public final fun getSummary ()Ljava/lang/String;
|
||||
public final fun getTitle ()Ljava/lang/String;
|
||||
public final fun getType ()Lnet/mamoe/mirai/message/data/MusicType;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class net/mamoe/mirai/message/data/MusicShare$Key : net/mamoe/mirai/message/data/AbstractPolymorphicMessageKey {
|
||||
}
|
||||
|
||||
public final class net/mamoe/mirai/message/data/MusicType : java/lang/Enum {
|
||||
public static final field MiguMusic Lnet/mamoe/mirai/message/data/MusicType;
|
||||
public static final field NeteaseCloudMusic Lnet/mamoe/mirai/message/data/MusicType;
|
||||
public static final field QQMusic Lnet/mamoe/mirai/message/data/MusicType;
|
||||
public final class net/mamoe/mirai/message/data/MusicKind : java/lang/Enum {
|
||||
public static final field MiguMusic Lnet/mamoe/mirai/message/data/MusicKind;
|
||||
public static final field NeteaseCloudMusic Lnet/mamoe/mirai/message/data/MusicKind;
|
||||
public static final field QQMusic Lnet/mamoe/mirai/message/data/MusicKind;
|
||||
public final fun getAppId ()J
|
||||
public final fun getPackageName ()Ljava/lang/String;
|
||||
public final fun getPlatform ()I
|
||||
public final fun getSdkVersion ()Ljava/lang/String;
|
||||
public final fun getSignature ()Ljava/lang/String;
|
||||
public static fun valueOf (Ljava/lang/String;)Lnet/mamoe/mirai/message/data/MusicType;
|
||||
public static fun values ()[Lnet/mamoe/mirai/message/data/MusicType;
|
||||
public static fun valueOf (Ljava/lang/String;)Lnet/mamoe/mirai/message/data/MusicKind;
|
||||
public static fun values ()[Lnet/mamoe/mirai/message/data/MusicKind;
|
||||
}
|
||||
|
||||
public final class net/mamoe/mirai/message/data/MusicShare : net/mamoe/mirai/message/data/ConstrainSingle, net/mamoe/mirai/message/data/MessageContent {
|
||||
public static final field Key Lnet/mamoe/mirai/message/data/MusicShare$Key;
|
||||
public synthetic fun <init> (ILnet/mamoe/mirai/message/data/MusicKind;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
|
||||
public fun <init> (Lnet/mamoe/mirai/message/data/MusicKind;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
public fun <init> (Lnet/mamoe/mirai/message/data/MusicKind;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
public final fun component1 ()Lnet/mamoe/mirai/message/data/MusicKind;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/lang/String;
|
||||
public final fun component4 ()Ljava/lang/String;
|
||||
public final fun component5 ()Ljava/lang/String;
|
||||
public final fun component6 ()Ljava/lang/String;
|
||||
public final fun component7 ()Ljava/lang/String;
|
||||
public fun contentToString ()Ljava/lang/String;
|
||||
public final fun copy (Lnet/mamoe/mirai/message/data/MusicKind;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lnet/mamoe/mirai/message/data/MusicShare;
|
||||
public static synthetic fun copy$default (Lnet/mamoe/mirai/message/data/MusicShare;Lnet/mamoe/mirai/message/data/MusicKind;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lnet/mamoe/mirai/message/data/MusicShare;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getBrief ()Ljava/lang/String;
|
||||
public final fun getJumpUrl ()Ljava/lang/String;
|
||||
public fun getKey ()Lnet/mamoe/mirai/message/data/MessageKey;
|
||||
public final fun getKind ()Lnet/mamoe/mirai/message/data/MusicKind;
|
||||
public final fun getMusicUrl ()Ljava/lang/String;
|
||||
public final fun getPictureUrl ()Ljava/lang/String;
|
||||
public final fun getSummary ()Ljava/lang/String;
|
||||
public final fun getTitle ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
public static final fun write$Self (Lnet/mamoe/mirai/message/data/MusicShare;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V
|
||||
}
|
||||
|
||||
public final class net/mamoe/mirai/message/data/MusicShare$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lnet/mamoe/mirai/message/data/MusicShare$$serializer;
|
||||
public fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lnet/mamoe/mirai/message/data/MusicShare;
|
||||
public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lnet/mamoe/mirai/message/data/MusicShare;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class net/mamoe/mirai/message/data/MusicShare$Key : net/mamoe/mirai/message/data/AbstractPolymorphicMessageKey {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public abstract class net/mamoe/mirai/message/data/OfflineMessageSource : net/mamoe/mirai/message/data/MessageSource {
|
||||
|
@ -100,6 +100,8 @@ private val builtInSerializersModule by lazy {
|
||||
contextual(VipFace::class, VipFace.serializer())
|
||||
contextual(FlashImage::class, FlashImage.serializer())
|
||||
|
||||
contextual(MusicShare::class, MusicShare.serializer())
|
||||
|
||||
contextual(MessageSource::class, MessageSource.serializer())
|
||||
|
||||
fun PolymorphicModuleBuilder<MessageMetadata>.messageMetadataSubclasses() {
|
||||
@ -127,6 +129,8 @@ private val builtInSerializersModule by lazy {
|
||||
subclass(PokeMessage::class, PokeMessage.serializer())
|
||||
subclass(VipFace::class, VipFace.serializer())
|
||||
subclass(FlashImage::class, FlashImage.serializer())
|
||||
|
||||
subclass(MusicShare::class, MusicShare.serializer())
|
||||
}
|
||||
|
||||
contextual(SingleMessage::class, SingleMessage.Serializer)
|
||||
@ -169,6 +173,8 @@ private val builtInSerializersModule by lazy {
|
||||
}
|
||||
}
|
||||
|
||||
// Tests:
|
||||
// net.mamoe.mirai.internal.message.data.MessageSerializationTest
|
||||
internal object MessageSerializersImpl : MessageSerializers {
|
||||
@Volatile
|
||||
private var serializersModuleField: SerializersModule? = null
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
package net.mamoe.mirai.message.data
|
||||
|
||||
import net.mamoe.mirai.utils.MiraiExperimentalApi
|
||||
import kotlinx.serialization.Serializable
|
||||
import net.mamoe.mirai.utils.MiraiInternalApi
|
||||
import net.mamoe.mirai.utils.safeCast
|
||||
|
||||
@ -20,12 +20,12 @@ import net.mamoe.mirai.utils.safeCast
|
||||
*
|
||||
* @since 2.1
|
||||
*/
|
||||
@MiraiExperimentalApi
|
||||
public class MusicShare @JvmOverloads constructor(
|
||||
@Serializable
|
||||
public data class MusicShare(
|
||||
/**
|
||||
* 音乐应用类型
|
||||
*/
|
||||
public val type: MusicType,
|
||||
public val kind: MusicKind, // 'type' is reserved by serialization
|
||||
/**
|
||||
* 消息卡片标题
|
||||
*/
|
||||
@ -49,59 +49,53 @@ public class MusicShare @JvmOverloads constructor(
|
||||
/**
|
||||
* 在消息列表显示
|
||||
*/
|
||||
public val brief: String = "[分享]$title",
|
||||
public val brief: String,
|
||||
) : MessageContent, ConstrainSingle {
|
||||
|
||||
public constructor(
|
||||
/**
|
||||
* 音乐应用类型
|
||||
*/
|
||||
kind: MusicKind,
|
||||
/**
|
||||
* 消息卡片标题
|
||||
*/
|
||||
title: String,
|
||||
/**
|
||||
* 消息卡片内容
|
||||
*/
|
||||
summary: String,
|
||||
/**
|
||||
* 点击卡片跳转网页 URL
|
||||
*/
|
||||
jumpUrl: String,
|
||||
/**
|
||||
* 消息卡片图片 URL
|
||||
*/
|
||||
pictureUrl: String,
|
||||
/**
|
||||
* 音乐文件 URL
|
||||
*/
|
||||
musicUrl: String,
|
||||
) : this(kind, title, summary, jumpUrl, pictureUrl, musicUrl, "[分享]$title")
|
||||
// kotlinx serialization doesn't support default arguments.
|
||||
|
||||
override val key: MessageKey<*> get() = Key
|
||||
|
||||
override fun contentToString(): String =
|
||||
brief.takeIf { it.isNotBlank() } ?: "[分享]$title" // empty content is not accepted by `sendMessage`
|
||||
|
||||
// MusicShare(type=NeteaseCloudMusic, title='ファッション', summary='rinahamu/Yunomi', brief='', url='http://music.163.com/song/1338728297/?userid=324076307', pictureUrl='http://p2.music.126.net/y19E5SadGUmSR8SZxkrNtw==/109951163785855539.jpg', musicUrl='http://music.163.com/song/media/outer/url?id=1338728297&userid=324076307')
|
||||
override fun toString(): String {
|
||||
return "MusicShare(type=$type, title='$title', summary='$summary', brief='$brief', url='$jumpUrl', pictureUrl='$pictureUrl', musicUrl='$musicUrl')"
|
||||
}
|
||||
|
||||
|
||||
// don't make this class 'data' unless we made it stable.
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
other as MusicShare
|
||||
|
||||
if (type != other.type) return false
|
||||
if (title != other.title) return false
|
||||
if (summary != other.summary) return false
|
||||
if (brief != other.brief) return false
|
||||
if (jumpUrl != other.jumpUrl) return false
|
||||
if (pictureUrl != other.pictureUrl) return false
|
||||
if (musicUrl != other.musicUrl) return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
var result = type.hashCode()
|
||||
result = 31 * result + title.hashCode()
|
||||
result = 31 * result + summary.hashCode()
|
||||
result = 31 * result + brief.hashCode()
|
||||
result = 31 * result + jumpUrl.hashCode()
|
||||
result = 31 * result + pictureUrl.hashCode()
|
||||
result = 31 * result + musicUrl.hashCode()
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
public companion object Key :
|
||||
AbstractPolymorphicMessageKey<MessageContent, MusicShare>(MessageContent, { it.safeCast() })
|
||||
}
|
||||
|
||||
/**
|
||||
* @see MusicShare.kind
|
||||
* @since 2.1
|
||||
*/
|
||||
public enum class MusicType constructor(
|
||||
public enum class MusicKind constructor(
|
||||
@MiraiInternalApi public val appId: Long,
|
||||
@MiraiInternalApi public val platform: Int,
|
||||
@MiraiInternalApi public val sdkVersion: String,
|
||||
|
@ -13,8 +13,8 @@ import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.json.Json
|
||||
import net.mamoe.mirai.message.data.LightApp
|
||||
import net.mamoe.mirai.message.data.MusicKind
|
||||
import net.mamoe.mirai.message.data.MusicShare
|
||||
import net.mamoe.mirai.message.data.MusicType
|
||||
import net.mamoe.mirai.message.data.SingleMessage
|
||||
|
||||
private val json = Json {
|
||||
@ -34,10 +34,10 @@ internal fun LightApp.refine(): SingleMessage {
|
||||
val struct = tryDeserialize() ?: return this
|
||||
struct.run {
|
||||
if (meta.music != null) {
|
||||
MusicType.values().find { it.appId.toInt() == meta.music.appid }?.let { musicType ->
|
||||
MusicKind.values().find { it.appId.toInt() == meta.music.appid }?.let { musicType ->
|
||||
meta.music.run {
|
||||
return MusicShare(
|
||||
type = musicType, title = title, summary = desc,
|
||||
kind = musicType, title = title, summary = desc,
|
||||
jumpUrl = jumpUrl, pictureUrl = preview, musicUrl = musicUrl, brief = prompt
|
||||
)
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ internal object MusicSharePacket :
|
||||
targetKind: MessageSourceKind
|
||||
) = buildOutgoingUniPacket(client) {
|
||||
with(musicShare) {
|
||||
val musicType = musicShare.type
|
||||
val musicType = musicShare.kind
|
||||
writeProtoBuf(
|
||||
OidbSso.OIDBSSOPkg.serializer(),
|
||||
OidbSso.OIDBSSOPkg(
|
||||
|
@ -28,7 +28,7 @@ internal class MessageSerializationTest {
|
||||
private val format
|
||||
get() = Json {
|
||||
serializersModule = module
|
||||
useArrayPolymorphism = false // ?
|
||||
useArrayPolymorphism = false
|
||||
ignoreUnknownKeys = true
|
||||
}
|
||||
|
||||
@ -101,6 +101,7 @@ internal class MessageSerializationTest {
|
||||
LightApp("lightApp"),
|
||||
image.flash(),
|
||||
image.toForwardMessage(1L, "test"),
|
||||
MusicShare(MusicKind.NeteaseCloudMusic, "123", "123", "123", "123", "123", "123")
|
||||
)
|
||||
|
||||
companion object {
|
||||
|
Loading…
Reference in New Issue
Block a user