mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 13:32:45 +00: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
					
				
					 2 changed files with 16 additions and 20 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Rodrigo Tobar
						Rodrigo Tobar