[core] protocol properties public view

This commit is contained in:
Karlatemp 2023-07-11 02:27:37 +08:00
parent 64f4f8c208
commit 405f52d3ad
No known key found for this signature in database
GPG Key ID: BA173CA2B9956C59
6 changed files with 76 additions and 1 deletions

View File

@ -5636,6 +5636,7 @@ public final class net/mamoe/mirai/utils/BotConfiguration$MiraiProtocol : java/l
public static final field ANDROID_WATCH Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
public static final field IPAD Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
public static final field MACOS Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
public final fun isQRLoginSupported ()Z
public static fun valueOf (Ljava/lang/String;)Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
public static fun values ()[Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
}

View File

@ -5636,6 +5636,7 @@ public final class net/mamoe/mirai/utils/BotConfiguration$MiraiProtocol : java/l
public static final field ANDROID_WATCH Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
public static final field IPAD Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
public static final field MACOS Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
public final fun isQRLoginSupported ()Z
public static fun valueOf (Ljava/lang/String;)Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
public static fun values ()[Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
}

View File

@ -20,6 +20,8 @@ import kotlinx.coroutines.SupervisorJob
import kotlinx.serialization.json.Json
import net.mamoe.mirai.Bot
import net.mamoe.mirai.BotFactory
import net.mamoe.mirai.Mirai
import net.mamoe.mirai.auth.BotAuthorization
import net.mamoe.mirai.event.events.BotOfflineEvent
import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext
@ -249,7 +251,19 @@ public open class BotConfiguration : AbstractBotConfiguration() { // open for Ja
* @since 2.8
*/
MACOS,
;
/**
* 当前协议是否支持[二维码登录][BotAuthorization.byQRCode]
*
* @since 2.15.0
*/
public val isQRLoginSupported: Boolean get() = data.isQRLoginSupported
private inline val data: InternalProtocolDataExchange.InternalProtocolData
get() = InternalProtocolDataExchange.instance.of(
this
)
}
/**
@ -562,3 +576,30 @@ internal val deviceInfoStub: (Bot) -> DeviceInfo = {
private val logger by lazy {
MiraiLogger.Factory.create(BotConfiguration::class)
}
/** @since 2.15.0 */
@MiraiInternalApi
public interface InternalProtocolDataExchange {
@MiraiInternalApi
public interface InternalProtocolData {
public val isQRLoginSupported: Boolean
public val mainVersion: String
public val buildVersion: String
public val sdkVersion: String
}
@MiraiInternalApi
public fun of(protocol: BotConfiguration.MiraiProtocol): InternalProtocolData
@MiraiInternalApi
public companion object {
internal val instance by lazy {
Mirai // ensure service loaded
loadService(
InternalProtocolDataExchange::class,
"net.mamoe.mirai.internal.utils.MiraiProtocolInternal\$Exchange"
)
}
}
}

View File

@ -14,6 +14,7 @@ import net.mamoe.mirai.utils.Services
internal object MiraiCoreServices {
@Suppress("RemoveRedundantQualifierName")
@OptIn(InternalEventMechanism::class)
fun registerAll() {
Services.register(
@ -120,5 +121,10 @@ internal object MiraiCoreServices {
"net.mamoe.mirai.auth.DefaultBotAuthorizationFactory",
"net.mamoe.mirai.internal.network.auth.DefaultBotAuthorizationFactoryImpl"
) { net.mamoe.mirai.internal.network.auth.DefaultBotAuthorizationFactoryImpl() }
Services.register(
"net.mamoe.mirai.utils.InternalProtocolDataExchange",
"net.mamoe.mirai.internal.utils.MiraiProtocolInternal\$Exchange"
) { net.mamoe.mirai.internal.utils.MiraiProtocolInternal.Exchange() }
}
}

View File

@ -11,6 +11,8 @@ package net.mamoe.mirai.internal.utils
import net.mamoe.mirai.utils.BotConfiguration.MiraiProtocol
import net.mamoe.mirai.utils.EnumMap
import net.mamoe.mirai.utils.InternalProtocolDataExchange
import net.mamoe.mirai.utils.MiraiInternalApi
import net.mamoe.mirai.utils.toUHexString
internal class MiraiProtocolInternal(
@ -29,7 +31,7 @@ internal class MiraiProtocolInternal(
var supportsQRLogin: Boolean,
// don't change property signatures, used externally.
) {
) : InternalProtocolDataExchange.InternalProtocolData {
internal companion object {
// don't change signature
internal val protocols = EnumMap<MiraiProtocol, MiraiProtocolInternal>(MiraiProtocol::class)
@ -121,4 +123,18 @@ internal class MiraiProtocolInternal(
inline val MiraiProtocol.asInternal: MiraiProtocolInternal get() = get(this)
}
@PublishedApi
internal class Exchange : InternalProtocolDataExchange {
@MiraiInternalApi
override fun of(protocol: MiraiProtocol): InternalProtocolDataExchange.InternalProtocolData {
return get(protocol)
}
}
override val isQRLoginSupported: Boolean get() = supportsQRLogin
override val mainVersion: String get() = ver
override val buildVersion: String get() = buildVer
override val sdkVersion: String get() = sdkVer
}

View File

@ -0,0 +1,10 @@
#
# Copyright 2019-2023 Mamoe Technologies and contributors.
#
# 此源代码的使用受 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.
#
# https://github.com/mamoe/mirai/blob/dev/LICENSE
#
net.mamoe.mirai.internal.utils.MiraiProtocolInternal$Exchange