Browse Source

[core] Add QRCodeLoginListener.onCompleted

Karlatemp 3 years ago
parent
commit
e2d7332ac0

+ 1 - 0
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

+ 1 - 0
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

+ 6 - 0
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 {
         /**
          * 等待扫描中,请在此阶段请扫描二维码.

+ 8 - 0
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) {