Skip to content

Commit e8249d7

Browse files
LucasCholletlinusg
authored andcommitted
LibFileSystemAccessClient: Remove the deprecated API
Concerned functions are: - try_request_file_read_only_approved_deprecated - try_request_file_deprecated - try_open_file_deprecated - try_save_file_deprecated It also allows some simplifications in the implementation of the client.
1 parent ba40ef1 commit e8249d7

File tree

6 files changed

+19
-158
lines changed

6 files changed

+19
-158
lines changed

Userland/Applications/CrashReporter/main.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <AK/URL.h>
1313
#include <Applications/CrashReporter/CrashReporterWindowGML.h>
1414
#include <LibCore/ArgsParser.h>
15+
#include <LibCore/DeprecatedFile.h>
1516
#include <LibCore/System.h>
1617
#include <LibCoredump/Backtrace.h>
1718
#include <LibCoredump/Reader.h>

Userland/Applications/Spreadsheet/main.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <AK/ScopeGuard.h>
1111
#include <AK/Try.h>
1212
#include <LibCore/ArgsParser.h>
13+
#include <LibCore/DeprecatedFile.h>
1314
#include <LibCore/System.h>
1415
#include <LibFileSystemAccessClient/Client.h>
1516
#include <LibGUI/Application.h>

Userland/Applications/ThemeEditor/MainWidget.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <Applications/ThemeEditor/MetricPropertyGML.h>
1616
#include <Applications/ThemeEditor/PathPropertyGML.h>
1717
#include <Applications/ThemeEditor/ThemeEditorGML.h>
18+
#include <LibCore/DeprecatedFile.h>
1819
#include <LibFileSystemAccessClient/Client.h>
1920
#include <LibGUI/ActionGroup.h>
2021
#include <LibGUI/BoxLayout.h>

Userland/Applications/ThemeEditor/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
*/
1010

1111
#include "MainWidget.h"
12-
#include "PreviewWidget.h"
1312
#include <LibCore/ArgsParser.h>
13+
#include <LibCore/DeprecatedFile.h>
1414
#include <LibCore/System.h>
1515
#include <LibFileSystemAccessClient/Client.h>
1616
#include <LibGUI/Application.h>

Userland/Libraries/LibFileSystemAccessClient/Client.cpp

Lines changed: 12 additions & 147 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77

88
#include <AK/LexicalPath.h>
9+
#include <LibCore/DeprecatedFile.h>
910
#include <LibFileSystemAccessClient/Client.h>
1011
#include <LibGUI/ConnectionToWindowServer.h>
1112
#include <LibGUI/MessageBox.h>
@@ -22,31 +23,6 @@ Client& Client::the()
2223
return *s_the;
2324
}
2425

