From 3152e24523a2a8f1646c59d0db96549d9846fe13 Mon Sep 17 00:00:00 2001 From: Karlatemp Date: Thu, 18 Mar 2021 12:30:06 +0800 Subject: [PATCH] Fix operations of RemoteFile (#1104) * Fix operations of RemoteFile * apiDump * Remove duplicate method * Don't setup fileId --- ...binary-compatibility-validator-android.api | 6 ++-- .../api/binary-compatibility-validator.api | 6 ++-- .../src/commonMain/kotlin/utils/RemoteFile.kt | 20 ++++++------- .../commonMain/kotlin/utils/RemoteFileImpl.kt | 28 +++++++++++++------ 4 files changed, 34 insertions(+), 26 deletions(-) diff --git a/binary-compatibility-validator/android/api/binary-compatibility-validator-android.api b/binary-compatibility-validator/android/api/binary-compatibility-validator-android.api index 5b2524b23..134797362 100644 --- a/binary-compatibility-validator/android/api/binary-compatibility-validator-android.api +++ b/binary-compatibility-validator/android/api/binary-compatibility-validator-android.api @@ -5914,11 +5914,11 @@ public abstract interface class net/mamoe/mirai/utils/RemoteFile { public fun toMessage ()Lnet/mamoe/mirai/message/data/FileMessage; public abstract fun toMessage (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun toString ()Ljava/lang/String; - public fun upload (Ljava/io/File;)Z + public fun upload (Ljava/io/File;)Lnet/mamoe/mirai/message/data/FileMessage; public fun upload (Ljava/io/File;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public fun upload (Lnet/mamoe/mirai/utils/ExternalResource;)Z + public fun upload (Lnet/mamoe/mirai/utils/ExternalResource;)Lnet/mamoe/mirai/message/data/FileMessage; public fun upload (Lnet/mamoe/mirai/utils/ExternalResource;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public fun upload (Lnet/mamoe/mirai/utils/ExternalResource;Lnet/mamoe/mirai/utils/RemoteFile$ProgressionCallback;)Z + public fun upload (Lnet/mamoe/mirai/utils/ExternalResource;Lnet/mamoe/mirai/utils/RemoteFile$ProgressionCallback;)Lnet/mamoe/mirai/message/data/FileMessage; public abstract fun upload (Lnet/mamoe/mirai/utils/ExternalResource;Lnet/mamoe/mirai/utils/RemoteFile$ProgressionCallback;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun upload$default (Lnet/mamoe/mirai/utils/RemoteFile;Lnet/mamoe/mirai/utils/ExternalResource;Lnet/mamoe/mirai/utils/RemoteFile$ProgressionCallback;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public fun uploadAndSend (Ljava/io/File;)Lnet/mamoe/mirai/message/MessageReceipt; diff --git a/binary-compatibility-validator/api/binary-compatibility-validator.api b/binary-compatibility-validator/api/binary-compatibility-validator.api index bf5c11d9b..e4d318a6d 100644 --- a/binary-compatibility-validator/api/binary-compatibility-validator.api +++ b/binary-compatibility-validator/api/binary-compatibility-validator.api @@ -5943,11 +5943,11 @@ public abstract interface class net/mamoe/mirai/utils/RemoteFile { public fun toMessage ()Lnet/mamoe/mirai/message/data/FileMessage; public abstract fun toMessage (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun toString ()Ljava/lang/String; - public fun upload (Ljava/io/File;)Z + public fun upload (Ljava/io/File;)Lnet/mamoe/mirai/message/data/FileMessage; public fun upload (Ljava/io/File;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public fun upload (Lnet/mamoe/mirai/utils/ExternalResource;)Z + public fun upload (Lnet/mamoe/mirai/utils/ExternalResource;)Lnet/mamoe/mirai/message/data/FileMessage; public fun upload (Lnet/mamoe/mirai/utils/ExternalResource;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public fun upload (Lnet/mamoe/mirai/utils/ExternalResource;Lnet/mamoe/mirai/utils/RemoteFile$ProgressionCallback;)Z + public fun upload (Lnet/mamoe/mirai/utils/ExternalResource;Lnet/mamoe/mirai/utils/RemoteFile$ProgressionCallback;)Lnet/mamoe/mirai/message/data/FileMessage; public abstract fun upload (Lnet/mamoe/mirai/utils/ExternalResource;Lnet/mamoe/mirai/utils/RemoteFile$ProgressionCallback;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun upload$default (Lnet/mamoe/mirai/utils/RemoteFile;Lnet/mamoe/mirai/utils/ExternalResource;Lnet/mamoe/mirai/utils/RemoteFile$ProgressionCallback;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public fun uploadAndSend (Ljava/io/File;)Lnet/mamoe/mirai/message/MessageReceipt; diff --git a/mirai-core-api/src/commonMain/kotlin/utils/RemoteFile.kt b/mirai-core-api/src/commonMain/kotlin/utils/RemoteFile.kt index 9ac2371f1..44892f9cb 100644 --- a/mirai-core-api/src/commonMain/kotlin/utils/RemoteFile.kt +++ b/mirai-core-api/src/commonMain/kotlin/utils/RemoteFile.kt @@ -21,7 +21,6 @@ import net.mamoe.mirai.contact.FileSupported import net.mamoe.mirai.contact.Group import net.mamoe.mirai.message.MessageReceipt import net.mamoe.mirai.message.data.FileMessage -import net.mamoe.mirai.message.data.sendTo import net.mamoe.mirai.utils.ExternalResource.Companion.toExternalResource import java.io.File @@ -291,11 +290,12 @@ public interface RemoteFile { * 而使用 [resolveById] 或 [listFiles] 获取到的总是覆盖旧文件, 当旧文件已在远程删除时上传一个新文件. * * @param resource 需要上传的文件资源. 无论上传是否成功, 本函数都不会关闭 [resource]. + * @throws IllegalStateException 该文件上传失败时抛出 */ public suspend fun upload( resource: ExternalResource, callback: ProgressionCallback? = null - ): Boolean + ): FileMessage /** * 上传文件到 [RemoteFile] 表示的路径. 当无权上传或其他原因失败时返回 `false`. @@ -308,15 +308,16 @@ public interface RemoteFile { * 而使用 [resolveById] 或 [listFiles] 获取到的总是覆盖旧文件, 当旧文件已在远程删除时上传一个新文件. * * @param resource 需要上传的文件资源. 无论上传是否成功, 本函数都不会关闭 [resource]. + * @throws IllegalStateException 该文件上传失败时抛出 * @see upload */ - public suspend fun upload(resource: ExternalResource): Boolean = upload(resource, null) + public suspend fun upload(resource: ExternalResource): FileMessage = upload(resource, null) /** * 上传文件. * @see upload */ - public suspend fun upload(file: File): Boolean = file.toExternalResource().use { upload(it) } + public suspend fun upload(file: File): FileMessage = file.toExternalResource().use { upload(it) } /** * 上传文件并发送文件消息. @@ -381,9 +382,7 @@ public interface RemoteFile { */ @JvmStatic public suspend fun FileSupported.uploadFile(path: String, resource: ExternalResource): FileMessage { - val file = this.filesRoot.resolve(path) - if (!file.upload(resource)) error("Failed to upload file") - return file.toMessage() ?: error("Failed to create FileMessage.") + return this.filesRoot.resolve(path).upload(resource) } /** @@ -396,11 +395,8 @@ public interface RemoteFile { path: String, resource: ExternalResource ): MessageReceipt { - val file = this.filesRoot.resolve(path) - if (!file.upload(resource)) { - error("Failed to upload file") - } - return file.toMessage()?.sendTo(this) ?: error("Failed to create FileMessage.") + @Suppress("UNCHECKED_CAST") + return this.filesRoot.resolve(path).uploadAndSend(resource) as MessageReceipt } } } \ No newline at end of file diff --git a/mirai-core/src/commonMain/kotlin/utils/RemoteFileImpl.kt b/mirai-core/src/commonMain/kotlin/utils/RemoteFileImpl.kt index 0e4e455b6..f2c7b0892 100644 --- a/mirai-core/src/commonMain/kotlin/utils/RemoteFileImpl.kt +++ b/mirai-core/src/commonMain/kotlin/utils/RemoteFileImpl.kt @@ -416,9 +416,12 @@ internal class RemoteFileImpl( .sendAndExpect(bot).toResult("RemoteFile.mkdir", checkResp = false).getOrThrow().int32RetCode == 0 } - override suspend fun upload(resource: ExternalResource, callback: RemoteFile.ProgressionCallback?): Boolean { - val parent = parent ?: return false - val parentInfo = parent.getFileFolderInfo() ?: return false + private suspend fun upload0( + resource: ExternalResource, + callback: RemoteFile.ProgressionCallback? + ): Oidb0x6d6.UploadFileRspBody? { + val parent = parent ?: return null + val parentInfo = parent.getFileFolderInfo() ?: return null val resp = FileManagement.RequestUpload( client, groupCode = contact.id, @@ -427,7 +430,7 @@ internal class RemoteFileImpl( filename = this.name ).sendAndExpect(bot).toResult("RemoteFile.upload").getOrThrow() if (resp.boolFileExist) { - return true + return resp } val ext = GroupFileUploadExt( @@ -495,12 +498,21 @@ internal class RemoteFileImpl( } ) - return true + return resp + } + + override suspend fun upload( + resource: ExternalResource, + callback: RemoteFile.ProgressionCallback? + ): FileMessage { + val resp = upload0(resource, null) ?: error("Failed to upload file.") + return FileMessageImpl( + name, resp.fileId, resource.size, resp.busId + ) } override suspend fun uploadAndSend(resource: ExternalResource): MessageReceipt { - if (!upload(resource)) error("Failed to upload file.") - return toMessage()?.sendTo(contact) ?: error("Failed to create FileMessage") + return upload(resource).sendTo(contact) } // override suspend fun writeSession(resource: ExternalResource): FileUploadSession { @@ -534,4 +546,4 @@ internal class RemoteFileImpl( if (!info.isFile) return null return FileMessageImpl(name, info.id, info.size, info.busId) } -} \ No newline at end of file +}