Add MediaSource.withCleanUrl method that removes invalid fragment data from MXC urls
We've seen some MXC urls in the wild having some `mxc://foo/bar#auto` fragment suffix, which is invalid, but the URL before that fragment part is valid and can be displayed
This commit is contained in:
@@ -16,6 +16,7 @@ import coil3.fetch.SourceFetchResult
|
||||
import io.element.android.libraries.matrix.api.media.MatrixMediaLoader
|
||||
import io.element.android.libraries.matrix.api.media.MediaSource
|
||||
import io.element.android.libraries.matrix.api.media.toFile
|
||||
import io.element.android.libraries.matrix.api.media.withCleanUrl
|
||||
import okio.Buffer
|
||||
import okio.FileSystem
|
||||
import okio.Path.Companion.toOkioPath
|
||||
@@ -28,14 +29,18 @@ internal class CoilMediaFetcher(
|
||||
) : Fetcher {
|
||||
override suspend fun fetch(): FetchResult? {
|
||||
val source = mediaData.source
|
||||
if (source == null) {
|
||||
Timber.e("MediaData source is null")
|
||||
return null
|
||||
val mediaSource = when {
|
||||
source == null -> {
|
||||
Timber.e("MediaData source is null")
|
||||
return null
|
||||
}
|
||||
source.url.startsWith("mxc:") -> source.withCleanUrl()
|
||||
else -> source
|
||||
}
|
||||
return when (val kind = mediaData.kind) {
|
||||
is MediaRequestData.Kind.Content -> fetchContent(source)
|
||||
is MediaRequestData.Kind.Thumbnail -> fetchThumbnail(source, kind)
|
||||
is MediaRequestData.Kind.File -> fetchFile(source, kind)
|
||||
is MediaRequestData.Kind.Content -> fetchContent(mediaSource)
|
||||
is MediaRequestData.Kind.Thumbnail -> fetchThumbnail(mediaSource, kind)
|
||||
is MediaRequestData.Kind.File -> fetchFile(mediaSource, kind)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user