diff options
author | huttongrabiel <huttonthomas@icloud.com> | 2023-03-17 11:53:43 -0700 |
---|---|---|
committer | Sam Atkins <atkinssj@gmail.com> | 2023-03-22 22:33:19 +0000 |
commit | 6a5c561a41d2591e9ca398ad75bc06066428d34a (patch) | |
tree | b1f48aa75b13391a3e0bc4570ee55f5c01938509 | |
parent | 106ad6bb13e03636e0e8285f63c0b1cd46b2c57d (diff) | |
download | serenity-6a5c561a41d2591e9ca398ad75bc06066428d34a.zip |
FileSystemAccessServer: Implement FileTypeFilter to open_file()
This is the same functionality as in FilePicker. It allows the
specification of what file types are allowed.
5 files changed, 10 insertions, 7 deletions
diff --git a/Userland/Libraries/LibFileSystemAccessClient/Client.cpp b/Userland/Libraries/LibFileSystemAccessClient/Client.cpp index cd362c60f5..ca5a84e1c8 100644 --- a/Userland/Libraries/LibFileSystemAccessClient/Client.cpp +++ b/Userland/Libraries/LibFileSystemAccessClient/Client.cpp @@ -74,7 +74,7 @@ Result Client::request_file(GUI::Window* parent_window, DeprecatedString const& return handle_promise(id); } -Result Client::open_file(GUI::Window* parent_window, DeprecatedString const& window_title, StringView path, Core::File::OpenMode requested_access) +Result Client::open_file(GUI::Window* parent_window, DeprecatedString const& window_title, StringView path, Core::File::OpenMode requested_access, Optional<Vector<GUI::FileTypeFilter>> const& allowed_file_types) { auto const id = get_new_id(); m_promises.set(id, PromiseAndWindow { { Core::Promise<Result>::construct() }, parent_window }); @@ -89,7 +89,7 @@ Result Client::open_file(GUI::Window* parent_window, DeprecatedString const& win GUI::ConnectionToWindowServer::the().remove_window_stealing_for_client(child_window_server_client_id, parent_window_id); }); - async_prompt_open_file(id, parent_window_server_client_id, parent_window_id, window_title, path, requested_access); + async_prompt_open_file(id, parent_window_server_client_id, parent_window_id, window_title, path, requested_access, allowed_file_types); return handle_promise(id); } diff --git a/Userland/Libraries/LibFileSystemAccessClient/Client.h b/Userland/Libraries/LibFileSystemAccessClient/Client.h index daf6c6f967..36e8718a2e 100644 --- a/Userland/Libraries/LibFileSystemAccessClient/Client.h +++ b/Userland/Libraries/LibFileSystemAccessClient/Client.h @@ -14,6 +14,7 @@ #include <LibCore/File.h> #include <LibCore/Promise.h> #include <LibCore/StandardPaths.h> +#include <LibGUI/FileTypeFilter.h> #include <LibGUI/Window.h> #include <LibIPC/ConnectionToServer.h> @@ -47,7 +48,7 @@ class Client final public: Result request_file_read_only_approved(GUI::Window* parent_window, DeprecatedString const& path); Result request_file(GUI::Window* parent_window, DeprecatedString const& path, Core::File::OpenMode requested_access); - Result open_file(GUI::Window* parent_window, DeprecatedString const& window_title = {}, StringView path = Core::StandardPaths::home_directory(), Core::File::OpenMode requested_access = Core::File::OpenMode::Read); + Result open_file(GUI::Window* parent_window, DeprecatedString const& window_title = {}, StringView path = Core::StandardPaths::home_directory(), Core::File::OpenMode requested_access = Core::File::OpenMode::Read, Optional<Vector<GUI::FileTypeFilter>> const& = {}); Result save_file(GUI::Window* parent_window, DeprecatedString const& name, DeprecatedString const ext, Core::File::OpenMode requested_access = Core::File::OpenMode::Write | Core::File::OpenMode::Truncate); static Client& the(); diff --git a/Userland/Services/FileSystemAccessServer/ConnectionFromClient.cpp b/Userland/Services/FileSystemAccessServer/ConnectionFromClient.cpp index 236b347c97..dfc25edae3 100644 --- a/Userland/Services/FileSystemAccessServer/ConnectionFromClient.cpp +++ b/Userland/Services/FileSystemAccessServer/ConnectionFromClient.cpp @@ -112,14 +112,14 @@ void ConnectionFromClient::request_file(i32 request_id, i32 window_server_client request_file_handler(request_id, window_server_client_id, parent_window_id, path, requested_access, ShouldPrompt::Yes); } -void ConnectionFromClient::prompt_open_file(i32 request_id, i32 window_server_client_id, i32 parent_window_id, DeprecatedString const& window_title, DeprecatedString const& path_to_view, Core::File::OpenMode requested_access) +void ConnectionFromClient::prompt_open_file(i32 request_id, i32 window_server_client_id, i32 parent_window_id, DeprecatedString const& window_title, DeprecatedString const& path_to_view, Core::File::OpenMode requested_access, Optional<Vector<GUI::FileTypeFilter>> const& allowed_file_types) { auto relevant_permissions = requested_access & (Core::File::OpenMode::Read | Core::File::OpenMode::Write); VERIFY(relevant_permissions != Core::File::OpenMode::NotOpen); auto main_window = create_dummy_child_window(window_server_client_id, parent_window_id); - auto user_picked_file = GUI::FilePicker::get_open_filepath(main_window, window_title, path_to_view); + auto user_picked_file = GUI::FilePicker::get_open_filepath(main_window, window_title, path_to_view, false, GUI::Dialog::ScreenPosition::CenterWithinParent, allowed_file_types); prompt_helper(request_id, user_picked_file, requested_access); } diff --git a/Userland/Services/FileSystemAccessServer/ConnectionFromClient.h b/Userland/Services/FileSystemAccessServer/ConnectionFromClient.h index 0ad767a359..0279d0cec9 100644 --- a/Userland/Services/FileSystemAccessServer/ConnectionFromClient.h +++ b/Userland/Services/FileSystemAccessServer/ConnectionFromClient.h @@ -10,6 +10,7 @@ #include <FileSystemAccessServer/FileSystemAccessClientEndpoint.h> #include <FileSystemAccessServer/FileSystemAccessServerEndpoint.h> #include <LibCore/Forward.h> +#include <LibGUI/FileTypeFilter.h> #include <LibGUI/Forward.h> #include <LibIPC/ConnectionFromClient.h> @@ -29,7 +30,7 @@ private: virtual void request_file_read_only_approved(i32, i32, i32, DeprecatedString const&) override; virtual void request_file(i32, i32, i32, DeprecatedString const&, Core::File::OpenMode) override; - virtual void prompt_open_file(i32, i32, i32, DeprecatedString const&, DeprecatedString const&, Core::File::OpenMode) override; + virtual void prompt_open_file(i32, i32, i32, DeprecatedString const&, DeprecatedString const&, Core::File::OpenMode, Optional<Vector<GUI::FileTypeFilter>> const&) override; virtual void prompt_save_file(i32, i32, i32, DeprecatedString const&, DeprecatedString const&, DeprecatedString const&, Core::File::OpenMode) override; void prompt_helper(i32, Optional<DeprecatedString> const&, Core::File::OpenMode); diff --git a/Userland/Services/FileSystemAccessServer/FileSystemAccessServer.ipc b/Userland/Services/FileSystemAccessServer/FileSystemAccessServer.ipc index f705bb6811..17a8863140 100644 --- a/Userland/Services/FileSystemAccessServer/FileSystemAccessServer.ipc +++ b/Userland/Services/FileSystemAccessServer/FileSystemAccessServer.ipc @@ -1,10 +1,11 @@ #include <AK/URL.h> +#include <LibGUI/FileTypeFilter.h> endpoint FileSystemAccessServer { request_file_read_only_approved(i32 request_id, i32 window_server_client_id, i32 window_id, DeprecatedString path) =| request_file(i32 request_id, i32 window_server_client_id, i32 window_id, DeprecatedString path, Core::File::OpenMode requested_access) =| - prompt_open_file(i32 request_id, i32 window_server_client_id, i32 window_id, DeprecatedString window_title, DeprecatedString path_to_view, Core::File::OpenMode requested_access) =| + prompt_open_file(i32 request_id, i32 window_server_client_id, i32 window_id, DeprecatedString window_title, DeprecatedString path_to_view, Core::File::OpenMode requested_access, Optional<Vector<GUI::FileTypeFilter>> allowed_file_types) =| prompt_save_file(i32 request_id, i32 window_server_client_id, i32 window_id, DeprecatedString title, DeprecatedString ext, DeprecatedString path_to_view, Core::File::OpenMode requested_access) =| expose_window_server_client_id() => (i32 client_id) |