From 0038f75e104aa12c735753485683a1d90db26ae1 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 22 May 2025 14:45:31 +0200 Subject: [PATCH] Fixed sent files size missing --- .../linphone/ui/main/chat/model/FileModel.kt | 7 ++++- .../ui/main/chat/model/MessageModel.kt | 29 ++++++++++++------- .../SendMessageInConversationViewModel.kt | 3 +- .../main/java/org/linphone/utils/FileUtils.kt | 11 +++++++ 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/FileModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/FileModel.kt index 44cae104f..1b4c2d315 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/FileModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/FileModel.kt @@ -92,7 +92,7 @@ class FileModel init { updateTransferProgress(-1) - formattedFileSize.postValue(FileUtils.bytesToDisplayableSize(fileSize)) + computeFileSize(fileSize) if (!isWaitingToBeDownloaded) { val extension = FileUtils.getExtensionFromFileName(path) @@ -141,6 +141,11 @@ class FileModel } } + @AnyThread + fun computeFileSize(fileSize: Long) { + formattedFileSize.postValue(FileUtils.bytesToDisplayableSize(fileSize)) + } + @AnyThread fun updateTransferProgress(percent: Int) { transferProgress.postValue(percent) diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt index 298d62c80..fe6968ac5 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt @@ -217,13 +217,13 @@ class MessageModel transferringFileModel = null if (!allFilesDownloaded) { computeContentsList() - } - - for (content in message.contents) { - if (content.isVoiceRecording) { - Log.i("$TAG File transfer done, updating voice record info") - computeVoiceRecordContent(content) - break + } else { + for (content in message.contents) { + if (content.isVoiceRecording) { + Log.i("$TAG File transfer done, updating voice record info") + computeVoiceRecordContent(content) + break + } } } } @@ -406,7 +406,7 @@ class MessageModel private fun computeContentsList() { Log.d("$TAG Computing message contents list") text.postValue(Spannable.Factory.getInstance().newSpannable("")) - filesList.postValue(arrayListOf()) + filesList.value.orEmpty().forEach(FileModel::destroy) var displayableContentFound = false var contentIndex = 0 @@ -461,7 +461,11 @@ class MessageModel Log.d( "$TAG Found file ready to be displayed [$path] with MIME [${content.type}/${content.subtype}] for message [${chatMessage.messageId}]" ) - val fileSize = content.fileSize.toLong() + val fileSize = if (content.fileSize.toLong() > 0) { + content.fileSize.toLong() + } else { + FileUtils.getFileSize(path) + } val timestamp = content.creationTimestamp val fileModel = FileModel( path, @@ -492,10 +496,15 @@ class MessageModel if (name.isNotEmpty()) { val fileModel = if (isOutgoing && chatMessage.isFileTransferInProgress) { val path = content.filePath.orEmpty() + val fileSize = if (content.fileSize.toLong() > 0) { + content.fileSize.toLong() + } else { + FileUtils.getFileSize(path) + } FileModel( path, name, - content.fileSize.toLong(), + fileSize, timestamp, isFileEncrypted, path, diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt index 6a7ac45a2..ac7025547 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt @@ -401,7 +401,8 @@ class SendMessageInConversationViewModel val fileName = FileUtils.getNameFromFilePath(file) val timestamp = System.currentTimeMillis() / 1000 - val model = FileModel(file, fileName, 0, timestamp, false, file, false) { model -> + val size = FileUtils.getFileSize(file) + val model = FileModel(file, fileName, size, timestamp, false, file, false) { model -> removeAttachment(model.path) } diff --git a/app/src/main/java/org/linphone/utils/FileUtils.kt b/app/src/main/java/org/linphone/utils/FileUtils.kt index 32770117f..8500de8e7 100644 --- a/app/src/main/java/org/linphone/utils/FileUtils.kt +++ b/app/src/main/java/org/linphone/utils/FileUtils.kt @@ -68,6 +68,17 @@ class FileUtils { return Formatter.formatShortFileSize(coreContext.context, bytes) } + @AnyThread + fun getFileSize(filePath: String): Long { + try { + val file = File(filePath) + return file.length() + } catch (e: Exception) { + Log.e("$TAG Failed to get file [$filePath] size: $e") + } + return 0L + } + @AnyThread fun isExtensionImage(path: String): Boolean { val extension = getExtensionFromFileName(path)