Use in-memory thumbnail APIs when possible (#3817)

* Use in-memory thumbnail APIs when possible

* Make an exception for animated image types.

Also add `TimelineItemImageContent.thumbnailMediaRequestData` lazy property.

* Try simplifying the logic a bit more.
This commit is contained in:
Jorge Martin Espinosa 2024-11-08 08:40:38 +01:00 committed by GitHub
parent f77ac55ec5
commit 4e9a75f10e
12 changed files with 62 additions and 19 deletions

View file

@ -38,6 +38,7 @@ object MimeTypes {
fun String?.normalizeMimeType() = if (this == BadJpg) Jpeg else this
fun String?.isMimeTypeImage() = this?.startsWith("image/").orFalse()
fun String?.isMimeTypeAnimatedImage() = this == Gif || this == WebP
fun String?.isMimeTypeVideo() = this?.startsWith("video/").orFalse()
fun String?.isMimeTypeAudio() = this?.startsWith("audio/").orFalse()
fun String?.isMimeTypeApplication() = this?.startsWith("application/").orFalse()

View file

@ -37,7 +37,7 @@ class RustMediaLoader(
withContext(mediaDispatcher) {
runCatching {
source.toRustMediaSource().use { source ->
innerClient.getMediaContent(source).toUByteArray().toByteArray()
innerClient.getMediaContent(source)
}
}
}
@ -55,7 +55,7 @@ class RustMediaLoader(
mediaSource = mediaSource,
width = width.toULong(),
height = height.toULong()
).toUByteArray().toByteArray()
)
}
}
}

View file

@ -37,3 +37,9 @@ data class MediaRequestData(
}
}
}
/** Max width a thumbnail can have according to [the spec](https://spec.matrix.org/v1.10/client-server-api/#thumbnails). */
const val MAX_THUMBNAIL_WIDTH = 800L
/** Max height a thumbnail can have according to [the spec](https://spec.matrix.org/v1.10/client-server-api/#thumbnails). */
const val MAX_THUMBNAIL_HEIGHT = 600L