aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-10-05 17:12:40 +0200
committerXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-10-09 16:38:03 +0200
commit1159a169b0296813ba6a80f973bacbedaf02f1ef (patch)
tree109b7dafa10c7ab5d6d71bb7eb8fb32a388ea6e0
parent9214e31b98d69d2c8ad56f8634345aeb98b234cc (diff)
Inhibit suspend on file upload/download
-rw-r--r--libdino/src/application.vala2
-rw-r--r--libdino/src/service/file_manager.vala4
-rw-r--r--main/src/ui/application.vala17
-rw-r--r--plugins/http-files/src/file_sender.vala7
4 files changed, 29 insertions, 1 deletions
diff --git a/libdino/src/application.vala b/libdino/src/application.vala
index 048a88ff..1c0368f8 100644
--- a/libdino/src/application.vala
+++ b/libdino/src/application.vala
@@ -15,6 +15,8 @@ public interface Application : GLib.Application {
public abstract StreamInteractor stream_interactor { get; set; }
public abstract Plugins.Registry plugin_registry { get; set; }
public abstract SearchPathGenerator? search_path_generator { get; set; }
+ public abstract uint inhibit_app(string reason);
+ public abstract void uninhibit_app(uint cookie);
internal static string print_xmpp;
diff --git a/libdino/src/service/file_manager.vala b/libdino/src/service/file_manager.vala
index f5096df7..090c9595 100644
--- a/libdino/src/service/file_manager.vala
+++ b/libdino/src/service/file_manager.vala
@@ -250,6 +250,9 @@ public class FileManager : StreamInteractionModule, Object {
OutputStream os = file.create(FileCreateFlags.REPLACE_DESTINATION);
file_transfer.cancellable.reset();
+
+ uint inhibit_cookie = Application.get_default()
+ .inhibit_app("Ongoing file download");
uint8[] buffer = new uint8[1024];
ssize_t read;
while ((read = yield input_stream.read_async(buffer, Priority.LOW, file_transfer.cancellable)) > 0) {
@@ -259,6 +262,7 @@ public class FileManager : StreamInteractionModule, Object {
buffer.length = 1024;
}
yield input_stream.close_async(Priority.LOW, file_transfer.cancellable);
+ Application.get_default().uninhibit_app(inhibit_cookie);
yield os.close_async(Priority.LOW, file_transfer.cancellable);
file_transfer.path = file.get_basename();
file_transfer.input_stream = yield file.read_async();
diff --git a/main/src/ui/application.vala b/main/src/ui/application.vala
index a7aaf075..0b92bf19 100644
--- a/main/src/ui/application.vala
+++ b/main/src/ui/application.vala
@@ -342,5 +342,20 @@ public class Dino.Ui.Application : Gtk.Application, Dino.Application {
});
dialog.present();
}
-}
+ private uint inhibit_app(string reason) {
+ uint inhibit_cookie = inhibit(window, SUSPEND, reason);
+
+ if (inhibit_cookie == 0) {
+ warning("suspend inhibit request failed or unsupported");
+ }
+
+ return inhibit_cookie;
+ }
+
+ private void uninhibit_app(uint inhibit_cookie) {
+ if (inhibit_cookie != 0) {
+ uninhibit(inhibit_cookie);
+ }
+ }
+}
diff --git a/plugins/http-files/src/file_sender.vala b/plugins/http-files/src/file_sender.vala
index 0dfa5b1b..9c2e8327 100644
--- a/plugins/http-files/src/file_sender.vala
+++ b/plugins/http-files/src/file_sender.vala
@@ -125,16 +125,23 @@ public class HttpFileSender : FileSender, Object {
foreach (var entry in file_send_data.headers.entries) {
put_message.request_headers.append(entry.key, entry.value);
}
+
+ uint inhibit_cookie = 0;
try {
+ inhibit_cookie = Application.get_default()
+ .inhibit_app("Ongoing file upload");
#if SOUP_3_0
yield session.send_async(put_message, GLib.Priority.LOW, file_transfer.cancellable);
#else
yield session.send_async(put_message, file_transfer.cancellable);
#endif
+ Application.get_default().uninhibit_app(inhibit_cookie);
+
if (put_message.status_code < 200 || put_message.status_code >= 300) {
throw new FileSendError.UPLOAD_FAILED("HTTP status code %s".printf(put_message.status_code.to_string()));
}
} catch (Error e) {
+ Application.get_default().uninhibit_app(inhibit_cookie);
throw new FileSendError.UPLOAD_FAILED("HTTP upload error: %s".printf(e.message));
}
}