Cleanup and move local serializable classes to top-level

This commit is contained in:
Him188 2021-06-19 18:28:21 +08:00
parent 813ef2b1e6
commit c37457cafb
10 changed files with 72 additions and 70 deletions

View File

@ -47,7 +47,7 @@ public annotation class MiraiInternalFile
*/ */
@Retention(AnnotationRetention.BINARY) @Retention(AnnotationRetention.BINARY)
@RequiresOptIn(level = RequiresOptIn.Level.WARNING) @RequiresOptIn(level = RequiresOptIn.Level.WARNING)
@Target(CLASS, TYPEALIAS, FUNCTION, PROPERTY, FIELD, CONSTRUCTOR) @Target(CLASS, TYPEALIAS, FUNCTION, PROPERTY, FIELD, CONSTRUCTOR, TYPE)
@MustBeDocumented @MustBeDocumented
public annotation class MiraiExperimentalApi( public annotation class MiraiExperimentalApi(
public val message: String = "" public val message: String = ""

View File

@ -107,9 +107,8 @@ public class DeviceInfo(
} }
} }
public fun DeviceInfo.generateDeviceInfoData(): ByteArray {
@Serializable @Serializable
class DevInfo( private class DevInfo(
@ProtoNumber(1) val bootloader: ByteArray, @ProtoNumber(1) val bootloader: ByteArray,
@ProtoNumber(2) val procVersion: ByteArray, @ProtoNumber(2) val procVersion: ByteArray,
@ProtoNumber(3) val codename: ByteArray, @ProtoNumber(3) val codename: ByteArray,
@ -121,6 +120,7 @@ public fun DeviceInfo.generateDeviceInfoData(): ByteArray {
@ProtoNumber(9) val innerVersion: ByteArray @ProtoNumber(9) val innerVersion: ByteArray
) )
public fun DeviceInfo.generateDeviceInfoData(): ByteArray {
return ProtoBuf.encodeToByteArray( return ProtoBuf.encodeToByteArray(
DevInfo.serializer(), DevInfo( DevInfo.serializer(), DevInfo(
bootloader, bootloader,

View File

@ -39,7 +39,7 @@ internal data class MarketFaceImpl internal constructor(
* For refinement * For refinement
*/ */
internal class MarketFaceInternal( internal class MarketFaceInternal(
@JvmField private val delegate: ImMsgBody.MarketFace, private val delegate: ImMsgBody.MarketFace,
) : MarketFace, RefinableMessage { ) : MarketFace, RefinableMessage {
override val name: String get() = delegate.faceName.decodeToString() override val name: String get() = delegate.faceName.decodeToString()
override val id: Int get() = delegate.tabId override val id: Int get() = delegate.tabId

View File

@ -93,7 +93,7 @@ internal abstract class AbstractKeepAliveNetworkHandlerSelector<H : NetworkHandl
} }
return if (current != null) { return if (current != null) {
when (val thisState = current.state) { when (current.state) {
NetworkHandler.State.CLOSED -> { NetworkHandler.State.CLOSED -> {
if (this@AbstractKeepAliveNetworkHandlerSelector.current.compareAndSet(current, null)) { if (this@AbstractKeepAliveNetworkHandlerSelector.current.compareAndSet(current, null)) {
// invalidate the instance and try again. // invalidate the instance and try again.

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2019-2020 Mamoe Technologies and contributors. * Copyright 2019-2021 Mamoe Technologies and contributors.
* *
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
@ -51,7 +51,7 @@ internal class LongConn {
check(resp.subcmd == 1) check(resp.subcmd == 1)
val imgRsp = resp.msgTryupImgRsp.first() val imgRsp = resp.msgTryupImgRsp.first()
if (imgRsp.result != 0) { if (imgRsp.result != 0) {
return Response.Failed(imgRsp.failMsg ?: "") return Response.Failed(imgRsp.failMsg)
} }
return if (imgRsp.boolFileExit) { return if (imgRsp.boolFileExit) {

View File

@ -228,7 +228,7 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
} }
} }
private suspend fun QQAndroidBot.createGroupForBot(groupUin: Long): Group? { internal suspend fun QQAndroidBot.createGroupForBot(groupUin: Long): Group? {
val group = getGroupByUinOrNull(groupUin) val group = getGroupByUinOrNull(groupUin)
if (group != null) { if (group != null) {
return null return null

View File

@ -7,9 +7,6 @@
* https://github.com/mamoe/mirai/blob/master/LICENSE * https://github.com/mamoe/mirai/blob/master/LICENSE
*/ */
@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@file:OptIn(JavaFriendlyAPI::class)
package net.mamoe.mirai.internal.network.protocol.packet.chat.receive package net.mamoe.mirai.internal.network.protocol.packet.chat.receive
import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CancellationException
@ -22,8 +19,11 @@ import net.mamoe.mirai.contact.MemberPermission
import net.mamoe.mirai.contact.NormalMember import net.mamoe.mirai.contact.NormalMember
import net.mamoe.mirai.event.events.* import net.mamoe.mirai.event.events.*
import net.mamoe.mirai.internal.QQAndroidBot import net.mamoe.mirai.internal.QQAndroidBot
import net.mamoe.mirai.internal.contact.* import net.mamoe.mirai.internal.contact.GroupImpl
import net.mamoe.mirai.internal.contact.NormalMemberImpl
import net.mamoe.mirai.internal.contact.checkIsMemberImpl
import net.mamoe.mirai.internal.contact.info.MemberInfoImpl import net.mamoe.mirai.internal.contact.info.MemberInfoImpl
import net.mamoe.mirai.internal.contact.newMember
import net.mamoe.mirai.internal.message.contextualBugReportException import net.mamoe.mirai.internal.message.contextualBugReportException
import net.mamoe.mirai.internal.network.MultiPacketByIterable import net.mamoe.mirai.internal.network.MultiPacketByIterable
import net.mamoe.mirai.internal.network.Packet import net.mamoe.mirai.internal.network.Packet
@ -34,7 +34,8 @@ import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacket
import net.mamoe.mirai.internal.network.protocol.packet.buildResponseUniPacket import net.mamoe.mirai.internal.network.protocol.packet.buildResponseUniPacket
import net.mamoe.mirai.internal.utils._miraiContentToString import net.mamoe.mirai.internal.utils._miraiContentToString
import net.mamoe.mirai.internal.utils.io.serialization.readProtoBuf import net.mamoe.mirai.internal.utils.io.serialization.readProtoBuf
import net.mamoe.mirai.utils.* import net.mamoe.mirai.utils.cast
import net.mamoe.mirai.utils.read
internal object OnlinePushPbPushTransMsg : internal object OnlinePushPbPushTransMsg :

View File

@ -49,7 +49,6 @@ import net.mamoe.mirai.internal.network.protocol.packet.sendAndExpect
import net.mamoe.mirai.internal.utils.* import net.mamoe.mirai.internal.utils.*
import net.mamoe.mirai.internal.utils.io.ProtoBuf import net.mamoe.mirai.internal.utils.io.ProtoBuf
import net.mamoe.mirai.internal.utils.io.serialization.* import net.mamoe.mirai.internal.utils.io.serialization.*
import net.mamoe.mirai.internal.utils.parseToMessageDataList
import net.mamoe.mirai.utils.* import net.mamoe.mirai.utils.*
@ -517,24 +516,14 @@ internal inline fun lambda528(crossinline block: suspend MsgType0x210.(QQAndroid
} }
} }
// uSubMsgType to vProtobuf
// 138 or 139: top_package/akln.java:1568
// 66: top_package/nhz.java:269
/**
* @see MsgType0x210
*/
@OptIn(ExperimentalStdlibApi::class)
internal object Transformers528 : Map<Long, Lambda528> by mapOf(
0x8AL to lambda528 { bot ->
@Serializable @Serializable
class Wording( private class Wording(
@ProtoNumber(1) val itemID: Int = 0, @ProtoNumber(1) val itemID: Int = 0,
@ProtoNumber(2) val itemName: String = "" @ProtoNumber(2) val itemName: String = ""
) : ProtoBuf ) : ProtoBuf
@Serializable @Serializable
class Sub8AMsgInfo( private class Sub8AMsgInfo(
@ProtoNumber(1) val fromUin: Long, @ProtoNumber(1) val fromUin: Long,
@ProtoNumber(2) val botUin: Long, @ProtoNumber(2) val botUin: Long,
@ProtoNumber(3) val srcId: Int, @ProtoNumber(3) val srcId: Int,
@ -549,7 +538,7 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
) : ProtoBuf ) : ProtoBuf
@Serializable @Serializable
class Sub8A( private class Sub8A(
@ProtoNumber(1) val msgInfo: List<Sub8AMsgInfo>, @ProtoNumber(1) val msgInfo: List<Sub8AMsgInfo>,
@ProtoNumber(2) val appId: Int, // 1 @ProtoNumber(2) val appId: Int, // 1
@ProtoNumber(3) val instId: Int, // 1 @ProtoNumber(3) val instId: Int, // 1
@ -557,6 +546,18 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
@ProtoNumber(5) val reserved: ByteArray? = null // struct{ boolean(1), boolean(2) } @ProtoNumber(5) val reserved: ByteArray? = null // struct{ boolean(1), boolean(2) }
) : ProtoBuf ) : ProtoBuf
// uSubMsgType to vProtobuf
// 138 or 139: top_package/akln.java:1568
// 66: top_package/nhz.java:269
/**
* @see MsgType0x210
*/
@OptIn(ExperimentalStdlibApi::class)
internal object Transformers528 : Map<Long, Lambda528> by mapOf(
0x8AL to lambda528 { bot ->
return@lambda528 vProtobuf.loadAs(Sub8A.serializer()).msgInfo.asSequence() return@lambda528 vProtobuf.loadAs(Sub8A.serializer()).msgInfo.asSequence()
.filter { it.botUin == bot.id }.mapNotNull { info -> .filter { it.botUin == bot.id }.mapNotNull { info ->
MessageRecallEvent.FriendRecall( MessageRecallEvent.FriendRecall(

View File

@ -137,7 +137,7 @@ internal class StatSvc {
fun online( fun online(
client: QQAndroidClient, client: QQAndroidClient,
regPushReason: RegPushReason = RegPushReason.appRegister regPushReason: RegPushReason = RegPushReason.appRegister
) = impl("online", client, 1 or 2 or 4, client.onlineStatus, regPushReason) { ) = impl("online", client, 1L or 2 or 4, client.onlineStatus, regPushReason) {
client.bot.components[ContactCacheService].friendListCache?.let { friendListCache: FriendListCache -> client.bot.components[ContactCacheService].friendListCache?.let { friendListCache: FriendListCache ->
iLargeSeq = friendListCache.friendListSeq iLargeSeq = friendListCache.friendListSeq
// timeStamp = friendListCache.timeStamp // timeStamp = friendListCache.timeStamp

View File

@ -126,25 +126,25 @@ internal class MessageSerializationTest {
} }
} }
@Test
fun `test FileMessage serialization`() {
@Serializable @Serializable
data class W( data class W(
val m: FileMessage val m: FileMessage
) )
@Test
fun `test FileMessage serialization`() {
val w = W(FileMessageImpl("id", 2, "name", 1)) val w = W(FileMessageImpl("id", 2, "name", 1))
println(w.serialize(W.serializer())) println(w.serialize(W.serializer()))
assertEquals(w, w.serialize(W.serializer()).deserialize(W.serializer())) assertEquals(w, w.serialize(W.serializer()).deserialize(W.serializer()))
} }
@Test
fun `test polymorphic serialization`() {
@Serializable @Serializable
data class RichWrapper( data class RichWrapper(
val richMessage: RichMessage val richMessage: RichMessage
) )
@Test
fun `test polymorphic serialization`() {
val string = format.encodeToString(RichWrapper.serializer(), RichWrapper(SimpleServiceMessage(1, "content"))) val string = format.encodeToString(RichWrapper.serializer(), RichWrapper(SimpleServiceMessage(1, "content")))
println(string) println(string)
var element = format.parseToJsonElement(string) var element = format.parseToJsonElement(string)
@ -155,13 +155,13 @@ internal class MessageSerializationTest {
assertEquals(1, element["serviceId"]?.cast<JsonPrimitive>()?.content?.toInt()) assertEquals(1, element["serviceId"]?.cast<JsonPrimitive>()?.content?.toInt())
} }
@Test
fun `test ShowImageFlag serialization`() {
@Serializable @Serializable
data class Wrapper( data class Wrapper(
val message: @Polymorphic SingleMessage val message: @Polymorphic SingleMessage
) )
@Test
fun `test ShowImageFlag serialization`() {
val string = format.encodeToString(Wrapper.serializer(), Wrapper(ShowImageFlag)) val string = format.encodeToString(Wrapper.serializer(), Wrapper(ShowImageFlag))
println(string) println(string)
var element = format.parseToJsonElement(string) var element = format.parseToJsonElement(string)