From 8eb0f6a903184bdc6491fa806e287af0b35613c8 Mon Sep 17 00:00:00 2001 From: MukjepScarlet <93977077+MukjepScarlet@users.noreply.github.com> Date: Sun, 16 Feb 2025 21:57:56 +0800 Subject: [PATCH] feat: write HTTP Response body to file (#5643) for downloading and other usages --- .../liquidbounce/api/core/HttpClient.kt | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/api/core/HttpClient.kt b/src/main/kotlin/net/ccbluex/liquidbounce/api/core/HttpClient.kt index 29bce86a458..287f88290a5 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/api/core/HttpClient.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/api/core/HttpClient.kt @@ -27,6 +27,8 @@ import okhttp3.* import okhttp3.MediaType.Companion.toMediaType import okhttp3.RequestBody.Companion.toRequestBody import okio.BufferedSource +import okio.buffer +import okio.sink import java.io.File import java.io.InputStream import java.util.concurrent.TimeUnit @@ -81,21 +83,8 @@ object HttpClient { response } - suspend fun download(url: String, file: File, agent: String = DEFAULT_AGENT) = withContext(Dispatchers.IO) { - val request = createRequest(url, HttpMethod.GET, agent) - - client.newCall(request).execute().use { response -> - if (!response.isSuccessful) { - throw HttpException(HttpMethod.GET, url, response.code, "Failed to download file") - } - - file.outputStream().use { output -> - response.body.byteStream().use { input -> - input.copyTo(output) - } - } - } - } + suspend fun download(url: String, file: File, agent: String = DEFAULT_AGENT) = + request(url, HttpMethod.GET, agent).toFile(file) } @@ -118,6 +107,10 @@ inline fun Response.parse(): T { } } +fun Response.toFile(file: File) = use { response -> + file.sink().buffer().use(response.body.source()::readAll) +} + fun String.asJson() = toRequestBody(HttpClient.JSON_MEDIA_TYPE) fun String.asForm() = toRequestBody(HttpClient.FORM_MEDIA_TYPE)