Centralize legacy new document bridge

This commit is contained in:
2026-06-04 13:38:52 +02:00
parent 4528edfb2c
commit 8a0810acb3
8 changed files with 179 additions and 46 deletions

View File

@@ -112,6 +112,14 @@ struct NewDocumentPlan {
DocumentFileWriteDecision write_decision = DocumentFileWriteDecision::save_now;
};
class NewDocumentServices {
public:
virtual ~NewDocumentServices() = default;
virtual void create_new_document(const NewDocumentPlan& plan) = 0;
virtual void prompt_overwrite_new_document(const NewDocumentPlan& plan) = 0;
};
[[nodiscard]] constexpr ProjectOpenDecision plan_project_open(bool has_unsaved_changes) noexcept
{
return has_unsaved_changes
@@ -369,6 +377,22 @@ template <typename ExistsPredicate>
return pp::foundation::Result<NewDocumentPlan>::success(std::move(plan));
}
[[nodiscard]] inline pp::foundation::Status execute_new_document_plan(
const NewDocumentPlan& plan,
NewDocumentServices& services)
{
switch (plan.write_decision) {
case DocumentFileWriteDecision::save_now:
services.create_new_document(plan);
return pp::foundation::Status::success();
case DocumentFileWriteDecision::prompt_overwrite:
services.prompt_overwrite_new_document(plan);
return pp::foundation::Status::success();
}
return pp::foundation::Status::invalid_argument("unknown new document write decision");
}
[[nodiscard]] inline bool has_legacy_two_character_version_suffix(std::string_view document_name) noexcept
{
const auto dot = document_name.rfind('.');