From 6a4b125fe50aaa3f59fdcc09f34b17ba23d49666 Mon Sep 17 00:00:00 2001 From: Karol Kosek Date: Sun, 22 May 2022 12:14:18 +0200 Subject: [PATCH] Spreadsheet: Make save functions take a Core::File instead of a filename This allows us to use FileSystemAccessClient functions. --- .../Spreadsheet/SpreadsheetWidget.cpp | 17 +++++++++-------- .../Spreadsheet/SpreadsheetWidget.h | 2 +- .../Applications/Spreadsheet/Workbook.cpp | 19 ++++--------------- Userland/Applications/Spreadsheet/Workbook.h | 2 +- 4 files changed, 15 insertions(+), 25 deletions(-) diff --git a/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp b/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp index 52e12c04ee..330a3d14ed 100644 --- a/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp +++ b/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -137,16 +136,18 @@ SpreadsheetWidget::SpreadsheetWidget(GUI::Window& parent_window, NonnullRefPtrVe return; } - save(current_filename()); + auto response = FileSystemAccessClient::Client::the().try_request_file(window(), current_filename(), Core::OpenMode::WriteOnly); + if (response.is_error()) + return; + save(*response.value()); }); m_save_as_action = GUI::CommonActions::make_save_as_action([&](auto&) { String name = "workbook"; - Optional save_path = GUI::FilePicker::get_save_filepath(window(), name, "sheets"); - if (!save_path.has_value()) + auto response = FileSystemAccessClient::Client::the().try_save_file(window(), name, "sheets"); + if (response.is_error()) return; - - save(save_path.value()); + save(*response.value()); update_window_title(); }); @@ -416,9 +417,9 @@ void SpreadsheetWidget::redo() update(); } -void SpreadsheetWidget::save(StringView filename) +void SpreadsheetWidget::save(Core::File& file) { - auto result = m_workbook->save(filename); + auto result = m_workbook->write_to_file(file); if (result.is_error()) { GUI::MessageBox::show_error(window(), result.error()); return; diff --git a/Userland/Applications/Spreadsheet/SpreadsheetWidget.h b/Userland/Applications/Spreadsheet/SpreadsheetWidget.h index ef9aa1442b..abc5864201 100644 --- a/Userland/Applications/Spreadsheet/SpreadsheetWidget.h +++ b/Userland/Applications/Spreadsheet/SpreadsheetWidget.h @@ -23,7 +23,7 @@ class SpreadsheetWidget final public: virtual ~SpreadsheetWidget() override = default; - void save(StringView filename); + void save(Core::File&); void load_file(Core::File&); bool request_close(); void add_sheet(); diff --git a/Userland/Applications/Spreadsheet/Workbook.cpp b/Userland/Applications/Spreadsheet/Workbook.cpp index 1e54a56636..32887e6af3 100644 --- a/Userland/Applications/Spreadsheet/Workbook.cpp +++ b/Userland/Applications/Spreadsheet/Workbook.cpp @@ -64,25 +64,14 @@ Result Workbook::open_file(Core::File& file) return true; } -Result Workbook::save(StringView filename) +Result Workbook::write_to_file(Core::File& file) { - auto mime = Core::guess_mime_type_based_on_filename(filename); - auto file = Core::File::construct(filename); - file->open(Core::OpenMode::WriteOnly); - if (!file->is_open()) { - StringBuilder sb; - sb.append("Failed to open "); - sb.append(filename); - sb.append(" for write. Error: "); - sb.append(file->error_string()); - - return sb.to_string(); - } + auto mime = Core::guess_mime_type_based_on_filename(file.filename()); // Make an export dialog, we might need to import it. - TRY(ExportDialog::make_and_run_for(mime, *file, *this)); + TRY(ExportDialog::make_and_run_for(mime, file, *this)); - set_filename(filename); + set_filename(file.filename()); set_dirty(false); return true; } diff --git a/Userland/Applications/Spreadsheet/Workbook.h b/Userland/Applications/Spreadsheet/Workbook.h index b1b28beee9..656d00fc96 100644 --- a/Userland/Applications/Spreadsheet/Workbook.h +++ b/Userland/Applications/Spreadsheet/Workbook.h @@ -17,8 +17,8 @@ class Workbook { public: Workbook(NonnullRefPtrVector&& sheets, GUI::Window& parent_window); - Result save(StringView filename); Result open_file(Core::File&); + Result write_to_file(Core::File&); String const& current_filename() const { return m_current_filename; } bool set_filename(String const& filename);