瀏覽代碼

SpreadSheet: Use FileSystemAccessClient::try_* APIs

Mustafa Quraish 3 年之前
父節點
當前提交
bba32de857

+ 5 - 10
Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp

@@ -124,15 +124,10 @@ SpreadsheetWidget::SpreadsheetWidget(GUI::Window& parent_window, NonnullRefPtrVe
         if (!load_path.has_value())
             return;
 
-        auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(window()->window_id(), *load_path);
-
-        if (response.error != 0) {
-            if (response.error != -1)
-                GUI::MessageBox::show_error(window(), String::formatted("Opening \"{}\" failed: {}", *response.chosen_file, strerror(response.error)));
+        auto response = FileSystemAccessClient::Client::the().try_request_file_read_only_approved(window(), *load_path);
+        if (response.is_error())
             return;
-        }
-
-        load_file(*response.fd, *load_path);
+        load_file(*response.value());
     });
 
     m_save_action = GUI::CommonActions::make_save_action([&](auto&) {
@@ -400,9 +395,9 @@ void SpreadsheetWidget::save(StringView filename)
         GUI::MessageBox::show_error(window(), result.error());
 }
 
-void SpreadsheetWidget::load_file(int fd, StringView filename)
+void SpreadsheetWidget::load_file(Core::File& file)
 {
-    auto result = m_workbook->open_file(fd, filename);
+    auto result = m_workbook->open_file(file);
     if (result.is_error()) {
         GUI::MessageBox::show_error(window(), result.error());
         return;

+ 1 - 1
Userland/Applications/Spreadsheet/SpreadsheetWidget.h

@@ -20,7 +20,7 @@ public:
     ~SpreadsheetWidget();
 
     void save(StringView filename);
-    void load_file(int fd, StringView filename);
+    void load_file(Core::File&);
     bool request_close();
     void add_sheet();
     void add_sheet(NonnullRefPtr<Sheet>&&);

+ 7 - 14
Userland/Applications/Spreadsheet/Workbook.cpp

@@ -51,15 +51,9 @@ bool Workbook::set_filename(const String& filename)
     return true;
 }
 
-Result<bool, String> Workbook::open_file(int fd, StringView filename)
+Result<bool, String> Workbook::open_file(Core::File& file)
 {
-    auto file = Core::File::construct();
-
-    if (!file->open(fd, Core::OpenMode::ReadOnly, Core::File::ShouldCloseFileDescriptor::Yes) && file->error() != ENOENT) {
-        return String::formatted("Opening \"{}\" failed: {}", file, strerror(errno));
-    }
-
-    auto mime = Core::guess_mime_type_based_on_filename(filename);
+    auto mime = Core::guess_mime_type_based_on_filename(file.filename());
 
     // Make an import dialog, we might need to import it.
     auto result = ImportDialog::make_and_run_for(m_parent_window, mime, file, *this);
@@ -68,25 +62,24 @@ Result<bool, String> Workbook::open_file(int fd, StringView filename)
 
     m_sheets = result.release_value();
 
-    set_filename(filename);
+    set_filename(file.filename());
 
     return true;
 }
 
 Result<bool, String> Workbook::load(StringView filename)
 {
-    auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(m_parent_window.window_id(), filename);
-    if (response.error != 0) {
+    auto response = FileSystemAccessClient::Client::the().try_request_file_read_only_approved(&m_parent_window, filename);
+    if (response.is_error()) {
         StringBuilder sb;
         sb.append("Failed to open ");
         sb.append(filename);
         sb.append(" for reading. Error: ");
-        sb.appendff("{}", response.error);
-
+        sb.appendff("{}", response.error());
         return sb.to_string();
     }
 
-    return open_file(*response.fd, filename);
+    return open_file(*response.value());
 }
 
 Result<bool, String> Workbook::save(StringView filename)

+ 1 - 1
Userland/Applications/Spreadsheet/Workbook.h

@@ -19,7 +19,7 @@ public:
 
     Result<bool, String> save(StringView filename);
     Result<bool, String> load(StringView filename);
-    Result<bool, String> open_file(int fd, StringView filename);
+    Result<bool, String> open_file(Core::File&);
 
     const String& current_filename() const { return m_current_filename; }
     bool set_filename(const String& filename);

+ 3 - 7
Userland/Applications/Spreadsheet/main.cpp

@@ -94,14 +94,10 @@ int main(int argc, char* argv[])
     window->show();
 
     if (filename) {
-        auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(window->window_id(), filename);
-
-        if (response.error != 0) {
-            if (response.error != -1)
-                GUI::MessageBox::show_error(window, String::formatted("Opening \"{}\" failed: {}", *response.chosen_file, strerror(response.error)));
+        auto response = FileSystemAccessClient::Client::the().try_request_file_read_only_approved(window, filename);
+        if (response.is_error())
             return 1;
-        }
-        spreadsheet_widget.load_file(*response.fd, filename);
+        spreadsheet_widget.load_file(*response.value());
     }
 
     return app->exec();