25-
DeprecatedResult Client::try_request_file_read_only_approved_deprecated(GUI::Window* parent_window, DeprecatedString const& path)
26-
{
27-
auto const id = get_new_id();
28-
m_promises.set(id, PromiseAndWindow { { Core::Promise<DeprecatedResult>::construct() }, parent_window });
29-
30-
auto parent_window_server_client_id = GUI::ConnectionToWindowServer::the().expose_client_id();
31-
auto child_window_server_client_id = expose_window_server_client_id();
32-
auto parent_window_id = parent_window->window_id();
33-
34-
GUI::ConnectionToWindowServer::the().add_window_stealing_for_client(child_window_server_client_id, parent_window_id);
35-
36-
ScopeGuard guard([parent_window_id, child_window_server_client_id] {
37-
GUI::ConnectionToWindowServer::the().remove_window_stealing_for_client(child_window_server_client_id, parent_window_id);
38-
});
39-
40-
if (path.starts_with('/')) {
41-
async_request_file_read_only_approved(id, parent_window_server_client_id, parent_window_id, path);
42-
} else {
43-
auto full_path = LexicalPath::join(Core::DeprecatedFile::current_working_directory(), path).string();
44-
async_request_file_read_only_approved(id, parent_window_server_client_id, parent_window_id, full_path);
45-
}
46-
47-
return handle_promise<DeprecatedResult>(id);
48-
}
49-
5026
Result Client::request_file_read_only_approved(GUI::Window* parent_window, DeprecatedString const& path)
5127
{
5228
auto const id = get_new_id();
@@ -69,55 +45,7 @@ Result Client::request_file_read_only_approved(GUI::Window* parent_window, Depre
6945
async_request_file_read_only_approved(id, parent_window_server_client_id, parent_window_id, full_path);
7046
}
7147

72-
return handle_promise<Result>(id);
73-
}
74-
75-
static Core::File::OpenMode to_stream_open_mode(Core::OpenMode open_mode)
76-
{
77-
Core::File::OpenMode result {};
78-
if ((open_mode & Core::OpenMode::ReadOnly) == Core::OpenMode::ReadOnly)
79-
result |= Core::File::OpenMode::Read;
80-
if ((open_mode & Core::OpenMode::WriteOnly) == Core::OpenMode::WriteOnly)
81-
result |= Core::File::OpenMode::Write;
82-
if ((open_mode & Core::OpenMode::ReadWrite) == Core::OpenMode::ReadWrite)
83-
result |= Core::File::OpenMode::ReadWrite;
84-
if ((open_mode & Core::OpenMode::Append) == Core::OpenMode::Append)
85-
result |= Core::File::OpenMode::Append;
86-
if ((open_mode & Core::OpenMode::Truncate) == Core::OpenMode::Truncate)
87-
result |= Core::File::OpenMode::Truncate;
88-
if ((open_mode & Core::OpenMode::MustBeNew) == Core::OpenMode::MustBeNew)
89-
result |= Core::File::OpenMode::MustBeNew;
90-
if ((open_mode & Core::OpenMode::KeepOnExec) == Core::OpenMode::KeepOnExec)
91-
result |= Core::File::OpenMode::KeepOnExec;
92-
93-
return result;
94-
}
95-
96-
DeprecatedResult Client::try_request_file_deprecated(GUI::Window* parent_window, DeprecatedString const& path, Core::OpenMode deprecated_mode)
97-
{
98-
auto const id = get_new_id();
99-
m_promises.set(id, PromiseAndWindow { { Core::Promise<DeprecatedResult>::construct() }, parent_window });
100-
101-
auto parent_window_server_client_id = GUI::ConnectionToWindowServer::the().expose_client_id();
102-
auto child_window_server_client_id = expose_window_server_client_id();
103-
auto parent_window_id = parent_window->window_id();
104-
105-
GUI::ConnectionToWindowServer::the().add_window_stealing_for_client(child_window_server_client_id, parent_window_id);
106-
107-
ScopeGuard guard([parent_window_id, child_window_server_client_id] {
108-
GUI::ConnectionToWindowServer::the().remove_window_stealing_for_client(child_window_server_client_id, parent_window_id);
109-
});
110-
111-
auto const mode = to_stream_open_mode(deprecated_mode);
112-
113-
if (path.starts_with('/')) {
114-
async_request_file(id, parent_window_server_client_id, parent_window_id, path, mode);
115-
} else {
116-
auto full_path = LexicalPath::join(Core::DeprecatedFile::current_working_directory(), path).string();
117-
async_request_file(id, parent_window_server_client_id, parent_window_id, full_path, mode);
118-
}
119-
120-
return handle_promise<DeprecatedResult>(id);
48+
return handle_promise(id);
12149
}
12250

12351
Result Client::request_file(GUI::Window* parent_window, DeprecatedString const& path, Core::File::OpenMode mode)
@@ -142,29 +70,7 @@ Result Client::request_file(GUI::Window* parent_window, DeprecatedString const&
14270
async_request_file(id, parent_window_server_client_id, parent_window_id, full_path, mode);
14371
}
14472

145-
return handle_promise<Result>(id);
146-
}
147-
148-
DeprecatedResult Client::try_open_file_deprecated(GUI::Window* parent_window, DeprecatedString const& window_title, StringView path, Core::OpenMode deprecated_requested_access)
149-
{
150-
auto const id = get_new_id();
151-
m_promises.set(id, PromiseAndWindow { { Core::Promise<DeprecatedResult>::construct() }, parent_window });
152-
153-
auto parent_window_server_client_id = GUI::ConnectionToWindowServer::the().expose_client_id();
154-
auto child_window_server_client_id = expose_window_server_client_id();
155-
auto parent_window_id = parent_window->window_id();
156-
157-
GUI::ConnectionToWindowServer::the().add_window_stealing_for_client(child_window_server_client_id, parent_window_id);
158-
159-
ScopeGuard guard([parent_window_id, child_window_server_client_id] {
160-
GUI::ConnectionToWindowServer::the().remove_window_stealing_for_client(child_window_server_client_id, parent_window_id);
161-
});
162-
163-
auto const requested_access = to_stream_open_mode(deprecated_requested_access);
164-
165-
async_prompt_open_file(id, parent_window_server_client_id, parent_window_id, window_title, path, requested_access);
166-
167-
return handle_promise<DeprecatedResult>(id);
73+
return handle_promise(id);
16874
}
16975

