Introduce MatrixMediaSource
This commit is contained in:
parent
c3a1297c18
commit
4236b69705
27 changed files with 298 additions and 84 deletions
|
|
@ -17,13 +17,12 @@
|
|||
package io.element.android.libraries.matrix.ui.media
|
||||
|
||||
import io.element.android.libraries.designsystem.components.avatar.AvatarData
|
||||
import io.element.android.libraries.matrix.api.media.MatrixMediaSource
|
||||
import kotlin.math.roundToLong
|
||||
|
||||
fun AvatarData.toMediaRequestData(): MediaRequestData? {
|
||||
return url?.let {
|
||||
MediaRequestData(
|
||||
url = it,
|
||||
kind = MediaRequestData.Kind.Thumbnail(size.dp.value.roundToLong())
|
||||
)
|
||||
}
|
||||
fun AvatarData.toMediaRequestData(): MediaRequestData {
|
||||
return MediaRequestData(
|
||||
source = url?.let { MatrixMediaSource(it) },
|
||||
kind = MediaRequestData.Kind.Thumbnail(size.dp.value.roundToLong())
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,19 +38,15 @@ internal class CoilMediaFetcher(
|
|||
ByteBuffer.wrap(data)
|
||||
}.map { byteBuffer ->
|
||||
imageLoader.components.newFetcher(byteBuffer, options, imageLoader)?.first?.fetch()
|
||||
}
|
||||
.fold(
|
||||
{ result -> result },
|
||||
{ failure -> throw failure }
|
||||
)
|
||||
}.getOrThrow()
|
||||
}
|
||||
|
||||
private suspend fun loadMedia(): Result<ByteArray> {
|
||||
if (mediaData == null) return Result.failure(IllegalStateException("No media data to fetch."))
|
||||
if (mediaData?.source == null) return Result.failure(IllegalStateException("No media data to fetch."))
|
||||
return when (mediaData.kind) {
|
||||
is MediaRequestData.Kind.Content -> mediaLoader.loadMediaContent(url = mediaData.url)
|
||||
is MediaRequestData.Kind.Content -> mediaLoader.loadMediaContent(source = mediaData.source)
|
||||
is MediaRequestData.Kind.Thumbnail -> mediaLoader.loadMediaThumbnail(
|
||||
url = mediaData.url,
|
||||
source = mediaData.source,
|
||||
width = mediaData.kind.width,
|
||||
height = mediaData.kind.height
|
||||
)
|
||||
|
|
|
|||
|
|
@ -16,8 +16,10 @@
|
|||
|
||||
package io.element.android.libraries.matrix.ui.media
|
||||
|
||||
import io.element.android.libraries.matrix.api.media.MatrixMediaSource
|
||||
|
||||
data class MediaRequestData(
|
||||
val url: String,
|
||||
val source: MatrixMediaSource?,
|
||||
val kind: Kind
|
||||
) {
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarData
|
|||
|
||||
internal class AvatarDataKeyer : Keyer<AvatarData> {
|
||||
override fun key(data: AvatarData, options: Options): String? {
|
||||
return data.toMediaRequestData()?.toKey()
|
||||
return data.toMediaRequestData().toKey()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -32,4 +32,7 @@ internal class MediaRequestDataKeyer : Keyer<MediaRequestData> {
|
|||
}
|
||||
}
|
||||
|
||||
private fun MediaRequestData.toKey() = "${url}_${kind}"
|
||||
private fun MediaRequestData.toKey(): String? {
|
||||
if (source == null) return null
|
||||
return "${source.url}_${kind}"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue