1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 07:48:11 +00:00

LibCore+Userland: Make Promise's on_resolve fallible

This will be primarily necessary for BackgroundAction integration, but
it already allows us to add proper error handling in LibIMAP :^)
This commit is contained in:
kleines Filmröllchen 2022-12-29 14:53:47 +01:00 committed by Linus Groh
parent dc318d3080
commit 8f4d0d3797
5 changed files with 24 additions and 20 deletions

View file

@ -124,19 +124,19 @@ void Client::handle_prompt_end(i32 request_id, i32 error, Optional<IPC::File> co
// to handle it as opening a new, named file.
if (error != -1 && error != ENOENT)
GUI::MessageBox::show_error(request_data.parent_window, DeprecatedString::formatted("Opening \"{}\" failed: {}", *chosen_file, strerror(error)));
request_data.promise->resolve(Error::from_errno(error));
request_data.promise->resolve(Error::from_errno(error)).release_value_but_fixme_should_propagate_errors();
return;
}
if (Core::DeprecatedFile::is_device(ipc_file->fd())) {
GUI::MessageBox::show_error(request_data.parent_window, DeprecatedString::formatted("Opening \"{}\" failed: Cannot open device files", *chosen_file));
request_data.promise->resolve(Error::from_string_literal("Cannot open device files"));
request_data.promise->resolve(Error::from_string_literal("Cannot open device files")).release_value_but_fixme_should_propagate_errors();
return;
}
if (Core::DeprecatedFile::is_directory(ipc_file->fd())) {
GUI::MessageBox::show_error(request_data.parent_window, DeprecatedString::formatted("Opening \"{}\" failed: Cannot open directory", *chosen_file));
request_data.promise->resolve(Error::from_errno(EISDIR));
request_data.promise->resolve(Error::from_errno(EISDIR)).release_value_but_fixme_should_propagate_errors();
return;
}
@ -146,11 +146,11 @@ void Client::handle_prompt_end(i32 request_id, i32 error, Optional<IPC::File> co
return File({}, move(stream), filename);
}();
if (file_or_error.is_error()) {
request_data.promise->resolve(file_or_error.release_error());
request_data.promise->resolve(file_or_error.release_error()).release_value_but_fixme_should_propagate_errors();
return;
}
request_data.promise->resolve(file_or_error.release_value());
request_data.promise->resolve(file_or_error.release_value()).release_value_but_fixme_should_propagate_errors();
}
void Client::die()