Move more fields to TimelineItemEventContentWithAttachment

This commit is contained in:
Benoit Marty 2024-12-03 09:42:13 +01:00
parent 01c4a10ab9
commit ecd58293b4
14 changed files with 51 additions and 36 deletions

View file

@ -381,7 +381,7 @@ class MessagesFlowNode @AssistedInject constructor(
senderName = event.safeSenderName, senderName = event.safeSenderName,
dateSent = event.sentTime, dateSent = event.sentTime,
), ),
mediaSource = event.content.videoSource, mediaSource = event.content.mediaSource,
thumbnailSource = event.content.thumbnailSource, thumbnailSource = event.content.thumbnailSource,
) )
overlay.show(navTarget) overlay.show(navTarget)
@ -398,7 +398,7 @@ class MessagesFlowNode @AssistedInject constructor(
senderName = event.safeSenderName, senderName = event.safeSenderName,
dateSent = event.sentTime, dateSent = event.sentTime,
), ),
mediaSource = event.content.fileSource, mediaSource = event.content.mediaSource,
thumbnailSource = event.content.thumbnailSource, thumbnailSource = event.content.thumbnailSource,
) )
overlay.show(navTarget) overlay.show(navTarget)

View file

@ -147,7 +147,7 @@ class TimelineItemContentMessageFactory @Inject constructor(
formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(), formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(),
isEdited = content.isEdited, isEdited = content.isEdited,
thumbnailSource = messageType.info?.thumbnailSource, thumbnailSource = messageType.info?.thumbnailSource,
videoSource = messageType.source, mediaSource = messageType.source,
mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream, mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream,
width = messageType.info?.width?.toInt(), width = messageType.info?.width?.toInt(),
height = messageType.info?.height?.toInt(), height = messageType.info?.height?.toInt(),
@ -186,6 +186,8 @@ class TimelineItemContentMessageFactory @Inject constructor(
duration = messageType.info?.duration ?: Duration.ZERO, duration = messageType.info?.duration ?: Duration.ZERO,
mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream, mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream,
waveform = messageType.details?.waveform?.toImmutableList() ?: persistentListOf(), waveform = messageType.details?.waveform?.toImmutableList() ?: persistentListOf(),
formattedFileSize = fileSizeFormatter.format(messageType.info?.size ?: 0),
fileExtension = fileExtensionExtractor.extractFromName(messageType.filename)
) )
} }
false -> { false -> {
@ -211,7 +213,7 @@ class TimelineItemContentMessageFactory @Inject constructor(
formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(), formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(),
isEdited = content.isEdited, isEdited = content.isEdited,
thumbnailSource = messageType.info?.thumbnailSource, thumbnailSource = messageType.info?.thumbnailSource,
fileSource = messageType.source, mediaSource = messageType.source,
mimeType = messageType.info?.mimetype ?: MimeTypes.fromFileExtension(fileExtension), mimeType = messageType.info?.mimetype ?: MimeTypes.fromFileExtension(fileExtension),
formattedFileSize = fileSizeFormatter.format(messageType.info?.size ?: 0), formattedFileSize = fileSizeFormatter.format(messageType.info?.size ?: 0),
fileExtension = fileExtension fileExtension = fileExtension

View file

@ -17,10 +17,10 @@ data class TimelineItemAudioContent(
override val formattedCaption: CharSequence?, override val formattedCaption: CharSequence?,
override val isEdited: Boolean, override val isEdited: Boolean,
val duration: Duration, val duration: Duration,
val mediaSource: MediaSource, override val mediaSource: MediaSource,
val mimeType: String, override val mimeType: String,
val formattedFileSize: String, override val formattedFileSize: String,
val fileExtension: String, override val fileExtension: String,
) : TimelineItemEventContentWithAttachment { ) : TimelineItemEventContentWithAttachment {
val fileExtensionAndSize = val fileExtensionAndSize =
formatFileExtensionAndSize( formatFileExtensionAndSize(

View file

@ -8,6 +8,7 @@
package io.element.android.features.messages.impl.timeline.model.event package io.element.android.features.messages.impl.timeline.model.event
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import io.element.android.libraries.matrix.api.media.MediaSource
@Immutable @Immutable
sealed interface TimelineItemEventContent { sealed interface TimelineItemEventContent {
@ -26,6 +27,10 @@ sealed interface TimelineItemEventContentWithAttachment :
val filename: String val filename: String
val caption: String? val caption: String?
val formattedCaption: CharSequence? val formattedCaption: CharSequence?
val mediaSource: MediaSource
val mimeType: String
val formattedFileSize: String
val fileExtension: String
val bestDescription: String val bestDescription: String
get() = caption ?: filename get() = caption ?: filename

View file

@ -15,11 +15,11 @@ data class TimelineItemFileContent(
override val caption: String?, override val caption: String?,
override val formattedCaption: CharSequence?, override val formattedCaption: CharSequence?,
override val isEdited: Boolean, override val isEdited: Boolean,
val fileSource: MediaSource, override val mediaSource: MediaSource,
val thumbnailSource: MediaSource?, val thumbnailSource: MediaSource?,
val formattedFileSize: String, override val formattedFileSize: String,
val fileExtension: String, override val fileExtension: String,
val mimeType: String, override val mimeType: String,
) : TimelineItemEventContentWithAttachment { ) : TimelineItemEventContentWithAttachment {
override val type: String = "TimelineItemFileContent" override val type: String = "TimelineItemFileContent"

View file

@ -31,7 +31,7 @@ fun aTimelineItemFileContent(
formattedCaption = null, formattedCaption = null,
isEdited = false, isEdited = false,
thumbnailSource = null, thumbnailSource = null,
fileSource = MediaSource(url = ""), mediaSource = MediaSource(url = ""),
mimeType = MimeTypes.Pdf, mimeType = MimeTypes.Pdf,
formattedFileSize = "100kB", formattedFileSize = "100kB",
fileExtension = "pdf" fileExtension = "pdf"

View file

@ -18,11 +18,11 @@ data class TimelineItemImageContent(
override val caption: String?, override val caption: String?,
override val formattedCaption: CharSequence?, override val formattedCaption: CharSequence?,
override val isEdited: Boolean, override val isEdited: Boolean,
val mediaSource: MediaSource, override val mediaSource: MediaSource,
val thumbnailSource: MediaSource?, val thumbnailSource: MediaSource?,
val formattedFileSize: String, override val formattedFileSize: String,
val fileExtension: String, override val fileExtension: String,
val mimeType: String, override val mimeType: String,
val blurhash: String?, val blurhash: String?,
val width: Int?, val width: Int?,
val height: Int?, val height: Int?,

View file

@ -14,11 +14,11 @@ data class TimelineItemStickerContent(
override val caption: String?, override val caption: String?,
override val formattedCaption: CharSequence?, override val formattedCaption: CharSequence?,
override val isEdited: Boolean, override val isEdited: Boolean,
val mediaSource: MediaSource, override val mediaSource: MediaSource,
val thumbnailSource: MediaSource?, val thumbnailSource: MediaSource?,
val formattedFileSize: String, override val formattedFileSize: String,
val fileExtension: String, override val fileExtension: String,
val mimeType: String, override val mimeType: String,
val blurhash: String?, val blurhash: String?,
val width: Int?, val width: Int?,
val height: Int?, val height: Int?,

View file

@ -16,7 +16,7 @@ data class TimelineItemVideoContent(
override val formattedCaption: CharSequence?, override val formattedCaption: CharSequence?,
override val isEdited: Boolean, override val isEdited: Boolean,
val duration: Duration, val duration: Duration,
val videoSource: MediaSource, override val mediaSource: MediaSource,
val thumbnailSource: MediaSource?, val thumbnailSource: MediaSource?,
val aspectRatio: Float?, val aspectRatio: Float?,
val blurHash: String?, val blurHash: String?,
@ -24,9 +24,9 @@ data class TimelineItemVideoContent(
val width: Int?, val width: Int?,
val thumbnailWidth: Int?, val thumbnailWidth: Int?,
val thumbnailHeight: Int?, val thumbnailHeight: Int?,
val mimeType: String, override val mimeType: String,
val formattedFileSize: String, override val formattedFileSize: String,
val fileExtension: String, override val fileExtension: String,
) : TimelineItemEventContentWithAttachment { ) : TimelineItemEventContentWithAttachment {
override val type: String = "TimelineItemImageContent" override val type: String = "TimelineItemImageContent"

View file

@ -35,7 +35,7 @@ fun aTimelineItemVideoContent(
blurHash = blurhash, blurHash = blurhash,
aspectRatio = aspectRatio, aspectRatio = aspectRatio,
duration = 100.milliseconds, duration = 100.milliseconds,
videoSource = MediaSource(""), mediaSource = MediaSource(""),
width = 150, width = 150,
height = 300, height = 300,
thumbnailWidth = 150, thumbnailWidth = 150,

View file

@ -19,8 +19,10 @@ data class TimelineItemVoiceContent(
override val formattedCaption: CharSequence?, override val formattedCaption: CharSequence?,
override val isEdited: Boolean, override val isEdited: Boolean,
val duration: Duration, val duration: Duration,
val mediaSource: MediaSource, override val mediaSource: MediaSource,
val mimeType: String, override val formattedFileSize: String,
override val fileExtension: String,
override val mimeType: String,
val waveform: ImmutableList<Float>, val waveform: ImmutableList<Float>,
) : TimelineItemEventContentWithAttachment { ) : TimelineItemEventContentWithAttachment {
override val type: String = "TimelineItemAudioContent" override val type: String = "TimelineItemAudioContent"

View file

@ -53,4 +53,6 @@ fun aTimelineItemVoiceContent(
mediaSource = mediaSource, mediaSource = mediaSource,
mimeType = mimeType, mimeType = mimeType,
waveform = waveform.toPersistentList(), waveform = waveform.toPersistentList(),
formattedFileSize = "1.0 MB",
fileExtension = "ogg",
) )

View file

@ -371,7 +371,7 @@ class MessagesPresenterTest {
formattedCaption = null, formattedCaption = null,
isEdited = false, isEdited = false,
duration = 10.milliseconds, duration = 10.milliseconds,
videoSource = MediaSource(AN_AVATAR_URL), mediaSource = MediaSource(AN_AVATAR_URL),
thumbnailSource = MediaSource(AN_AVATAR_URL), thumbnailSource = MediaSource(AN_AVATAR_URL),
mimeType = MimeTypes.Mp4, mimeType = MimeTypes.Mp4,
blurHash = null, blurHash = null,
@ -413,7 +413,7 @@ class MessagesPresenterTest {
caption = null, caption = null,
isEdited = false, isEdited = false,
formattedCaption = null, formattedCaption = null,
fileSource = MediaSource(AN_AVATAR_URL), mediaSource = MediaSource(AN_AVATAR_URL),
thumbnailSource = MediaSource(AN_AVATAR_URL), thumbnailSource = MediaSource(AN_AVATAR_URL),
formattedFileSize = "10 MB", formattedFileSize = "10 MB",
mimeType = MimeTypes.Pdf, mimeType = MimeTypes.Pdf,

View file

@ -239,7 +239,7 @@ class TimelineItemContentMessageFactoryTest {
formattedCaption = null, formattedCaption = null,
isEdited = false, isEdited = false,
duration = Duration.ZERO, duration = Duration.ZERO,
videoSource = MediaSource(url = "url", json = null), mediaSource = MediaSource(url = "url", json = null),
thumbnailSource = null, thumbnailSource = null,
aspectRatio = null, aspectRatio = null,
blurHash = null, blurHash = null,
@ -291,7 +291,7 @@ class TimelineItemContentMessageFactoryTest {
formattedCaption = SpannedString("formatted"), formattedCaption = SpannedString("formatted"),
isEdited = true, isEdited = true,
duration = 1.minutes, duration = 1.minutes,
videoSource = MediaSource(url = "url", json = null), mediaSource = MediaSource(url = "url", json = null),
thumbnailSource = MediaSource("url_thumbnail"), thumbnailSource = MediaSource("url_thumbnail"),
aspectRatio = 3f, aspectRatio = 3f,
blurHash = A_BLUR_HASH, blurHash = A_BLUR_HASH,
@ -380,7 +380,9 @@ class TimelineItemContentMessageFactoryTest {
duration = Duration.ZERO, duration = Duration.ZERO,
mediaSource = MediaSource(url = "url", json = null), mediaSource = MediaSource(url = "url", json = null),
mimeType = MimeTypes.OctetStream, mimeType = MimeTypes.OctetStream,
waveform = emptyList<Float>().toImmutableList() waveform = emptyList<Float>().toImmutableList(),
fileExtension = "",
formattedFileSize = "",
) )
assertThat(result).isEqualTo(expected) assertThat(result).isEqualTo(expected)
} }
@ -419,7 +421,9 @@ class TimelineItemContentMessageFactoryTest {
duration = 1.minutes, duration = 1.minutes,
mediaSource = MediaSource(url = "url", json = null), mediaSource = MediaSource(url = "url", json = null),
mimeType = MimeTypes.Ogg, mimeType = MimeTypes.Ogg,
waveform = persistentListOf(1f, 2f) waveform = persistentListOf(1f, 2f),
fileExtension = "",
formattedFileSize = "",
) )
assertThat(result).isEqualTo(expected) assertThat(result).isEqualTo(expected)
} }
@ -571,7 +575,7 @@ class TimelineItemContentMessageFactoryTest {
caption = null, caption = null,
formattedCaption = null, formattedCaption = null,
isEdited = false, isEdited = false,
fileSource = MediaSource(url = "url", json = null), mediaSource = MediaSource(url = "url", json = null),
thumbnailSource = null, thumbnailSource = null,
formattedFileSize = "0 Bytes", formattedFileSize = "0 Bytes",
fileExtension = "", fileExtension = "",
@ -612,7 +616,7 @@ class TimelineItemContentMessageFactoryTest {
caption = null, caption = null,
formattedCaption = null, formattedCaption = null,
isEdited = true, isEdited = true,
fileSource = MediaSource(url = "url", json = null), mediaSource = MediaSource(url = "url", json = null),
thumbnailSource = MediaSource("url_thumbnail"), thumbnailSource = MediaSource("url_thumbnail"),
formattedFileSize = "123 Bytes", formattedFileSize = "123 Bytes",
fileExtension = "pdf", fileExtension = "pdf",