From 1d0b42df73aae97f1449f19852a476b5db5cd4d4 Mon Sep 17 00:00:00 2001
From: Him188 <Him188@mamoe.net>
Date: Fri, 31 Jul 2020 16:33:12 +0800
Subject: [PATCH] Cleanup

---
 .../net/mamoe/mirai/qqandroid/contact/util.kt |  1 +
 .../mirai/qqandroid/message/conversions.kt    |  1 +
 .../qqandroid/message/offlineSourceImpl.kt    |  1 +
 .../qqandroid/message/outgoingSourceImpl.kt   |  1 +
 .../kotlin/net.mamoe.mirai/lowLevelApi.kt     | 23 +++++++++++++++----
 .../message/data/CustomMessage.kt             | 17 ++++++--------
 .../utils/internal/ChunkedFlowSession.kt      | 15 +++++++-----
 .../utils/internal/md5.common.kt              | 10 +-------
 .../net/mamoe/mirai/utils/BotConfiguration.kt |  3 ++-
 .../mirai/utils/FileCacheStrategy.jvm.kt      |  6 +----
 .../net/mamoe/mirai/utils/LoginSolver.jvm.kt  |  3 ---
 .../net/mamoe/mirai/utils/SystemDeviceInfo.kt |  4 ++--
 .../internal/DeferredReusableInput.jvm.kt     |  3 ++-
 .../utils/internal/asReusableInput.jvm.kt     | 13 ++++++-----
 .../net/mamoe/mirai/utils/internal/md5.jvm.kt |  5 +---
 .../mirai/utils/internal/retryCatching.jvm.kt | 17 --------------
 16 files changed, 54 insertions(+), 69 deletions(-)
 delete mode 100644 mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/retryCatching.jvm.kt

diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/contact/util.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/contact/util.kt
index 920f62b31..c7661491b 100644
--- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/contact/util.kt
+++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/contact/util.kt
@@ -6,6 +6,7 @@
  *
  * https://github.com/mamoe/mirai/blob/master/LICENSE
  */
+
 @file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
 
 package net.mamoe.mirai.qqandroid.contact
diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/conversions.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/conversions.kt
index ce7a9b5a4..165afc9da 100644
--- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/conversions.kt
+++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/conversions.kt
@@ -6,6 +6,7 @@
  *
  * https://github.com/mamoe/mirai/blob/master/LICENSE
  */
+
 @file:OptIn(LowLevelAPI::class)
 @file:Suppress("EXPERIMENTAL_API_USAGE", "DEPRECATION_ERROR")
 
diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/offlineSourceImpl.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/offlineSourceImpl.kt
index 43e79cd58..9baa3191d 100644
--- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/offlineSourceImpl.kt
+++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/offlineSourceImpl.kt
@@ -6,6 +6,7 @@
  *
  * https://github.com/mamoe/mirai/blob/master/LICENSE
  */
+
 @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_OVERRIDE", "INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
 
 package net.mamoe.mirai.qqandroid.message
diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/outgoingSourceImpl.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/outgoingSourceImpl.kt
index d79de032b..bbf5fa1c8 100644
--- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/outgoingSourceImpl.kt
+++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/outgoingSourceImpl.kt
@@ -6,6 +6,7 @@
  *
  * https://github.com/mamoe/mirai/blob/master/LICENSE
  */
+
 @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_OVERRIDE", "INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
 
 package net.mamoe.mirai.qqandroid.message
diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/lowLevelApi.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/lowLevelApi.kt
index 6bbab1241..e3a13cf07 100644
--- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/lowLevelApi.kt
+++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/lowLevelApi.kt
@@ -14,6 +14,7 @@ import net.mamoe.mirai.contact.Friend
 import net.mamoe.mirai.contact.Group
 import net.mamoe.mirai.data.*
 import net.mamoe.mirai.utils.MiraiExperimentalAPI
+import net.mamoe.mirai.utils.SinceMirai
 import net.mamoe.mirai.utils.WeakRef
 
 /**
@@ -125,7 +126,6 @@ public interface LowLevelBotAPIAccessor {
      * 处理一个账号请求添加机器人为好友的事件
      */
     @LowLevelAPI
