Centralize legacy document open bridge

This commit is contained in:
2026-06-04 13:20:14 +02:00
parent 1984b71a0a
commit d980b81bd7
9 changed files with 336 additions and 64 deletions

View File

@@ -55,6 +55,16 @@ enum class DocumentOpenPlanAction {
prompt_import_ppbr,
};
class DocumentOpenServices {
public:
virtual ~DocumentOpenServices() = default;
virtual void prompt_import_abr(const DocumentOpenRoute& route) = 0;
virtual void prompt_import_ppbr(const DocumentOpenRoute& route) = 0;
virtual void open_project_now(const DocumentOpenRoute& route) = 0;
virtual void prompt_discard_unsaved_project(const DocumentOpenRoute& route) = 0;
};
struct DocumentFileTarget {
std::string name;
std::string directory;
@@ -102,6 +112,41 @@ struct NewDocumentPlan {
return DocumentOpenPlanAction::open_project_now;
}
[[nodiscard]] inline pp::foundation::Status execute_document_open_plan(
DocumentOpenPlanAction action,
const DocumentOpenRoute& route,
DocumentOpenServices& services)
{
switch (action) {
case DocumentOpenPlanAction::open_project_now:
if (route.kind != DocumentOpenKind::open_project) {
return pp::foundation::Status::invalid_argument("open-project action requires a project route");
}
services.open_project_now(route);
return pp::foundation::Status::success();
case DocumentOpenPlanAction::prompt_discard_unsaved_project:
if (route.kind != DocumentOpenKind::open_project) {
return pp::foundation::Status::invalid_argument("discard prompt requires a project route");
}
services.prompt_discard_unsaved_project(route);
return pp::foundation::Status::success();
case DocumentOpenPlanAction::prompt_import_abr:
if (route.kind != DocumentOpenKind::import_abr) {
return pp::foundation::Status::invalid_argument("ABR import prompt requires an ABR route");
}
services.prompt_import_abr(route);
return pp::foundation::Status::success();
case DocumentOpenPlanAction::prompt_import_ppbr:
if (route.kind != DocumentOpenKind::import_ppbr) {
return pp::foundation::Status::invalid_argument("PPBR import prompt requires a PPBR route");
}
services.prompt_import_ppbr(route);
return pp::foundation::Status::success();
}
return pp::foundation::Status::invalid_argument("unknown document open action");
}
[[nodiscard]] constexpr CloseRequestDecision plan_close_request(
bool has_unsaved_changes,
bool close_prompt_already_open) noexcept