aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-09-11 21:43:14 +0200
committerXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-10-09 14:08:52 +0200
commitfefcf353520ebbe9e63f59e25a85fc122a5acc7a (patch)
tree8f272bd6137c5663f3d77ed337d6eec1d7695fd0
parent90bee87ff5cf6cf3ee481394ece343e2446ac70f (diff)
Allow to resume failed transfers
-rw-r--r--libdino/src/service/file_manager.vala3
-rw-r--r--main/src/ui/conversation_content_view/file_widget.vala3
2 files changed, 5 insertions, 1 deletions
diff --git a/libdino/src/service/file_manager.vala b/libdino/src/service/file_manager.vala
index 89ae1ce1..2ef79d84 100644
--- a/libdino/src/service/file_manager.vala
+++ b/libdino/src/service/file_manager.vala
@@ -210,6 +210,8 @@ public class FileManager : StreamInteractionModule, Object {
private async void download_file_internal(FileProvider file_provider, FileTransfer file_transfer, Conversation conversation) {
try {
+ file_transfer.cancellable.reset();
+
// Get meta info
FileReceiveData receive_data = file_provider.get_file_receive_data(file_transfer);
FileDecryptor? file_decryptor = null;
@@ -246,6 +248,7 @@ public class FileManager : StreamInteractionModule, Object {
File file = File.new_for_path(Path.build_filename(get_storage_dir(), filename));
OutputStream os = file.create(FileCreateFlags.REPLACE_DESTINATION);
+ file_transfer.cancellable.reset();
uint8[] buffer = new uint8[1024];
ssize_t read;
while ((read = yield input_stream.read_async(buffer, Priority.LOW, file_transfer.cancellable)) > 0) {
diff --git a/main/src/ui/conversation_content_view/file_widget.vala b/main/src/ui/conversation_content_view/file_widget.vala
index b63195dc..cac6fda4 100644
--- a/main/src/ui/conversation_content_view/file_widget.vala
+++ b/main/src/ui/conversation_content_view/file_widget.vala
@@ -198,12 +198,13 @@ public class FileDefaultWidgetController : Object {
open_file();
}
break;
+ case FileTransfer.State.FAILED:
case FileTransfer.State.NOT_STARTED:
assert(stream_interactor != null && file_transfer != null);
stream_interactor.get_module(FileManager.IDENTITY).download_file.begin(file_transfer);
break;
default:
- // Clicking doesn't do anything in FAILED and IN_PROGRESS states
+ // Clicking doesn't do anything in IN_PROGRESS states
break;
}
return false;