diff options
| author | fiaxh <git@lightrise.org> | 2025-04-09 18:25:33 +0200 |
|---|---|---|
| committer | fiaxh <git@lightrise.org> | 2025-04-09 18:25:33 +0200 |
| commit | 5024f7c815599d3a79ff1b4582e680283a15bc77 (patch) | |
| tree | 6ca229f664b2a7a2ac9dfff293b3a0604147ef31 /main | |
| parent | f0e64ff96d6396cecf2b1eb10671171fadef870f (diff) | |
Fix corner cases in file transmission progress widget
Diffstat (limited to 'main')
| -rw-r--r-- | main/src/ui/conversation_content_view/file_image_widget.vala | 26 | ||||
| -rw-r--r-- | main/src/ui/conversation_content_view/file_transmission_progress.vala | 10 |
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: |
