From 016f3faeea5dfd430e43209d1a021244987aa6f9 Mon Sep 17 00:00:00 2001 From: yostyle Date: Thu, 4 Nov 2021 17:35:02 +0100 Subject: [PATCH] Update file service --- .../internal/session/DefaultFileService.kt | 24 +++++++++++++++---- .../session/contentscanning/ContentScanApi.kt | 6 ++--- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultFileService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultFileService.kt index 46c5967876..14dfc097cf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultFileService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultFileService.kt @@ -23,8 +23,10 @@ import androidx.core.content.FileProvider import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.completeWith import kotlinx.coroutines.withContext +import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.Request +import okhttp3.RequestBody.Companion.toRequestBody import org.matrix.android.sdk.api.MatrixCoroutineDispatchers import org.matrix.android.sdk.api.failure.Failure import org.matrix.android.sdk.api.session.content.ContentUrlResolver @@ -118,12 +120,24 @@ internal class DefaultFileService @Inject constructor( val cachedFiles = getFiles(url, fileName, mimeType, elementToDecrypt != null) if (!cachedFiles.file.exists()) { - val resolvedUrl = contentUrlResolver.resolveFullSize(url) ?: throw IllegalArgumentException("url is null") + val resolvedUrl = contentUrlResolver.resolveForDownload(url, elementToDecrypt) ?: throw IllegalArgumentException("url is null") - val request = Request.Builder() - .url(resolvedUrl) - .header(DOWNLOAD_PROGRESS_INTERCEPTOR_HEADER, url) - .build() + val request = when (resolvedUrl) { + is ContentUrlResolver.ResolvedMethod.GET -> { + Request.Builder() + .url(resolvedUrl.url) + .header(DOWNLOAD_PROGRESS_INTERCEPTOR_HEADER, url) + .build() + } + + is ContentUrlResolver.ResolvedMethod.POST -> { + Request.Builder() + .url(resolvedUrl.url) + .header(DOWNLOAD_PROGRESS_INTERCEPTOR_HEADER, url) + .post(resolvedUrl.jsonBody.toRequestBody("application/json".toMediaType())) + .build() + } + } val response = try { okHttpClient.newCall(request).execute() diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/contentscanning/ContentScanApi.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/contentscanning/ContentScanApi.kt index 81cff8a177..f4ce3b440e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/contentscanning/ContentScanApi.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/contentscanning/ContentScanApi.kt @@ -25,11 +25,11 @@ internal interface ContentScanApi { suspend fun downloadEncrypted(@Body info: DownloadBody): ResponseBody @POST(NetworkConstants.URI_API_PREFIX_PATH_MEDIA_PROXY_UNSTABLE + "scan_encrypted") - fun scanFile(@Body info: DownloadBody): ScanResponse + suspend fun scanFile(@Body info: DownloadBody): ScanResponse @GET(NetworkConstants.URI_API_PREFIX_PATH_MEDIA_PROXY_UNSTABLE + "public_key") - fun getServerPublicKey(): ServerPublicKeyResponse + suspend fun getServerPublicKey(): ServerPublicKeyResponse @GET(NetworkConstants.URI_API_PREFIX_PATH_MEDIA_PROXY_UNSTABLE + "scan/{domain}/{mediaId}") - fun scanMedia(@Path(value = "domain") domain: String, @Path(value = "mediaId") mediaId: String): ScanResponse + suspend fun scanMedia(@Path(value = "domain") domain: String, @Path(value = "mediaId") mediaId: String): ScanResponse }