Move more fields to TimelineItemEventContentWithAttachment
This commit is contained in:
parent
01c4a10ab9
commit
ecd58293b4
14 changed files with 51 additions and 36 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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?,
|
||||||
|
|
|
||||||
|
|
@ -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?,
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue