diff options
| author | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-10-04 01:23:11 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-10-09 16:38:02 +0200 |
| commit | 6d3aef271875eba7a3867259f2089e3801141b19 (patch) | |
| tree | fb8d639dd84c3c0242cd8bf5ea8f73b83a4c0bc8 /main/src | |
| parent | f3c50f07395f0e3331c4389015fe26ef53213c83 (diff) | |
| download | dino-6d3aef271875eba7a3867259f2089e3801141b19.tar.gz | |
Show file upload/download progress
Fixes upstream issue #1350.
Notes:
Image uploads were incorrectly handled by Dino, as they were always
reported as completed even if they were not, maybe so as to show the
image preview from the start. Now, Dino shows the upload progress for
all file types, and the image is only shown when completed.
Diffstat (limited to 'main/src')
| -rw-r--r-- | main/src/ui/conversation_content_view/file_default_widget.vala | 15 | ||||
| -rw-r--r-- | main/src/ui/conversation_content_view/file_widget.vala | 12 | ||||
| -rw-r--r-- | main/src/ui/file_send_overlay.vala | 3 |
3 files changed, 24 insertions, 6 deletions
diff --git a/main/src/ui/conversation_content_view/file_default_widget.vala b/main/src/ui/conversation_content_view/file_default_widget.vala index 638dab15..79d22fe4 100644 --- a/main/src/ui/conversation_content_view/file_default_widget.vala +++ b/main/src/ui/conversation_content_view/file_default_widget.vala @@ -31,7 +31,8 @@ public class FileDefaultWidget : EventBox { cancel_button = new ModelButton() { text=_("Cancel"), visible=true }; } - public void update_file_info(string? mime_type, FileTransfer.State state, long size) { + public void update_file_info(string? mime_type, uint64 transferred_bytes, + bool direction, FileTransfer.State state, long size) { this.state = state; spinner.active = false; // A hidden spinning spinner still uses CPU. Deactivate asap @@ -58,7 +59,17 @@ public class FileDefaultWidget : EventBox { popover_menu.closed.connect(on_pointer_left); break; case FileTransfer.State.IN_PROGRESS: - mime_label.label = _("Downloading %s…").printf(get_size_string(size)); + uint progress = 0; + + if (size > 0) + progress = (uint)((transferred_bytes * (uint64)100) / (uint64)size); + + if (direction == FileTransfer.DIRECTION_SENT) { + mime_label.label = _("Uploading %s (%u%%)…").printf(get_size_string(size), progress); + } + else { + mime_label.label = _("Downloading %s (%u%%)…").printf(get_size_string(size), progress); + } spinner.active = true; image_stack.set_visible_child_name("spinner"); diff --git a/main/src/ui/conversation_content_view/file_widget.vala b/main/src/ui/conversation_content_view/file_widget.vala index cac6fda4..54953d72 100644 --- a/main/src/ui/conversation_content_view/file_widget.vala +++ b/main/src/ui/conversation_content_view/file_widget.vala @@ -65,7 +65,8 @@ public class FileWidget : SizeRequestBox { } private async void update_widget() { - if (show_image() && state != State.IMAGE) { + if (show_image() && state != State.IMAGE + && file_transfer.state == FileTransfer.State.COMPLETE) { var content_bak = content; FileImageWidget file_image_widget = null; @@ -120,6 +121,7 @@ public class FileDefaultWidgetController : Object { public string file_transfer_path { get; set; } public string file_transfer_state { get; set; } public string file_transfer_mime_type { get; set; } + public uint64 file_transfer_transferred_bytes { get; set; } private StreamInteractor? stream_interactor; private string file_uri; @@ -143,10 +145,12 @@ public class FileDefaultWidgetController : Object { file_transfer.bind_property("path", this, "file-transfer-path"); file_transfer.bind_property("state", this, "file-transfer-state"); file_transfer.bind_property("mime-type", this, "file-transfer-mime-type"); + file_transfer.bind_property("transferred-bytes", this, "file-transfer-transferred-bytes"); this.notify["file-transfer-path"].connect(update_file_info); this.notify["file-transfer-state"].connect(update_file_info); this.notify["file-transfer-mime-type"].connect(update_file_info); + this.notify["file-transfer-transferred-bytes"].connect(update_file_info); update_file_info(); } @@ -155,13 +159,15 @@ public class FileDefaultWidgetController : Object { file_uri = file.get_uri(); state = FileTransfer.State.COMPLETE; widget.name_label.label = this.file_name = file_name; - widget.update_file_info(mime_type, state, -1); + widget.update_file_info(mime_type, 0, false, state, -1); } private void update_file_info() { file_uri = file_transfer.get_file().get_uri(); state = file_transfer.state; - widget.update_file_info(file_transfer.mime_type, file_transfer.state, file_transfer.size); + widget.update_file_info(file_transfer.mime_type, + file_transfer.transferred_bytes, + file_transfer.direction, file_transfer.state, file_transfer.size); } private void open_file() { diff --git a/main/src/ui/file_send_overlay.vala b/main/src/ui/file_send_overlay.vala index 369d291a..ac3a275b 100644 --- a/main/src/ui/file_send_overlay.vala +++ b/main/src/ui/file_send_overlay.vala @@ -74,7 +74,8 @@ public class FileSendOverlay : Gtk.EventBox { if (widget == null) { FileDefaultWidget default_widget = new FileDefaultWidget() { visible=true }; default_widget.name_label.label = file_name; - default_widget.update_file_info(mime_type, FileTransfer.State.COMPLETE, (long)file_info.get_size()); + default_widget.update_file_info(mime_type, 0, FileTransfer.DIRECTION_SENT, + FileTransfer.State.COMPLETE, (long)file_info.get_size()); widget = default_widget; } |