17076
Result Client::open_file(GUI::Window* parent_window, DeprecatedString const& window_title, StringView path, Core::File::OpenMode requested_access)
@@ -184,29 +90,7 @@ Result Client::open_file(GUI::Window* parent_window, DeprecatedString const& win
18490

18591
async_prompt_open_file(id, parent_window_server_client_id, parent_window_id, window_title, path, requested_access);
18692

187-
return handle_promise<Result>(id);
188-
}
189-
190-
DeprecatedResult Client::try_save_file_deprecated(GUI::Window* parent_window, DeprecatedString const& name, DeprecatedString const ext, Core::OpenMode deprecated_requested_access)
191-
{
192-
auto const id = get_new_id();
193-
m_promises.set(id, PromiseAndWindow { { Core::Promise<DeprecatedResult>::construct() }, parent_window });
194-
195-
auto parent_window_server_client_id = GUI::ConnectionToWindowServer::the().expose_client_id();
196-
auto child_window_server_client_id = expose_window_server_client_id();
197-
auto parent_window_id = parent_window->window_id();
198-
199-
GUI::ConnectionToWindowServer::the().add_window_stealing_for_client(child_window_server_client_id, parent_window_id);
200-
201-
ScopeGuard guard([parent_window_id, child_window_server_client_id] {
202-
GUI::ConnectionToWindowServer::the().remove_window_stealing_for_client(child_window_server_client_id, parent_window_id);
203-
});
204-
205-
auto const requested_access = to_stream_open_mode(deprecated_requested_access);
206-
207-
async_prompt_save_file(id, parent_window_server_client_id, parent_window_id, name.is_null() ? "Untitled" : name, ext.is_null() ? "txt" : ext, Core::StandardPaths::home_directory(), requested_access);
208-
209-
return handle_promise<DeprecatedResult>(id);
93+
return handle_promise(id);
21094
}
21195

21296
Result Client::save_file(GUI::Window* parent_window, DeprecatedString const& name, DeprecatedString const ext, Core::File::OpenMode requested_access)
@@ -226,7 +110,7 @@ Result Client::save_file(GUI::Window* parent_window, DeprecatedString const& nam
226110

227111
async_prompt_save_file(id, parent_window_server_client_id, parent_window_id, name.is_null() ? "Untitled" : name, ext.is_null() ? "txt" : ext, Core::StandardPaths::home_directory(), requested_access);
228112

229-
return handle_promise<Result>(id);
113+
return handle_promise(id);
230114
}
231115

232116
void Client::handle_prompt_end(i32 request_id, i32 error, Optional<IPC::File> const& ipc_file, Optional<DeprecatedString> const& chosen_file)
@@ -235,42 +119,24 @@ void Client::handle_prompt_end(i32 request_id, i32 error, Optional<IPC::File> co
235119
VERIFY(potential_data.has_value());
236120
auto& request_data = potential_data.value();
237121

238-
auto const resolve_any_promise = [&promise = request_data.promise](Error&& error) {
239-
if (promise.has<PromiseType<DeprecatedResult>>()) {
240-
promise.get<PromiseType<DeprecatedResult>>()->resolve(move(error));
241-
return;
242-
}
243-
promise.get<PromiseType<Result>>()->resolve(move(error));
244-
};
245-
246122
if (error != 0) {
247123
// We don't want to show an error message for non-existent files since some applications may want
248124
// to handle it as opening a new, named file.
249125
if (error != -1 && error != ENOENT)
250126
GUI::MessageBox::show_error(request_data.parent_window, DeprecatedString::formatted("Opening \"{}\" failed: {}", *chosen_file, strerror(error)));
251-
resolve_any_promise(Error::from_errno(error));
127+
request_data.promise->resolve(Error::from_errno(error));
252128
return;
253129
}
254130

255131
if (Core::DeprecatedFile::is_device(ipc_file->fd())) {
256132
GUI::MessageBox::show_error(request_data.parent_window, DeprecatedString::formatted("Opening \"{}\" failed: Cannot open device files", *chosen_file));
257-
resolve_any_promise(Error::from_string_literal("Cannot open device files"));
133+
request_data.promise->resolve(Error::from_string_literal("Cannot open device files"));
258134
return;
259135
}
260136

261137
if (Core::DeprecatedFile::is_directory(ipc_file->fd())) {
262138
GUI::MessageBox::show_error(request_data.parent_window, DeprecatedString::formatted("Opening \"{}\" failed: Cannot open directory", *chosen_file));
263-
resolve_any_promise(Error::from_errno(EISDIR));
264-
return;
265-
}
266-
267-
if (request_data.promise.has<PromiseType<DeprecatedResult>>()) {
268-
auto file = Core::DeprecatedFile::construct();
269-
auto fd = ipc_file->take_fd();
270-
file->open(fd, Core::OpenMode::ReadWrite, Core::DeprecatedFile::ShouldCloseFileDescriptor::Yes);
271-
file->set_filename(*chosen_file);
272-
273-
request_data.promise.get<PromiseType<DeprecatedResult>>()->resolve(file);
139+
request_data.promise->resolve(Error::from_errno(EISDIR));
274140
return;
275141
}
276142

@@ -280,11 +146,11 @@ void Client::handle_prompt_end(i32 request_id, i32 error, Optional<IPC::File> co
280146
return File({}, move(stream), filename);
281147
}();
282148
if (file_or_error.is_error()) {
283-
resolve_any_promise(file_or_error.release_error());
149+
request_data.promise->resolve(file_or_error.release_error());
284150
return;
285151
}
286152

287-
request_data.promise.get<PromiseType<Result>>()->resolve(file_or_error.release_value());
153+
request_data.promise->resolve(file_or_error.release_value());
288154
}
289155

