mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-03 04:27:35 +01:00
Improve ContentUrlResolver
This commit is contained in:
parent
e97c95f40a
commit
5652140f5d
@ -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.
|
||||
*
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user