From f34466ad4651ed2ac5ddbafd3cf3b067f2dce3e5 Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Wed, 15 Nov 2023 13:50:48 +0100 Subject: [PATCH 1/4] Library: Wite to file in Save File entry --- src/Library/demos/Save File/main.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Library/demos/Save File/main.js b/src/Library/demos/Save File/main.js index cde42ccc2..fd15b797c 100644 --- a/src/Library/demos/Save File/main.js +++ b/src/Library/demos/Save File/main.js @@ -2,15 +2,31 @@ import Gio from "gi://Gio"; import Gtk from "gi://Gtk"; Gio._promisify(Gtk.FileDialog.prototype, "save", "save_finish"); +Gio._promisify( + Gio.File.prototype, + "replace_contents_async", + "replace_contents_finish", +); + const button = workbench.builder.get_object("button"); async function saveFile() { const dialog = new Gtk.FileDialog({ initial_name: "Workbench.txt", }); - // "save" returns a Gio.File you can write to + // "dialog.save" returns a Gio.File you can write to const file = await dialog.save(workbench.window, null); - console.log(`Save file to ${file.get_path()}`); + + const contents = new TextEncoder().encode("Hello from Workbench!"); + await file.replace_contents_async( + contents, + null, + false, + Gio.FileCreateFlags.NONE, + null, + ); + + console.log(`File ${file.get_basename()} saved`); } // Handle button click From 7adda3fc970f582f9a8c63b0fc188e09ab7cadc4 Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Wed, 15 Nov 2023 14:07:40 +0100 Subject: [PATCH 2/4] python --- src/Library/demos/Save File/main.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Library/demos/Save File/main.py b/src/Library/demos/Save File/main.py index dd42ff0af..259f2078d 100644 --- a/src/Library/demos/Save File/main.py +++ b/src/Library/demos/Save File/main.py @@ -7,10 +7,19 @@ button = workbench.builder.get_object("button") -def on_output_path_selected(_dialog, result): +def on_output_path_selected(dialog, result): # "save_finish" returns a Gio.File you can write to - file = _dialog.save_finish(result) - print(f"Save file to {file.get_path()}") + file = dialog.save_finish(result) + + contents = "Hello from Workbench!".encode("UTF-8") + file.replace_contents( + contents, + etag=None, + make_backup=False, + flags=Gio.FileCreateFlags.NONE, + cancellable=None, + ) + print(f"File {file.get_basename()} saved") def save_file(button): From df5902c7bb3c33105fad4eea35fbb3a3a760628c Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Wed, 15 Nov 2023 14:08:40 +0100 Subject: [PATCH 3/4] python2 --- src/Library/demos/Save File/main.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Library/demos/Save File/main.py b/src/Library/demos/Save File/main.py index 259f2078d..c7f02a741 100644 --- a/src/Library/demos/Save File/main.py +++ b/src/Library/demos/Save File/main.py @@ -7,24 +7,28 @@ button = workbench.builder.get_object("button") -def on_output_path_selected(dialog, result): +def save_file(button): + dialog = Gtk.FileDialog(initial_name="Workbench.txt") + dialog.save(parent=workbench.window, cancellable=None, callback=on_save) + + +def on_save(dialog, result): # "save_finish" returns a Gio.File you can write to file = dialog.save_finish(result) - contents = "Hello from Workbench!".encode("UTF-8") - file.replace_contents( + file.replace_contents_async( contents, etag=None, make_backup=False, flags=Gio.FileCreateFlags.NONE, cancellable=None, + callback=on_replace_contents, ) - print(f"File {file.get_basename()} saved") -def save_file(button): - dialog = Gtk.FileDialog(initial_name="Workbench.txt") - dialog.save(workbench.window, None, on_output_path_selected) +def on_replace_contents(file, result): + file.replace_contents_finish(result) + print(f"File {file.get_basename()} saved") # Handle button click From 64644d5f08b7d7157bf5e10238b5e534ef00b63b Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Wed, 15 Nov 2023 15:00:00 +0100 Subject: [PATCH 4/4] f --- data/app.metainfo.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/data/app.metainfo.xml b/data/app.metainfo.xml index de10fcc9d..888d14506 100644 --- a/data/app.metainfo.xml +++ b/data/app.metainfo.xml @@ -63,6 +63,7 @@
  • Library: Simplify "Column View" entry
  • Library: Simplify "Status Page" entry
  • Library: Modernize "HTTP Image" entry
  • +
  • Library: Make the "Save File" entry actually save a file
  • Library: Port "Welcome" entry to Python
  • Library: Port "Actions" entry to Python
  • Library: Port "Spinner" entry to Python