diff options
Diffstat (limited to 'main/src/ui/conversation_content_view')
| -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: |
