aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui/conversation_content_view
diff options
context:
space:
mode:
authorfiaxh <git@lightrise.org>2025-04-09 18:25:33 +0200
committerfiaxh <git@lightrise.org>2025-04-09 18:25:33 +0200
commit5024f7c815599d3a79ff1b4582e680283a15bc77 (patch)
tree6ca229f664b2a7a2ac9dfff293b3a0604147ef31 /main/src/ui/conversation_content_view
parentf0e64ff96d6396cecf2b1eb10671171fadef870f (diff)
Fix corner cases in file transmission progress widget
Diffstat (limited to 'main/src/ui/conversation_content_view')
-rw-r--r--main/src/ui/conversation_content_view/file_image_widget.vala26
-rw-r--r--main/src/ui/conversation_content_view/file_transmission_progress.vala10
2 files changed, 22 insertions, 14 deletions
diff --git a/main/src/ui/conversation_content_view/file_image_widget.vala b/main/src/ui/conversation_content_view/file_image_widget.vala
index 11a2d3f6..f95620b9 100644
--- a/main/src/ui/conversation_content_view/file_image_widget.vala
+++ b/main/src/ui/conversation_content_view/file_image_widget.vala
@@ -132,18 +132,22 @@ public class FileImageWidget : Widget {
});
}
- if (file_transfer.state == FileTransfer.State.IN_PROGRESS) {
- if (file_transfer.direction == FileTransfer.DIRECTION_RECEIVED) {
- transmission_progress.state = FileTransmissionProgress.State.DOWNLOADING;
- } else {
- transmission_progress.state = FileTransmissionProgress.State.UPLOADING;
+ if (file_transfer.direction == FileTransfer.DIRECTION_RECEIVED) {
+ if (file_transfer.state == IN_PROGRESS) {
+ transmission_progress.state = DOWNLOADING;
+ } else if (file_transfer.sfs_sources.is_empty) {
+ transmission_progress.state = UNKNOWN_SOURCE;
+ } else if (file_transfer.state == NOT_STARTED) {
+ transmission_progress.state = DOWNLOAD_NOT_STARTED;
+ } else if (file_transfer.state == FAILED) {
+ transmission_progress.state = DOWNLOAD_NOT_STARTED_FAILED_BEFORE;
+ }
+ } else if (file_transfer.direction == FileTransfer.DIRECTION_SENT) {
+ if (file_transfer.state == IN_PROGRESS) {
+ transmission_progress.state = UPLOADING;
+ } else if (file_transfer.state == FAILED) {
+ transmission_progress.state = UPLOAD_FAILED;
}
- } else if (file_transfer.sfs_sources.is_empty && file_transfer.direction == FileTransfer.DIRECTION_RECEIVED) {
- transmission_progress.state = UNKNOWN_SOURCE;
- } else if (file_transfer.state == NOT_STARTED && file_transfer.direction == FileTransfer.DIRECTION_RECEIVED) {
- transmission_progress.state = DOWNLOAD_NOT_STARTED;
- } else if (file_transfer.state == FileTransfer.State.FAILED) {
- transmission_progress.state = DOWNLOAD_NOT_STARTED_FAILED_BEFORE;
}
}
diff --git a/main/src/ui/conversation_content_view/file_transmission_progress.vala b/main/src/ui/conversation_content_view/file_transmission_progress.vala
index 44319b38..fad38558 100644
--- a/main/src/ui/conversation_content_view/file_transmission_progress.vala
+++ b/main/src/ui/conversation_content_view/file_transmission_progress.vala
@@ -14,7 +14,8 @@ namespace Dino.Ui {
DOWNLOAD_NOT_STARTED,
DOWNLOAD_NOT_STARTED_FAILED_BEFORE,
DOWNLOADING,
- UPLOADING
+ UPLOADING,
+ UPLOAD_FAILED
}
public int64 file_size { get; set; }
@@ -48,7 +49,7 @@ namespace Dino.Ui {
}
private void on_state_changed() {
- sensitive = state != UNKNOWN_SOURCE;
+ sensitive = state != UNKNOWN_SOURCE && state != UPLOAD_FAILED;
switch (this.state) {
case UNKNOWN_SOURCE:
@@ -60,6 +61,7 @@ namespace Dino.Ui {
button.icon_name = "small-x-symbolic";
break;
case DOWNLOAD_NOT_STARTED_FAILED_BEFORE:
+ case UPLOAD_FAILED:
button.icon_name = "dialog-warning-symbolic";
break;
}
@@ -67,7 +69,8 @@ namespace Dino.Ui {
private void update_progress() {
if (file_size == 0 || progress_animation == null) return;
- double next_value = (double)transferred_size / (double)file_size;
+ // For encrypted files, transferred size > file size. For PGP, the whole message is encrypted at once, making a better solution difficult.
+ double next_value = ((double)transferred_size / (double)file_size).clamp(0, 1);
if (progress_animation != null && progress_animation.value_to != next_value) {
progress_animation.value_from = progress_animation.value;
progress_animation.value_to = next_value;
@@ -115,6 +118,7 @@ namespace Dino.Ui {
private void on_button_clicked() {
switch (this.state) {
case UNKNOWN_SOURCE:
+ case UPLOAD_FAILED:
break;
case DOWNLOAD_NOT_STARTED_FAILED_BEFORE:
case DOWNLOAD_NOT_STARTED: