diff options
author | Mustafa Quraish <mustafaq9@gmail.com> | 2022-01-16 23:14:31 -0500 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-01-20 10:39:12 +0100 |
commit | ee74aafdca1ae575276e2cb94c475450cb13d945 (patch) | |
tree | 3e07e9023fce1c355513ffd499f202d3557f1783 | |
parent | bba32de857ae392a0271fdcc0bfe0f57b52d136c (diff) | |
download | serenity-ee74aafdca1ae575276e2cb94c475450cb13d945.zip |
FileSystemAccessClient: Remove old API returning file descriptors :^)
Since all users of the old API are now removed, this commit removes all
the methods that returned raw file descriptors, in favor of returning
`ErrorOr<NonnullRefPtr<Core::File>`.
-rw-r--r-- | Userland/Libraries/LibFileSystemAccessClient/Client.cpp | 126 | ||||
-rw-r--r-- | Userland/Libraries/LibFileSystemAccessClient/Client.h | 23 |
2 files changed, 24 insertions, 125 deletions
diff --git a/Userland/Libraries/LibFileSystemAccessClient/Client.cpp b/Userland/Libraries/LibFileSystemAccessClient/Client.cpp index 91f6df081d..cdf9cc3bd6 100644 --- a/Userland/Libraries/LibFileSystemAccessClient/Client.cpp +++ b/Userland/Libraries/LibFileSystemAccessClient/Client.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2021, timmot <tiwwot@protonmail.com> + * Copyright (c) 2022, Mustafa Quraish <mustafa@serenityos.org> * * SPDX-License-Identifier: BSD-2-Clause */ @@ -25,88 +26,9 @@ Client& Client::the() return *s_the; } -Result Client::request_file_read_only_approved(i32 parent_window_id, String const& path) +Result Client::try_request_file_read_only_approved(GUI::Window* parent_window, String const& path) { m_promise = Core::Promise<Result>::construct(); - auto parent_window_server_client_id = GUI::WindowServerConnection::the().expose_client_id(); - auto child_window_server_client_id = expose_window_server_client_id(); - - GUI::WindowServerConnection::the().async_add_window_stealing_for_client(child_window_server_client_id, parent_window_id); - - ScopeGuard guard([parent_window_id, child_window_server_client_id] { - GUI::WindowServerConnection::the().async_remove_window_stealing_for_client(child_window_server_client_id, parent_window_id); - }); - - if (path.starts_with('/')) { - async_request_file_read_only_approved(parent_window_server_client_id, parent_window_id, path); - } else { - auto full_path = LexicalPath::join(Core::File::current_working_directory(), path).string(); - async_request_file_read_only_approved(parent_window_server_client_id, parent_window_id, full_path); - } - - return m_promise->await(); -} - -Result Client::request_file(i32 parent_window_id, String const& path, Core::OpenMode mode) -{ - m_promise = Core::Promise<Result>::construct(); - auto parent_window_server_client_id = GUI::WindowServerConnection::the().expose_client_id(); - auto child_window_server_client_id = expose_window_server_client_id(); - - GUI::WindowServerConnection::the().async_add_window_stealing_for_client(child_window_server_client_id, parent_window_id); - - ScopeGuard guard([parent_window_id, child_window_server_client_id] { - GUI::WindowServerConnection::the().async_remove_window_stealing_for_client(child_window_server_client_id, parent_window_id); - }); - - if (path.starts_with('/')) { - async_request_file(parent_window_server_client_id, parent_window_id, path, mode); - } else { - auto full_path = LexicalPath::join(Core::File::current_working_directory(), path).string(); - async_request_file(parent_window_server_client_id, parent_window_id, full_path, mode); - } - - return m_promise->await(); -} - -Result Client::open_file(i32 parent_window_id, String const& window_title, StringView path, Core::OpenMode requested_access) -{ - m_promise = Core::Promise<Result>::construct(); - auto parent_window_server_client_id = GUI::WindowServerConnection::the().expose_client_id(); - auto child_window_server_client_id = expose_window_server_client_id(); - - GUI::WindowServerConnection::the().async_add_window_stealing_for_client(child_window_server_client_id, parent_window_id); - - ScopeGuard guard([parent_window_id, child_window_server_client_id] { - GUI::WindowServerConnection::the().async_remove_window_stealing_for_client(child_window_server_client_id, parent_window_id); - }); - - async_prompt_open_file(parent_window_server_client_id, parent_window_id, window_title, path, requested_access); - - return m_promise->await(); -} - -Result Client::save_file(i32 parent_window_id, String const& name, String const ext, Core::OpenMode requested_access) -{ - m_promise = Core::Promise<Result>::construct(); - auto parent_window_server_client_id = GUI::WindowServerConnection::the().expose_client_id(); - auto child_window_server_client_id = expose_window_server_client_id(); - - GUI::WindowServerConnection::the().async_add_window_stealing_for_client(child_window_server_client_id, parent_window_id); - - ScopeGuard guard([parent_window_id, child_window_server_client_id] { - GUI::WindowServerConnection::the().async_remove_window_stealing_for_client(child_window_server_client_id, parent_window_id); - }); - - async_prompt_save_file(parent_window_server_client_id, parent_window_id, name.is_null() ? "Untitled" : name, ext.is_null() ? "txt" : ext, Core::StandardPaths::home_directory(), requested_access); - - return m_promise->await(); -} - -FileResult Client::try_request_file_read_only_approved(GUI::Window* parent_window, String const& path) -{ - m_file_promise = Core::Promise<FileResult>::construct(); - m_promise = nullptr; m_parent_window = parent_window; auto parent_window_server_client_id = GUI::WindowServerConnection::the().expose_client_id(); @@ -126,13 +48,12 @@ FileResult Client::try_request_file_read_only_approved(GUI::Window* parent_windo async_request_file_read_only_approved(parent_window_server_client_id, parent_window_id, full_path); } - return m_file_promise->await(); + return m_promise->await(); } -FileResult Client::try_request_file(GUI::Window* parent_window, String const& path, Core::OpenMode mode) +Result Client::try_request_file(GUI::Window* parent_window, String const& path, Core::OpenMode mode) { - m_file_promise = Core::Promise<FileResult>::construct(); - m_promise = nullptr; + m_promise = Core::Promise<Result>::construct(); m_parent_window = parent_window; auto parent_window_server_client_id = GUI::WindowServerConnection::the().expose_client_id(); @@ -152,13 +73,12 @@ FileResult Client::try_request_file(GUI::Window* parent_window, String const& pa async_request_file(parent_window_server_client_id, parent_window_id, full_path, mode); } - return m_file_promise->await(); + return m_promise->await(); } -FileResult Client::try_open_file(GUI::Window* parent_window, String const& window_title, StringView path, Core::OpenMode requested_access) +Result Client::try_open_file(GUI::Window* parent_window, String const& window_title, StringView path, Core::OpenMode requested_access) { - m_file_promise = Core::Promise<FileResult>::construct(); - m_promise = nullptr; + m_promise = Core::Promise<Result>::construct(); m_parent_window = parent_window; auto parent_window_server_client_id = GUI::WindowServerConnection::the().expose_client_id(); @@ -173,13 +93,12 @@ FileResult Client::try_open_file(GUI::Window* parent_window, String const& windo async_prompt_open_file(parent_window_server_client_id, parent_window_id, window_title, path, requested_access); - return m_file_promise->await(); + return m_promise->await(); } -FileResult Client::try_save_file(GUI::Window* parent_window, String const& name, String const ext, Core::OpenMode requested_access) +Result Client::try_save_file(GUI::Window* parent_window, String const& name, String const ext, Core::OpenMode requested_access) { - m_file_promise = Core::Promise<FileResult>::construct(); - m_promise = nullptr; + m_promise = Core::Promise<Result>::construct(); m_parent_window = parent_window; auto parent_window_server_client_id = GUI::WindowServerConnection::the().expose_client_id(); @@ -194,27 +113,18 @@ FileResult Client::try_save_file(GUI::Window* parent_window, String const& name, async_prompt_save_file(parent_window_server_client_id, parent_window_id, name.is_null() ? "Untitled" : name, ext.is_null() ? "txt" : ext, Core::StandardPaths::home_directory(), requested_access); - return m_file_promise->await(); + return m_promise->await(); } void Client::handle_prompt_end(i32 error, Optional<IPC::File> const& ipc_file, Optional<String> const& chosen_file) { - if (m_promise) { - if (error == 0) { - m_promise->resolve({ error, ipc_file->take_fd(), *chosen_file }); - } else { - m_promise->resolve({ error, {}, chosen_file }); - } - return; - } - - VERIFY(m_file_promise); + VERIFY(m_promise); if (error != 0) { // We don't want to show an error message for non-existent files since some applications may want // to handle it as opening a new, named file. if (error != -1 && error != ENOENT) GUI::MessageBox::show_error(m_parent_window, String::formatted("Opening \"{}\" failed: {}", *chosen_file, strerror(error))); - m_file_promise->resolve(Error::from_errno(error)); + m_promise->resolve(Error::from_errno(error)); return; } @@ -222,24 +132,24 @@ void Client::handle_prompt_end(i32 error, Optional<IPC::File> const& ipc_file, O auto fd = ipc_file->take_fd(); if (!file->open(fd, Core::OpenMode::ReadWrite, Core::File::ShouldCloseFileDescriptor::Yes) && file->error() != ENOENT) { GUI::MessageBox::show_error(m_parent_window, String::formatted("Opening \"{}\" failed: {}", *chosen_file, strerror(error))); - m_file_promise->resolve(Error::from_errno(file->error())); + m_promise->resolve(Error::from_errno(file->error())); return; } if (file->is_device()) { GUI::MessageBox::show_error(m_parent_window, String::formatted("Opening \"{}\" failed: Cannot open device files", *chosen_file)); - m_file_promise->resolve(Error::from_string_literal("Cannot open device files"sv)); + m_promise->resolve(Error::from_string_literal("Cannot open device files"sv)); return; } if (file->is_directory()) { GUI::MessageBox::show_error(m_parent_window, String::formatted("Opening \"{}\" failed: Cannot open directory", *chosen_file)); - m_file_promise->resolve(Error::from_string_literal("Cannot open directory"sv)); + m_promise->resolve(Error::from_string_literal("Cannot open directory"sv)); return; } file->set_filename(move(*chosen_file)); - m_file_promise->resolve(file); + m_promise->resolve(file); } void Client::die() diff --git a/Userland/Libraries/LibFileSystemAccessClient/Client.h b/Userland/Libraries/LibFileSystemAccessClient/Client.h index 850d23350d..759e15de03 100644 --- a/Userland/Libraries/LibFileSystemAccessClient/Client.h +++ b/Userland/Libraries/LibFileSystemAccessClient/Client.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2021, timmot <tiwwot@protonmail.com> + * Copyright (c) 2022, Mustafa Quraish <mustafa@serenityos.org> * * SPDX-License-Identifier: BSD-2-Clause */ @@ -16,13 +17,7 @@ namespace FileSystemAccessClient { -struct Result { - i32 error; - Optional<i32> fd; - Optional<String> chosen_file; -}; - -using FileResult = ErrorOr<NonnullRefPtr<Core::File>>; +using Result = ErrorOr<NonnullRefPtr<Core::File>>; class Client final : public IPC::ServerConnection<FileSystemAccessClientEndpoint, FileSystemAccessServerEndpoint> @@ -30,15 +25,10 @@ class Client final IPC_CLIENT_CONNECTION(Client, "/tmp/portal/filesystemaccess") public: - Result request_file_read_only_approved(i32 parent_window_id, String const& path); - Result request_file(i32 parent_window_id, String const& path, Core::OpenMode mode); - Result open_file(i32 parent_window_id, String const& window_title = {}, StringView path = Core::StandardPaths::home_directory(), Core::OpenMode requested_access = Core::OpenMode::ReadOnly); - Result save_file(i32 parent_window_id, String const& name, String const ext, Core::OpenMode requested_access = Core::OpenMode::WriteOnly | Core::OpenMode::Truncate); - - FileResult try_request_file_read_only_approved(GUI::Window* parent_window, String const& path); - FileResult try_request_file(GUI::Window* parent_window, String const& path, Core::OpenMode mode); - FileResult try_open_file(GUI::Window* parent_window, String const& window_title = {}, StringView path = Core::StandardPaths::home_directory(), Core::OpenMode requested_access = Core::OpenMode::ReadOnly); - FileResult try_save_file(GUI::Window* parent_window, String const& name, String const ext, Core::OpenMode requested_access = Core::OpenMode::WriteOnly | Core::OpenMode::Truncate); + Result try_request_file_read_only_approved(GUI::Window* parent_window, String const& path); + Result try_request_file(GUI::Window* parent_window, String const& path, Core::OpenMode mode); + Result try_open_file(GUI::Window* parent_window, String const& window_title = {}, StringView path = Core::StandardPaths::home_directory(), Core::OpenMode requested_access = Core::OpenMode::ReadOnly); + Result try_save_file(GUI::Window* parent_window, String const& name, String const ext, Core::OpenMode requested_access = Core::OpenMode::WriteOnly | Core::OpenMode::Truncate); static Client& the(); @@ -54,7 +44,6 @@ private: virtual void handle_prompt_end(i32 error, Optional<IPC::File> const& fd, Optional<String> const& chosen_file) override; RefPtr<Core::Promise<Result>> m_promise; - RefPtr<Core::Promise<FileResult>> m_file_promise; GUI::Window* m_parent_window { nullptr }; }; |