Media: keep the name of the file when possible

This commit is contained in:
ganfra
2023-05-22 20:24:42 +02:00
parent c8c2cb8ff3
commit 4c19bd3644
10 changed files with 90 additions and 31 deletions

View File

@@ -25,5 +25,5 @@ import kotlinx.parcelize.Parcelize
sealed interface Attachment : Parcelable {
@Parcelize
data class Media(val localMedia: LocalMedia) : Attachment
data class Media(val localMedia: LocalMedia, val compressIfPossible: Boolean) : Attachment
}

View File

@@ -16,7 +16,6 @@
package io.element.android.features.messages.impl.attachments.preview
import android.net.Uri
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
@@ -73,8 +72,7 @@ class AttachmentsPreviewPresenter @AssistedInject constructor(
when (attachment) {
is Attachment.Media -> {
sendMedia(
uri = attachment.localMedia.uri,
mimeType = attachment.localMedia.mimeType,
mediaAttachment = attachment,
sendActionState = sendActionState
)
}
@@ -82,12 +80,11 @@ class AttachmentsPreviewPresenter @AssistedInject constructor(
}
private suspend fun sendMedia(
uri: Uri,
mimeType: String,
mediaAttachment: Attachment.Media,
sendActionState: MutableState<Async<Unit>>,
) {
suspend {
mediaSender.sendMedia(uri, mimeType)
mediaSender.sendMedia(mediaAttachment.localMedia.uri, mediaAttachment.localMedia.mimeType, mediaAttachment.compressIfPossible)
}.executeResult(sendActionState)
}
}

View File

@@ -36,6 +36,7 @@ open class AttachmentsPreviewStateProvider : PreviewParameterProvider<Attachment
fun anAttachmentsPreviewState(sendActionState: Async<Unit> = Async.Uninitialized) = AttachmentsPreviewState(
attachment = Attachment.Media(
localMedia = LocalMedia("".toUri(), mimeType = MimeTypes.OctetStream),
compressIfPossible = true
),
sendActionState = sendActionState,
eventSink = {}

View File

@@ -70,16 +70,16 @@ class MessageComposerPresenter @Inject constructor(
mutableStateOf<AttachmentsState>(AttachmentsState.None)
}
fun handlePickedMedia(uri: Uri?, mimeType: String? = null) {
fun handlePickedMedia(uri: Uri?, mimeType: String? = null, compressIfPossible: Boolean = true) {
val localMedia = localMediaFactory.createFromUri(uri, mimeType)
attachmentsState.value = if (localMedia == null) {
AttachmentsState.None
} else {
val mediaAttachment = Attachment.Media(localMedia)
val mediaAttachment = Attachment.Media(localMedia, compressIfPossible)
val isPreviewable = when {
MimeTypes.isImage(mimeType) -> true
MimeTypes.isVideo(mimeType) -> true
MimeTypes.isAudio(mimeType) -> true
MimeTypes.isImage(localMedia.mimeType) -> true
MimeTypes.isVideo(localMedia.mimeType) -> true
MimeTypes.isAudio(localMedia.mimeType) -> true
else -> false
}
if (isPreviewable) {
@@ -93,7 +93,7 @@ class MessageComposerPresenter @Inject constructor(
val galleryMediaPicker = mediaPickerProvider.registerGalleryPicker(onResult = { uri, mimeType ->
handlePickedMedia(uri, mimeType)
})
val filesPicker = mediaPickerProvider.registerFilePicker(AnyMimeTypes, onResult = { handlePickedMedia(it) })
val filesPicker = mediaPickerProvider.registerFilePicker(AnyMimeTypes, onResult = { handlePickedMedia(it, compressIfPossible = false) })
val cameraPhotoPicker = mediaPickerProvider.registerCameraPhotoPicker(onResult = { handlePickedMedia(it, MimeTypes.IMAGE_JPEG) })
val cameraVideoPicker = mediaPickerProvider.registerCameraVideoPicker(onResult = { handlePickedMedia(it, MimeTypes.VIDEO_MP4) })
@@ -221,7 +221,7 @@ class MessageComposerPresenter @Inject constructor(
mimeType: String,
attachmentState: MutableState<AttachmentsState>,
) {
mediaSender.sendMedia(uri, mimeType)
mediaSender.sendMedia(uri, mimeType, compressIfPossible = false)
.onSuccess {
attachmentState.value = AttachmentsState.None
}.onFailure {