diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/content/ContentUrlResolver.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/content/ContentUrlResolver.kt index 9ba1631aec..6ed0b92e38 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/content/ContentUrlResolver.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/content/ContentUrlResolver.kt @@ -26,6 +26,11 @@ interface ContentUrlResolver { SCALE("scale") } + /** + * URL to use to upload content + */ + val uploadUrl: String + /** * Get the actual URL for accessing the full-size image of a Matrix media content URI. * diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/DefaultContentUrlResolver.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/DefaultContentUrlResolver.kt index 20c124f545..007588e0f4 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/DefaultContentUrlResolver.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/DefaultContentUrlResolver.kt @@ -23,39 +23,33 @@ import javax.inject.Inject private const val MATRIX_CONTENT_URI_SCHEME = "mxc://" -internal class DefaultContentUrlResolver @Inject constructor(private val homeServerConnectionConfig: HomeServerConnectionConfig) : ContentUrlResolver { +internal class DefaultContentUrlResolver @Inject constructor(homeServerConnectionConfig: HomeServerConnectionConfig) : ContentUrlResolver { - companion object { - fun getUploadUrl(homeServerConnectionConfig: HomeServerConnectionConfig): String { - val baseUrl = homeServerConnectionConfig.homeServerUri.toString() - val sep = if (baseUrl.endsWith("/")) "" else "/" + private val baseUrl = homeServerConnectionConfig.homeServerUri.toString() + private val sep = if (baseUrl.endsWith("/")) "" else "/" - return baseUrl + sep + NetworkConstants.URI_API_MEDIA_PREFIX_PATH_R0 + "upload" - } - } + override val uploadUrl = baseUrl + sep + NetworkConstants.URI_API_MEDIA_PREFIX_PATH_R0 + "upload" override fun resolveFullSize(contentUrl: String?): String? { if (contentUrl?.isValidMatrixContentUrl() == true) { - val baseUrl = homeServerConnectionConfig.homeServerUri.toString() val prefix = NetworkConstants.URI_API_MEDIA_PREFIX_PATH_R0 + "download/" - return resolve(baseUrl, contentUrl, prefix) - } - return null - } - - override fun resolveThumbnail(contentUrl: String?, width: Int, height: Int, method: ContentUrlResolver.ThumbnailMethod): String? { - if (contentUrl?.isValidMatrixContentUrl() == true) { - val baseUrl = homeServerConnectionConfig.homeServerUri.toString() - val prefix = NetworkConstants.URI_API_MEDIA_PREFIX_PATH_R0 + "thumbnail/" - val params = "?width=$width&height=$height&method=${method.value}" - return resolve(baseUrl, contentUrl, prefix, params) + return resolve(contentUrl, prefix) } // do not allow non-mxc content URLs return null } - private fun resolve(baseUrl: String, - contentUrl: String, + override fun resolveThumbnail(contentUrl: String?, width: Int, height: Int, method: ContentUrlResolver.ThumbnailMethod): String? { + if (contentUrl?.isValidMatrixContentUrl() == true) { + val prefix = NetworkConstants.URI_API_MEDIA_PREFIX_PATH_R0 + "thumbnail/" + val params = "?width=$width&height=$height&method=${method.value}" + return resolve(contentUrl, prefix, params) + } + // do not allow non-mxc content URLs + return null + } + + private fun resolve(contentUrl: String, prefix: String, params: String? = null): String? { var serverAndMediaId = contentUrl.removePrefix(MATRIX_CONTENT_URI_SCHEME) @@ -66,8 +60,6 @@ internal class DefaultContentUrlResolver @Inject constructor(private val homeSer serverAndMediaId = serverAndMediaId.substring(0, fragmentOffset) } - val sep = if (baseUrl.endsWith("/")) "" else "/" - return baseUrl + sep + prefix + serverAndMediaId + (params ?: "") + fragment } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/FileUploader.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/FileUploader.kt index 4fa0cb5013..1153b39b0a 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/FileUploader.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/FileUploader.kt @@ -17,7 +17,7 @@ package im.vector.matrix.android.internal.session.content import com.squareup.moshi.Moshi -import im.vector.matrix.android.api.auth.data.SessionParams +import im.vector.matrix.android.api.session.content.ContentUrlResolver import im.vector.matrix.android.internal.di.Authenticated import im.vector.matrix.android.internal.network.ProgressRequestBody import im.vector.matrix.android.internal.network.awaitResponse @@ -37,10 +37,10 @@ import javax.inject.Inject internal class FileUploader @Inject constructor(@Authenticated private val okHttpClient: OkHttpClient, private val eventBus: EventBus, - sessionParams: SessionParams, + contentUrlResolver: ContentUrlResolver, moshi: Moshi) { - private val uploadUrl = DefaultContentUrlResolver.getUploadUrl(sessionParams.homeServerConnectionConfig) + private val uploadUrl = contentUrlResolver.uploadUrl private val responseAdapter = moshi.adapter(ContentUploadResponse::class.java) suspend fun uploadFile(file: File,