-    @MiraiExperimentalAPI
     public suspend fun _lowLevelSolveNewFriendRequestEvent(
         eventId: Long,
         fromId: Long,
@@ -138,7 +138,6 @@ public interface LowLevelBotAPIAccessor {
      * 处理被邀请加入一个群请求事件
      */
     @LowLevelAPI
-    @MiraiExperimentalAPI
     public suspend fun _lowLevelSolveBotInvitedJoinGroupRequestEvent(
         eventId: Long,
         invitorId: Long,
@@ -150,7 +149,7 @@ public interface LowLevelBotAPIAccessor {
      * 处理账号请求加入群事件
      */
     @LowLevelAPI
-    @MiraiExperimentalAPI
+    @SinceMirai("1.2.0")
     public suspend fun _lowLevelSolveMemberJoinRequestEvent(
         eventId: Long,
         fromId: Long,
@@ -165,6 +164,20 @@ public interface LowLevelBotAPIAccessor {
      * 查询语音的下载连接
      */
     @LowLevelAPI
-    @MiraiExperimentalAPI
-    public suspend fun _lowLevelQueryGroupVoiceDownloadUrl(md5: ByteArray, groupId: Long, dstUin: Long): String
+    @SinceMirai("1.2.0")
+    public suspend fun _lowLevelQueryGroupVoiceDownloadUrl(
+        md5: ByteArray,
+        groupId: Long,
+        dstUin: Long
+    ): String
+
+    /**
+     * 查询语音的上传连接
+     */
+    @LowLevelAPI
+    @SinceMirai("1.2.0")
+    public suspend fun _lowLevelUploadVoice(
+        md5: ByteArray,
+        groupId: Long,
+    )
 }
diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/CustomMessage.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/CustomMessage.kt
index b9b1cfe1b..15c27f3c2 100644
--- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/CustomMessage.kt
+++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/CustomMessage.kt
@@ -14,9 +14,7 @@ package net.mamoe.mirai.message.data
 import kotlinx.io.core.*
 import kotlinx.serialization.KSerializer
 import kotlinx.serialization.Serializable
-import kotlinx.serialization.UnstableDefault
 import kotlinx.serialization.json.Json
-import kotlinx.serialization.json.JsonConfiguration
 import kotlinx.serialization.protobuf.ProtoBuf
 import kotlinx.serialization.protobuf.ProtoId
 import net.mamoe.mirai.utils.*
@@ -90,8 +88,8 @@ public sealed class CustomMessage : SingleMessage {
          */
         public abstract fun serializer(): KSerializer<M>
 
-        public override fun dump(message: M): ByteArray = ProtoBuf.dump(serializer(), message)
-        public override fun load(input: ByteArray): M = ProtoBuf.load(serializer(), input)
+        public override fun dump(message: M): ByteArray = ProtoBuf.encodeToByteArray(serializer(), message)
+        public override fun load(input: ByteArray): M = ProtoBuf.decodeFromByteArray(serializer(), input)
     }
 
     /**
@@ -106,11 +104,10 @@ public sealed class CustomMessage : SingleMessage {
          */
         public abstract fun serializer(): KSerializer<M>
 
-        @OptIn(UnstableDefault::class)
-        public open val json: Json = Json(JsonConfiguration.Default)
+        public open val json: Json = Json.Default
 
-        public override fun dump(message: M): ByteArray = json.stringify(serializer(), message).toByteArray()
-        public override fun load(input: ByteArray): M = json.parse(serializer(), String(input))
+        public override fun dump(message: M): ByteArray = json.encodeToString(serializer(), message).toByteArray()
+        public override fun load(input: ByteArray): M = json.decodeFromString(serializer(), String(input))
     }
 
     public companion object Key : Message.Key<CustomMessage> {
@@ -143,7 +140,7 @@ public sealed class CustomMessage : SingleMessage {
                 if (fullData.remaining != length.toLong()) {
                     return null
                 }
-                ProtoBuf.load(CustomMessageFullData.serializer(), fullData.readBytes(length))
+                ProtoBuf.decodeFromByteArray(CustomMessageFullData.serializer(), fullData.readBytes(length))
             }.getOrElse {
                 throw CustomMessageFullDataDeserializeInternalException(it)
             }
@@ -158,7 +155,7 @@ public sealed class CustomMessage : SingleMessage {
         }
 
         internal fun <M : CustomMessage> dump(factory: Factory<M>, message: M): ByteArray = buildPacket {
-            ProtoBuf.dump(
+            ProtoBuf.encodeToByteArray(
                 CustomMessageFullData.serializer(), CustomMessageFullData(
                     miraiVersionFlag = 1,
                     typeName = factory.typeName,
diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/internal/ChunkedFlowSession.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/internal/ChunkedFlowSession.kt
index 3f9f3bf10..1b8c2eaad 100644
--- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/internal/ChunkedFlowSession.kt
+++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/internal/ChunkedFlowSession.kt
@@ -15,16 +15,18 @@ import kotlinx.coroutines.flow.flow
 import kotlinx.coroutines.flow.flowOf
 import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.io.ByteReadChannel
-import kotlinx.io.InputStream
 import kotlinx.io.core.ByteReadPacket
 import kotlinx.io.core.Closeable
 import kotlinx.io.core.Input
 import kotlinx.serialization.InternalSerializationApi
+import net.mamoe.mirai.utils.MiraiExperimentalAPI
+import java.io.InputStream
 import kotlin.jvm.JvmField
 
 
-internal interface ChunkedFlowSession<T> : Closeable {
-    val flow: Flow<T>
+@MiraiExperimentalAPI
+public interface ChunkedFlowSession<T> : Closeable {
+    public val flow: Flow<T>
     override fun close()
 }
 
@@ -39,7 +41,8 @@ internal inline fun <T, R> ChunkedFlowSession<T>.map(crossinline mapper: suspend
 /**
  * 由 [chunkedFlow] 分割得到的区块
  */
-internal class ChunkedInput(
+@MiraiExperimentalAPI
+public class ChunkedInput(
     /**
      * 区块的数据.
      * 由 [ByteArrayPool] 缓存并管理, 只可在 [Flow.collect] 中访问.
@@ -47,13 +50,13 @@ internal class ChunkedInput(
      *
      * **注意**: 不要将他带出 [Flow.collect] 作用域, 否则将造成内存泄露
      */
-    @JvmField val buffer: ByteArray,
+    @JvmField public val buffer: ByteArray,
     @JvmField internal var size: Int
 ) {
     /**
      * [buffer] 的有效大小
      */
-    inline val bufferSize: Int get() = size
+    public val bufferSize: Int get() = size
 }
 
 /**
diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/internal/md5.common.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/internal/md5.common.kt
index 1519fa8e8..80480df23 100644
--- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/internal/md5.common.kt
+++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/internal/md5.common.kt
@@ -4,15 +4,7 @@ package net.mamoe.mirai.utils.internal
 
 import kotlinx.io.pool.DefaultPool
 import kotlinx.io.pool.ObjectPool
-
-internal expect abstract class InputStream {
-    open fun available(): Int
-    open fun close()
-    abstract fun read(): Int
-    open fun read(b: ByteArray): Int
-    open fun read(b: ByteArray, offset: Int, len: Int): Int
-    open fun skip(n: Long): Long
-}
+import java.io.InputStream
 
 internal expect fun InputStream.md5(): ByteArray
 internal expect fun ByteArray.md5(offset: Int = 0, length: Int = this.size - offset): ByteArray
diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/BotConfiguration.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/BotConfiguration.kt
index 61759d23f..eb4ac1573 100644
--- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/BotConfiguration.kt
+++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/BotConfiguration.kt
@@ -6,6 +6,7 @@
  *
  * https://github.com/mamoe/mirai/blob/master/LICENSE
  */
+
 @file:Suppress("unused", "DEPRECATION_ERROR", "EXPOSED_SUPER_CLASS")
 
 package net.mamoe.mirai.utils
@@ -63,7 +64,7 @@ public actual open class BotConfiguration : BotConfigurationBase() { // open for
     @SinceMirai("1.2.0")
     public actual fun loadDeviceInfoJson(json: String) {
         deviceInfo = { context ->
-            this.json.parse(DeviceInfoData.serializer(), json).also { it.context = context }
+            this.json.decodeFromString(DeviceInfoData.serializer(), json).also { it.context = context }
         }
     }
 
diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/FileCacheStrategy.jvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/FileCacheStrategy.jvm.kt
index 56fc1d79c..09d9c999b 100644
--- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/FileCacheStrategy.jvm.kt
+++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/FileCacheStrategy.jvm.kt
@@ -6,13 +6,9 @@ import kotlinx.io.core.*
 import kotlinx.io.streams.asInput
 import kotlinx.io.streams.asOutput
 import net.mamoe.mirai.Bot
-import net.mamoe.mirai.utils.internal.InputStream
 import net.mamoe.mirai.utils.internal.asReusableInput
 import java.awt.image.BufferedImage
-import java.io.ByteArrayOutputStream
-import java.io.File
-import java.io.IOException
-import java.io.OutputStream
+import java.io.*
 import java.net.URL
 import java.security.MessageDigest
 import java.util.*
diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/LoginSolver.jvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/LoginSolver.jvm.kt
index 9ad190eb3..b408bdaa9 100644
--- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/LoginSolver.jvm.kt
+++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/LoginSolver.jvm.kt
@@ -30,9 +30,6 @@ import java.io.RandomAccessFile
 import javax.imageio.ImageIO
 import kotlin.coroutines.CoroutineContext
 
-@Suppress("ACTUAL_WITHOUT_EXPECT")
-internal actual typealias Throws = kotlin.jvm.Throws
-
 /**
  * 自动选择 [SwingSolver] 或 [StandardCharImageLoginSolver]
  */
diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt
index 342a601f1..368f9c179 100644
--- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt
+++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt
@@ -24,10 +24,10 @@ import kotlin.random.nextInt
 public fun File.loadAsDeviceInfo(json: Json, context: Context = ContextImpl()): DeviceInfo {
     if (!this.exists() || this.length() == 0L) {
         return SystemDeviceInfo(context).also {
-            this.writeText(json.stringify(SystemDeviceInfo.serializer(), it))
+            this.writeText(json.encodeToString(SystemDeviceInfo.serializer(), it))
         }
     }
-    return json.parse(DeviceInfoData.serializer(), this.readText()).also {
+    return json.decodeFromString(DeviceInfoData.serializer(), this.readText()).also {
         it.context = context
     }
 }
diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/DeferredReusableInput.jvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/DeferredReusableInput.jvm.kt
index 94fda1183..ca0d12c29 100644
--- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/DeferredReusableInput.jvm.kt
+++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/DeferredReusableInput.jvm.kt
@@ -6,6 +6,7 @@ import kotlinx.coroutines.withContext
 import kotlinx.io.core.Input
 import net.mamoe.mirai.utils.FileCacheStrategy
 import java.awt.image.BufferedImage
+import java.io.InputStream
 import java.net.URL
 
 internal actual class DeferredReusableInput actual constructor(
@@ -44,7 +45,7 @@ internal actual class DeferredReusableInput actual constructor(
         return delegate?.writeTo(out) ?: error("DeferredReusableInput not yet initialized")
     }
 
-    override fun asInput(): Input {
+    override fun asInput(): InputStream {
         return delegate?.asInput() ?: error("DeferredReusableInput not yet initialized")
     }
 
diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/asReusableInput.jvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/asReusableInput.jvm.kt
index 7261c61e4..552d52420 100644
--- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/asReusableInput.jvm.kt
+++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/asReusableInput.jvm.kt
@@ -8,6 +8,7 @@ import kotlinx.io.core.ByteReadPacket
 import kotlinx.io.core.Input
 import kotlinx.io.streams.asInput
 import net.mamoe.mirai.message.data.toLongUnsigned
+import java.io.ByteArrayInputStream
 import java.io.File
 import java.io.InputStream
 
@@ -36,8 +37,8 @@ internal actual fun ByteArray.asReusableInput(): ReusableInput {
             return this@asReusableInput.size.toLongUnsigned()
         }
 
-        override fun asInput(): Input {
-            return ByteReadPacket(this@asReusableInput)
+        override fun asInput(): InputStream {
+            return ByteArrayInputStream(this@asReusableInput)
         }
     }
 }
@@ -62,8 +63,8 @@ internal fun File.asReusableInput(deleteOnClose: Boolean): ReusableInput {
             return inputStream().use { it.copyTo(out) }
         }
 
-        override fun asInput(): Input {
-            return inputStream().asInput()
+        override fun asInput(): InputStream {
+            return inputStream()
         }
     }
 }
@@ -88,8 +89,8 @@ internal fun File.asReusableInput(deleteOnClose: Boolean, md5: ByteArray): Reusa
             return inputStream().use { it.copyTo(out) }
         }
 
-        override fun asInput(): Input {
-            return inputStream().asInput()
+        override fun asInput(): InputStream {
+            return inputStream()
         }
     }
 }
diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/md5.jvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/md5.jvm.kt
index 3b08a5a90..2e4c01c37 100644
--- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/md5.jvm.kt
+++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/md5.jvm.kt
@@ -17,7 +17,4 @@ internal actual fun InputStream.md5(): ByteArray {
         digest.update(buf, 0, len)
     }
     return digest.digest()
-}
-
-@Suppress("ACTUAL_WITHOUT_EXPECT")
-internal actual typealias InputStream = java.io.InputStream
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/retryCatching.jvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/retryCatching.jvm.kt
deleted file mode 100644
index 94664c453..000000000
--- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/retryCatching.jvm.kt
+++ /dev/null
@@ -1,17 +0,0 @@
-package net.mamoe.mirai.utils.internal
-
-private var isAddSuppressedSupported: Boolean = true
-
-internal actual fun Throwable.addSuppressedMirai(e: Throwable) {
-    if (this == e) {
-        return
-    }
-    if (!isAddSuppressedSupported) {
-        return
-    }
-    try {
-        this.addSuppressed(e)
-    } catch (e: Exception) {
-        isAddSuppressedSupported = false
-    }
-}
\ No newline at end of file