290156
void Client::die()
@@ -302,10 +168,9 @@ int Client::get_new_id()
302168
return new_id;
303169
}
304170

305-
template<typename AnyResult>
306-
AnyResult Client::handle_promise(int id)
171+
Result Client::handle_promise(int id)
307172
{
308-
auto result = m_promises.get(id)->promise.get<PromiseType<AnyResult>>()->await();
173+
auto result = m_promises.get(id)->promise->await();
309174
m_promises.remove(id);
310175
return result;
311176
}

Userland/Libraries/LibFileSystemAccessClient/Client.h

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <AK/String.h>
1212
#include <FileSystemAccessServer/FileSystemAccessClientEndpoint.h>
1313
#include <FileSystemAccessServer/FileSystemAccessServerEndpoint.h>
14-
#include <LibCore/DeprecatedFile.h>
14+
#include <LibCore/File.h>
1515
#include <LibCore/Promise.h>
1616
#include <LibCore/StandardPaths.h>
1717
#include <LibGUI/Window.h>
@@ -37,7 +37,6 @@ class File {
3737
String m_filename;
3838
};
3939

40-
using DeprecatedResult = ErrorOr<NonnullRefPtr<Core::DeprecatedFile>>;
4140
using Result = ErrorOr<File>;
4241

4342
class Client final
@@ -46,11 +45,6 @@ class Client final
4645
IPC_CLIENT_CONNECTION(Client, "/tmp/session/%sid/portal/filesystemaccess"sv)
4746

4847
public:
49-
DeprecatedResult try_request_file_read_only_approved_deprecated(GUI::Window* parent_window, DeprecatedString const& path);
50-
DeprecatedResult try_request_file_deprecated(GUI::Window* parent_window, DeprecatedString const& path, Core::OpenMode mode);
51-
DeprecatedResult try_open_file_deprecated(GUI::Window* parent_window, DeprecatedString const& window_title = {}, StringView path = Core::StandardPaths::home_directory(), Core::OpenMode requested_access = Core::OpenMode::ReadOnly);
52-
DeprecatedResult try_save_file_deprecated(GUI::Window* parent_window, DeprecatedString const& name, DeprecatedString const ext, Core::OpenMode requested_access = Core::OpenMode::WriteOnly | Core::OpenMode::Truncate);
53-
5448
Result request_file_read_only_approved(GUI::Window* parent_window, DeprecatedString const& path);
5549
Result request_file(GUI::Window* parent_window, DeprecatedString const& path, Core::File::OpenMode requested_access);
5650
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);
@@ -70,14 +64,13 @@ class Client final
7064
virtual void handle_prompt_end(i32 request_id, i32 error, Optional<IPC::File> const& fd, Optional<DeprecatedString> const& chosen_file) override;
7165

7266
int get_new_id();
73-
template<typename AnyResult>
74-
AnyResult handle_promise(int);
67+
Result handle_promise(int);
7568

7669
template<typename T>
7770
using PromiseType = RefPtr<Core::Promise<T>>;
7871

7972
struct PromiseAndWindow {
80-
Variant<PromiseType<DeprecatedResult>, PromiseType<Result>> promise;
73+
PromiseType<Result> promise;
8174
GUI::Window* parent_window { nullptr };
8275
};
8376

0 commit comments

Comments
 (0)