diff --git a/mirai-core-api/compatibility-validation/android/api/android.api b/mirai-core-api/compatibility-validation/android/api/android.api index f7e7490c0..9ea913c95 100644 --- a/mirai-core-api/compatibility-validation/android/api/android.api +++ b/mirai-core-api/compatibility-validation/android/api/android.api @@ -205,6 +205,7 @@ public abstract interface class net/mamoe/mirai/auth/QRCodeLoginListener { public fun getQrCodeMargin ()I public fun getQrCodeSize ()I public fun getQrCodeStateUpdateInterval ()J + public fun onCompleted ()V public abstract fun onFetchQRCode (Lnet/mamoe/mirai/Bot;[B)V public fun onIntervalLoop ()V public abstract fun onStateChanged (Lnet/mamoe/mirai/Bot;Lnet/mamoe/mirai/auth/QRCodeLoginListener$State;)V diff --git a/mirai-core-api/compatibility-validation/jvm/api/jvm.api b/mirai-core-api/compatibility-validation/jvm/api/jvm.api index 5bd3dbcbd..3cf6ecb39 100644 --- a/mirai-core-api/compatibility-validation/jvm/api/jvm.api +++ b/mirai-core-api/compatibility-validation/jvm/api/jvm.api @@ -205,6 +205,7 @@ public abstract interface class net/mamoe/mirai/auth/QRCodeLoginListener { public fun getQrCodeMargin ()I public fun getQrCodeSize ()I public fun getQrCodeStateUpdateInterval ()J + public fun onCompleted ()V public abstract fun onFetchQRCode (Lnet/mamoe/mirai/Bot;[B)V public fun onIntervalLoop ()V public abstract fun onStateChanged (Lnet/mamoe/mirai/Bot;Lnet/mamoe/mirai/auth/QRCodeLoginListener$State;)V diff --git a/mirai-core-api/src/commonMain/kotlin/auth/QRCodeLoginListener.kt b/mirai-core-api/src/commonMain/kotlin/auth/QRCodeLoginListener.kt index 1a2245417..2d068233e 100644 --- a/mirai-core-api/src/commonMain/kotlin/auth/QRCodeLoginListener.kt +++ b/mirai-core-api/src/commonMain/kotlin/auth/QRCodeLoginListener.kt @@ -60,6 +60,12 @@ public interface QRCodeLoginListener { public fun onIntervalLoop() { } + /** + * 当二维码登录扫描完毕时执行, 在此执行资源释放 + */ + public fun onCompleted() { + } + public enum class State { /** * 等待扫描中,请在此阶段请扫描二维码. diff --git a/mirai-core/src/commonMain/kotlin/network/components/QRCodeLoginProcessor.kt b/mirai-core/src/commonMain/kotlin/network/components/QRCodeLoginProcessor.kt index 0ac1de817..a9362e3fe 100644 --- a/mirai-core/src/commonMain/kotlin/network/components/QRCodeLoginProcessor.kt +++ b/mirai-core/src/commonMain/kotlin/network/components/QRCodeLoginProcessor.kt @@ -112,6 +112,14 @@ internal class QRCodeLoginProcessorImpl( } override suspend fun process(handler: NetworkHandler, client: QQAndroidClient): QRCodeLoginData { + return try { + process0(handler, client) + } finally { + qrCodeLoginListener.onCompleted() + } + } + + private suspend fun process0(handler: NetworkHandler, client: QQAndroidClient): QRCodeLoginData { main@ while (true) { val qrCodeData = requestQRCode(handler, client) state@ while (true) {