Extract app document session decisions
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include "app_core/document_route.h"
|
||||
#include "app_core/document_session.h"
|
||||
#include "assets/image_format.h"
|
||||
#include "assets/image_metadata.h"
|
||||
#include "assets/image_pixels.h"
|
||||
@@ -95,6 +96,11 @@ struct ClassifyOpenArgs {
|
||||
std::string path;
|
||||
};
|
||||
|
||||
struct SimulateAppSessionArgs {
|
||||
bool unsaved = false;
|
||||
bool close_prompt_open = false;
|
||||
};
|
||||
|
||||
struct SimulateStrokeArgs {
|
||||
std::uint32_t x1 = 0;
|
||||
std::uint32_t y1 = 0;
|
||||
@@ -232,6 +238,32 @@ const char* document_open_kind_name(pp::app::DocumentOpenKind kind) noexcept
|
||||
return "open-project";
|
||||
}
|
||||
|
||||
const char* project_open_decision_name(pp::app::ProjectOpenDecision decision) noexcept
|
||||
{
|
||||
switch (decision) {
|
||||
case pp::app::ProjectOpenDecision::open_now:
|
||||
return "open-now";
|
||||
case pp::app::ProjectOpenDecision::prompt_discard_unsaved:
|
||||
return "prompt-discard-unsaved";
|
||||
}
|
||||
|
||||
return "open-now";
|
||||
}
|
||||
|
||||
const char* close_request_decision_name(pp::app::CloseRequestDecision decision) noexcept
|
||||
{
|
||||
switch (decision) {
|
||||
case pp::app::CloseRequestDecision::close_now:
|
||||
return "close-now";
|
||||
case pp::app::CloseRequestDecision::show_unsaved_prompt:
|
||||
return "show-unsaved-prompt";
|
||||
case pp::app::CloseRequestDecision::wait_for_existing_prompt:
|
||||
return "wait-for-existing-prompt";
|
||||
}
|
||||
|
||||
return "close-now";
|
||||
}
|
||||
|
||||
pp::foundation::Result<float> parse_float_arg(std::string_view text)
|
||||
{
|
||||
float value = 0.0F;
|
||||
@@ -270,6 +302,7 @@ void print_help()
|
||||
<< " simulate-document-edits [--width N] [--height N]\n"
|
||||
<< " simulate-document-export [--width N] [--height N]\n"
|
||||
<< " simulate-document-history [--width N] [--height N] [--history N]\n"
|
||||
<< " simulate-app-session [--unsaved] [--close-prompt-open]\n"
|
||||
<< " simulate-blend\n"
|
||||
<< " simulate-image-import [--width N] [--height N]\n"
|
||||
<< " simulate-stroke --x1 N --y1 N --x2 N --y2 N [--spacing N]\n"
|
||||
@@ -1102,6 +1135,47 @@ int classify_open(int argc, char** argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
pp::foundation::Status parse_simulate_app_session_args(
|
||||
int argc,
|
||||
char** argv,
|
||||
SimulateAppSessionArgs& args)
|
||||
{
|
||||
for (int i = 2; i < argc; ++i) {
|
||||
const std::string_view key(argv[i]);
|
||||
if (key == "--unsaved") {
|
||||
args.unsaved = true;
|
||||
} else if (key == "--close-prompt-open") {
|
||||
args.close_prompt_open = true;
|
||||
} else {
|
||||
return pp::foundation::Status::invalid_argument("unknown option");
|
||||
}
|
||||
}
|
||||
|
||||
return pp::foundation::Status::success();
|
||||
}
|
||||
|
||||
int simulate_app_session(int argc, char** argv)
|
||||
{
|
||||
SimulateAppSessionArgs args;
|
||||
const auto status = parse_simulate_app_session_args(argc, argv, args);
|
||||
if (!status.ok()) {
|
||||
print_error("simulate-app-session", status.message);
|
||||
return 2;
|
||||
}
|
||||
|
||||
const auto open_decision = pp::app::plan_project_open(args.unsaved);
|
||||
const auto close_decision = pp::app::plan_close_request(args.unsaved, args.close_prompt_open);
|
||||
std::cout << "{\"ok\":true,\"command\":\"simulate-app-session\""
|
||||
<< ",\"state\":{\"unsaved\":" << json_bool(args.unsaved)
|
||||
<< ",\"closePromptOpen\":" << json_bool(args.close_prompt_open)
|
||||
<< "},\"decisions\":{\"projectOpen\":\""
|
||||
<< project_open_decision_name(open_decision)
|
||||
<< "\",\"closeRequest\":\""
|
||||
<< close_request_decision_name(close_decision)
|
||||
<< "\"}}\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
int inspect_project(int argc, char** argv)
|
||||
{
|
||||
InspectProjectArgs args;
|
||||
@@ -3038,6 +3112,10 @@ int main(int argc, char** argv)
|
||||
return simulate_document_history(argc, argv);
|
||||
}
|
||||
|
||||
if (command == "simulate-app-session") {
|
||||
return simulate_app_session(argc, argv);
|
||||
}
|
||||
|
||||
if (command == "simulate-image-import") {
|
||||
return simulate_image_import(argc, argv);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user