mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-13 11:42:38 +03:00
PDFViewer: Perform standard error handling when opening files
The previous implementation of open_file had a lambda that was used to inspect the call of ErrorOr-returning calls. This was a non-standard way of doing this though, as the more usual and clearer way is to have an inner function that returns ErrorOr, then handle any incoming errors on the top level function. This commit adds a try_open_file function, where all the logic occurs, and all the failure-producing steps are simplied TRY'ed. The top level open_file function takes that result and does what the lambda previously did: showing a message box with the actual error.
This commit is contained in:
parent
5049b103c0
commit
cb2cf6de99
Notes:
sideshowbarker
2024-07-17 03:03:44 +09:00
Author: https://github.com/rtobar Commit: https://github.com/SerenityOS/serenity/commit/cb2cf6de99 Pull-request: https://github.com/SerenityOS/serenity/pull/16550
@ -335,36 +335,29 @@ void PDFViewerWidget::initialize_toolbar(GUI::Toolbar& toolbar)
|
||||
}
|
||||
|
||||
void PDFViewerWidget::open_file(Core::File& file)
|
||||
{
|
||||
auto maybe_error = try_open_file(file);
|
||||
if (maybe_error.is_error()) {
|
||||
auto error = maybe_error.release_error();
|
||||
warnln("{}", error.message());
|
||||
GUI::MessageBox::show_error(nullptr, "Failed to load the document."sv);
|
||||
}
|
||||
}
|
||||
|
||||
PDF::PDFErrorOr<void> PDFViewerWidget::try_open_file(Core::File& file)
|
||||
{
|
||||
window()->set_title(DeprecatedString::formatted("{} - PDF Viewer", file.filename()));
|
||||
|
||||
auto handle_error = [&](auto&& maybe_error) {
|
||||
if (maybe_error.is_error()) {
|
||||
auto error = maybe_error.release_error();
|
||||
warnln("{}", error.message());
|
||||
GUI::MessageBox::show_error(nullptr, "Failed to load the document."sv);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
m_buffer = file.read_all();
|
||||
auto maybe_document = PDF::Document::create(m_buffer);
|
||||
if (handle_error(maybe_document))
|
||||
return;
|
||||
|
||||
auto document = maybe_document.release_value();
|
||||
auto document = TRY(PDF::Document::create(m_buffer));
|
||||
|
||||
if (auto sh = document->security_handler(); sh && !sh->has_user_password()) {
|
||||
// FIXME: Prompt the user for a password
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
if (handle_error(document->initialize()))
|
||||
return;
|
||||
|
||||
if (handle_error(m_viewer->set_document(document)))
|
||||
return;
|
||||
TRY(document->initialize());
|
||||
TRY(m_viewer->set_document(document));
|
||||
|
||||
m_total_page_label->set_text(DeprecatedString::formatted("of {}", document->get_page_count()));
|
||||
|
||||
@ -391,4 +384,6 @@ void PDFViewerWidget::open_file(Core::File& file)
|
||||
m_sidebar->set_visible(false);
|
||||
m_sidebar_open = false;
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ private:
|
||||
PDFViewerWidget();
|
||||
|
||||
void initialize_toolbar(GUI::Toolbar&);
|
||||
PDF::PDFErrorOr<void> try_open_file(Core::File&);
|
||||
|
||||
RefPtr<PDFViewer> m_viewer;
|
||||
RefPtr<SidebarWidget> m_sidebar;
|
||||
|
Loading…
Reference in New Issue
Block a user