HexEditor: Propagate errors when using "Save"

This commit is contained in:
Lucas CHOLLET 2023-01-14 22:09:43 -05:00 committed by Andrew Kaster
parent 2bba743c24
commit a2dca2b762
5 changed files with 13 additions and 13 deletions

View file

@ -83,15 +83,16 @@ HexDocumentFile::HexDocumentFile(NonnullOwnPtr<Core::Stream::File> file)
{
}
void HexDocumentFile::write_to_file()
ErrorOr<void> HexDocumentFile::write_to_file()
{
for (auto& change : m_changes) {
m_file->seek(change.key, SeekMode::SetPosition).release_value_but_fixme_should_propagate_errors();
m_file->write({ &change.value, 1 }).release_value_but_fixme_should_propagate_errors();
TRY(m_file->seek(change.key, SeekMode::SetPosition));
TRY(m_file->write({ &change.value, 1 }));
}
clear_changes();
// make sure the next get operation triggers a read
m_buffer_file_pos = m_file_size + 1;
return {};
}
ErrorOr<void> HexDocumentFile::write_to_file(Core::Stream::File& file)

View file

@ -66,7 +66,7 @@ public:
void set_file(NonnullOwnPtr<Core::Stream::File> file);
NonnullOwnPtr<Core::Stream::File> const& file() const;
void write_to_file();
ErrorOr<void> write_to_file();
ErrorOr<void> write_to_file(Core::Stream::File& file);
Cell get(size_t position) override;
u8 get_unchanged(size_t position) override;

View file

@ -153,14 +153,13 @@ ErrorOr<void> HexEditor::save_as(NonnullOwnPtr<Core::Stream::File> new_file)
return {};
}
bool HexEditor::save()
ErrorOr<void> HexEditor::save()
{
if (m_document->type() != HexDocument::Type::File) {
return false;
}
if (m_document->type() != HexDocument::Type::File)
return Error::from_string_literal("Unable to save from a memory document");
static_cast<HexDocumentFile*>(m_document.ptr())->write_to_file();
return true;
TRY(static_cast<HexDocumentFile*>(m_document.ptr())->write_to_file());
return {};
}
size_t HexEditor::selection_size()

View file

@ -39,7 +39,7 @@ public:
ErrorOr<void> fill_selection(u8 fill_byte);
Optional<u8> get_byte(size_t position);
ErrorOr<void> save_as(NonnullOwnPtr<Core::Stream::File>);
bool save();
ErrorOr<void> save();
bool undo();
bool redo();

View file

@ -132,8 +132,8 @@ HexEditorWidget::HexEditorWidget()
if (m_path.is_empty())
return m_save_as_action->activate();
if (!m_editor->save()) {
GUI::MessageBox::show(window(), "Unable to save file.\n"sv, "Error"sv, GUI::MessageBox::Type::Error);
if (auto result = m_editor->save(); result.is_error()) {
GUI::MessageBox::show(window(), DeprecatedString::formatted("Unable to save file: {}\n"sv, result.error()), "Error"sv, GUI::MessageBox::Type::Error);
} else {
window()->set_modified(false);
m_editor->update();