Skip to content

Commit 405f52d

Browse files
committed
[core] protocol properties public view
1 parent 64f4f8c commit 405f52d

File tree

6 files changed

+76
-1
lines changed

6 files changed

+76
-1
lines changed

mirai-core-api/compatibility-validation/android/api/android.api

+1
Original file line numberDiff line numberDiff line change
@@ -5636,6 +5636,7 @@ public final class net/mamoe/mirai/utils/BotConfiguration$MiraiProtocol : java/l
56365636
public static final field ANDROID_WATCH Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
56375637
public static final field IPAD Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
56385638
public static final field MACOS Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
5639+
public final fun isQRLoginSupported ()Z
56395640
public static fun valueOf (Ljava/lang/String;)Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
56405641
public static fun values ()[Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
56415642
}

mirai-core-api/compatibility-validation/jvm/api/jvm.api

+1
Original file line numberDiff line numberDiff line change
@@ -5636,6 +5636,7 @@ public final class net/mamoe/mirai/utils/BotConfiguration$MiraiProtocol : java/l
56365636
public static final field ANDROID_WATCH Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
56375637
public static final field IPAD Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
56385638
public static final field MACOS Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
5639+
public final fun isQRLoginSupported ()Z
56395640
public static fun valueOf (Ljava/lang/String;)Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
56405641
public static fun values ()[Lnet/mamoe/mirai/utils/BotConfiguration$MiraiProtocol;
56415642
}

mirai-core-api/src/commonMain/kotlin/utils/BotConfiguration.kt

+41
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import kotlinx.coroutines.SupervisorJob
2020
import kotlinx.serialization.json.Json
2121
import net.mamoe.mirai.Bot
2222
import net.mamoe.mirai.BotFactory
23+
import net.mamoe.mirai.Mirai
24+
import net.mamoe.mirai.auth.BotAuthorization
2325
import net.mamoe.mirai.event.events.BotOfflineEvent
2426
import kotlin.coroutines.CoroutineContext
2527
import kotlin.coroutines.EmptyCoroutineContext
@@ -249,7 +251,19 @@ public open class BotConfiguration : AbstractBotConfiguration() { // open for Ja
249251
* @since 2.8
250252
*/
251253
MACOS,
254+
;
252255

256+
/**
257+
* 当前协议是否支持[二维码登录][BotAuthorization.byQRCode]
258+
*
259+
* @since 2.15.0
260+
*/
261+
public val isQRLoginSupported: Boolean get() = data.isQRLoginSupported
262+
263+
private inline val data: InternalProtocolDataExchange.InternalProtocolData
264+
get() = InternalProtocolDataExchange.instance.of(
265+
this
266+
)
253267
}
254268

255269
/**
@@ -562,3 +576,30 @@ internal val deviceInfoStub: (Bot) -> DeviceInfo = {
562576
private val logger by lazy {
563577
MiraiLogger.Factory.create(BotConfiguration::class)
564578
}
579+
580+
/** @since 2.15.0 */
581+
@MiraiInternalApi
582+
public interface InternalProtocolDataExchange {
583+
@MiraiInternalApi
584+
public interface InternalProtocolData {
585+
public val isQRLoginSupported: Boolean
586+
public val mainVersion: String
587+
public val buildVersion: String
588+
public val sdkVersion: String
589+
}
590+
591+
@MiraiInternalApi
592+
public fun of(protocol: BotConfiguration.MiraiProtocol): InternalProtocolData
593+
594+
@MiraiInternalApi
595+
public companion object {
596+
internal val instance by lazy {
597+
Mirai // ensure service loaded
598+
599+
loadService(
600+
InternalProtocolDataExchange::class,
601+
"net.mamoe.mirai.internal.utils.MiraiProtocolInternal\$Exchange"
602+
)
603+
}
604+
}
605+
}

mirai-core/src/commonMain/kotlin/utils/MiraiCoreServices.kt

+6
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import net.mamoe.mirai.utils.Services
1414

1515
internal object MiraiCoreServices {
1616

17+
@Suppress("RemoveRedundantQualifierName")
1718
@OptIn(InternalEventMechanism::class)
1819
fun registerAll() {
1920
Services.register(
@@ -120,5 +121,10 @@ internal object MiraiCoreServices {
120121
"net.mamoe.mirai.auth.DefaultBotAuthorizationFactory",
121122
"net.mamoe.mirai.internal.network.auth.DefaultBotAuthorizationFactoryImpl"
122123
) { net.mamoe.mirai.internal.network.auth.DefaultBotAuthorizationFactoryImpl() }
124+
125+
Services.register(
126+
"net.mamoe.mirai.utils.InternalProtocolDataExchange",
127+
"net.mamoe.mirai.internal.utils.MiraiProtocolInternal\$Exchange"
128+
) { net.mamoe.mirai.internal.utils.MiraiProtocolInternal.Exchange() }
123129
}
124130
}

mirai-core/src/commonMain/kotlin/utils/MiraiProtocolInternal.kt

+17-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ package net.mamoe.mirai.internal.utils
1111

1212
import net.mamoe.mirai.utils.BotConfiguration.MiraiProtocol
1313
import net.mamoe.mirai.utils.EnumMap
14+
import net.mamoe.mirai.utils.InternalProtocolDataExchange
15+
import net.mamoe.mirai.utils.MiraiInternalApi
1416
import net.mamoe.mirai.utils.toUHexString
1517

1618
internal class MiraiProtocolInternal(
@@ -29,7 +31,7 @@ internal class MiraiProtocolInternal(
2931
var supportsQRLogin: Boolean,
3032

3133
// don't change property signatures, used externally.
32-
) {
34+
) : InternalProtocolDataExchange.InternalProtocolData {
3335
internal companion object {
3436
// don't change signature
3537
internal val protocols = EnumMap<MiraiProtocol, MiraiProtocolInternal>(MiraiProtocol::class)
@@ -121,4 +123,18 @@ internal class MiraiProtocolInternal(
121123

122124
inline val MiraiProtocol.asInternal: MiraiProtocolInternal get() = get(this)
123125
}
126+
127+
@PublishedApi
128+
internal class Exchange : InternalProtocolDataExchange {
129+
@MiraiInternalApi
130+
override fun of(protocol: MiraiProtocol): InternalProtocolDataExchange.InternalProtocolData {
131+
return get(protocol)
132+
}
133+
}
134+
135+
136+
override val isQRLoginSupported: Boolean get() = supportsQRLogin
137+
override val mainVersion: String get() = ver
138+
override val buildVersion: String get() = buildVer
139+
override val sdkVersion: String get() = sdkVer
124140
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#
2+
# Copyright 2019-2023 Mamoe Technologies and contributors.
3+
#
4+
# 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
5+
# Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
6+
#
7+
# https://github.com/mamoe/mirai/blob/dev/LICENSE
8+
#
9+
10+
net.mamoe.mirai.internal.utils.MiraiProtocolInternal$Exchange

0 commit comments

Comments
 (0)