From eb80a4836b80904cf6d323afe6137eb7e3e80746 Mon Sep 17 00:00:00 2001
From: Him188 <Him188@mamoe.net>
Date: Mon, 26 Apr 2021 20:06:49 +0800
Subject: [PATCH] Remove all unstable kotlin.Duration usages

---
 buildSrc/src/main/kotlin/ProjectConfigure.kt        |  1 -
 .../src/commonMain/kotlin/contact/NormalMember.kt   |  2 +-
 .../network/components/BotOfflineEventMonitor.kt    |  8 ++++----
 .../network/components/KeyRefreshProcessor.kt       | 13 ++++++-------
 4 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/buildSrc/src/main/kotlin/ProjectConfigure.kt b/buildSrc/src/main/kotlin/ProjectConfigure.kt
index ca98ff9e1..e41a22e01 100644
--- a/buildSrc/src/main/kotlin/ProjectConfigure.kt
+++ b/buildSrc/src/main/kotlin/ProjectConfigure.kt
@@ -125,7 +125,6 @@ val experimentalAnnotations = arrayOf(
     "kotlin.RequiresOptIn",
     "kotlin.contracts.ExperimentalContracts",
     "kotlin.experimental.ExperimentalTypeInference",
-    "kotlin.ExperimentalUnsignedTypes",
 
     "kotlinx.serialization.ExperimentalSerializationApi",
 
diff --git a/mirai-core-api/src/commonMain/kotlin/contact/NormalMember.kt b/mirai-core-api/src/commonMain/kotlin/contact/NormalMember.kt
index ffc87b3d6..f166ec59a 100644
--- a/mirai-core-api/src/commonMain/kotlin/contact/NormalMember.kt
+++ b/mirai-core-api/src/commonMain/kotlin/contact/NormalMember.kt
@@ -186,7 +186,7 @@ public val UserOrBot.nameCardOrNick: String
 public suspend inline fun NormalMember.mute(duration: Duration) {
     require(duration.toDouble(DurationUnit.DAYS) <= 30) { "duration must be at most 1 month" }
     require(duration.toDouble(DurationUnit.SECONDS) > 0) { "duration must be greater than 0 second" }
-    this.mute(duration.toLong(DurationUnit.SECONDS).toInt())
+    this.mute(duration.toDouble(DurationUnit.SECONDS).toInt())
 }
 
 @OptIn(ExperimentalTime::class)
diff --git a/mirai-core/src/commonMain/kotlin/network/components/BotOfflineEventMonitor.kt b/mirai-core/src/commonMain/kotlin/network/components/BotOfflineEventMonitor.kt
index 3aac0c109..387075b34 100644
--- a/mirai-core/src/commonMain/kotlin/network/components/BotOfflineEventMonitor.kt
+++ b/mirai-core/src/commonMain/kotlin/network/components/BotOfflineEventMonitor.kt
@@ -25,8 +25,8 @@ import net.mamoe.mirai.internal.network.handler.NetworkHandler
 import net.mamoe.mirai.internal.network.handler.NetworkHandler.State
 import net.mamoe.mirai.utils.castOrNull
 import net.mamoe.mirai.utils.info
-import net.mamoe.mirai.utils.toHumanReadableString
-import kotlin.time.measureTime
+import net.mamoe.mirai.utils.millisToHumanReadableString
+import kotlin.system.measureTimeMillis
 
 /**
  * Handles [BotOfflineEvent]
@@ -92,14 +92,14 @@ internal class BotOfflineEventMonitorImpl : BotOfflineEventMonitor {
         if (event.reconnect) {
             bot.launch {
                 val success: Boolean
-                val time = measureTime {
+                val time = measureTimeMillis {
                     success = kotlin.runCatching {
                         bot.login() // selector will create new NH to replace the old, closed one, with some further comprehensive considerations. For example, limitation for attempts.
                     }.isSuccess
                 }
 
                 if (success) {
-                    bot.logger.info { "Reconnected successfully in ${time.toHumanReadableString()}." }
+                    bot.logger.info { "Reconnected successfully in ${time.millisToHumanReadableString()}." }
                 }
             }
         }
diff --git a/mirai-core/src/commonMain/kotlin/network/components/KeyRefreshProcessor.kt b/mirai-core/src/commonMain/kotlin/network/components/KeyRefreshProcessor.kt
index 7e227bbc3..d1370e0ec 100644
--- a/mirai-core/src/commonMain/kotlin/network/components/KeyRefreshProcessor.kt
+++ b/mirai-core/src/commonMain/kotlin/network/components/KeyRefreshProcessor.kt
@@ -17,9 +17,8 @@ import net.mamoe.mirai.internal.network.protocol.packet.sendAndExpect
 import net.mamoe.mirai.network.LoginFailedException
 import net.mamoe.mirai.utils.MiraiLogger
 import net.mamoe.mirai.utils.info
-import net.mamoe.mirai.utils.toHumanReadableString
-import kotlin.time.minutes
-import kotlin.time.seconds
+import net.mamoe.mirai.utils.millisToHumanReadableString
+import net.mamoe.mirai.utils.minutesToMillis
 
 internal interface KeyRefreshProcessor {
     suspend fun keyRefreshLoop(handler: NetworkHandler)
@@ -39,8 +38,8 @@ internal class KeyRefreshProcessorImpl(
             while (isActive) {
                 client.wLoginSigInfo.vKey.run {
                     //由过期时间最短的且不会被skey更换更新的vkey计算重新登录的时间
-                    val delay = (expireTime - creationTime).toInt().seconds - 5.minutes
-                    logger.info { "Scheduled refresh login session in ${delay.toHumanReadableString()}." }
+                    val delay = (expireTime - creationTime).times(1000) - 5.minutesToMillis
+                    logger.info { "Scheduled refresh login session in ${delay.millisToHumanReadableString()}." }
                     delay(delay)
                 }
                 runCatching {
@@ -53,8 +52,8 @@ internal class KeyRefreshProcessorImpl(
         launch(CoroutineName("Key Refresh Scheduler")) {
             while (isActive) {
                 client.wLoginSigInfo.sKey.run {
-                    val delay = (expireTime - creationTime).seconds - 5.minutes
-                    logger.info { "Scheduled key refresh in ${delay.toHumanReadableString()}." }
+                    val delay = (expireTime - creationTime).times(1000) - 5.minutesToMillis
+                    logger.info { "Scheduled key refresh in ${delay.millisToHumanReadableString()}." }
                     delay(delay)
                 }
                 runCatching {