aboutsummaryrefslogtreecommitdiff
path: root/main/src
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-10-04 01:23:11 +0200
committerXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-10-09 16:38:02 +0200
commit6d3aef271875eba7a3867259f2089e3801141b19 (patch)
treefb8d639dd84c3c0242cd8bf5ea8f73b83a4c0bc8 /main/src
parentf3c50f07395f0e3331c4389015fe26ef53213c83 (diff)
downloaddino-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.vala15
-rw-r--r--main/src/ui/conversation_content_view/file_widget.vala12
-rw-r--r--main/src/ui/file_send_overlay.vala3
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;
}