diff --git a/Userland/Libraries/LibIMAP/Client.cpp b/Userland/Libraries/LibIMAP/Client.cpp index a38f351235..4e7740d8d3 100644 --- a/Userland/Libraries/LibIMAP/Client.cpp +++ b/Userland/Libraries/LibIMAP/Client.cpp @@ -193,7 +193,7 @@ NonnullRefPtr>> cast_promise(NonnullRefPtrmap>( [](Optional& variant) { - return variant.has_value() ? move(variant->get()) : Optional(); + return move(variant->get()); }); return new_promise; } @@ -250,8 +250,7 @@ ErrorOr Client::handle_parsed_response(ParseStatus&& parse_status) bool should_send_next = false; if (!parse_status.successful) { m_expecting_response = false; - m_pending_promises.first()->resolve({}); - m_pending_promises.remove(0); + m_pending_promises.take_first()->reject(Error::from_string_literal("Failed to parse message")); } if (parse_status.response.has_value()) { m_expecting_response = false; @@ -409,15 +408,15 @@ NonnullRefPtr>> Client::append(StringView mailbo auto response_promise = Promise>::construct(); m_pending_promises.append(response_promise); - continue_req->on_resolution = [this, message2 { move(message) }](auto& data) -> ErrorOr { - if (!data.has_value()) { - TRY(handle_parsed_response({ .successful = false, .response = {} })); - } else { - TRY(send_raw(message2.data)); - m_expecting_response = true; - } + continue_req->on_resolution = [this, message2 { move(message) }](auto&) -> ErrorOr { + TRY(send_raw(message2.data)); + m_expecting_response = true; return {}; }; + continue_req->on_rejection = [this](Error&) { + // NOTE: This never fails. + MUST(handle_parsed_response({ .successful = false, .response = {} })); + }; return cast_promise(response_promise); }