Extract app status planning into app core
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include "app_core/app_preferences.h"
|
||||
#include "app_core/app_status.h"
|
||||
#include "app_core/document_export.h"
|
||||
#include "app_core/document_cloud.h"
|
||||
#include "app_core/document_platform_io.h"
|
||||
@@ -200,6 +201,18 @@ struct PlanAppPreferencesArgs {
|
||||
int cursor_mode = 0;
|
||||
};
|
||||
|
||||
struct PlanAppStatusArgs {
|
||||
std::string document_name = "no-name";
|
||||
bool unsaved = false;
|
||||
int resolution = 512;
|
||||
int resolution_index = 0;
|
||||
float zoom = 1.0F;
|
||||
std::uint32_t history_bytes = 0;
|
||||
bool recording_running = false;
|
||||
bool encoder_available = false;
|
||||
std::uint32_t encoded_frames = 0;
|
||||
};
|
||||
|
||||
struct SimulateAppSessionArgs {
|
||||
bool has_canvas = true;
|
||||
bool new_document = false;
|
||||
@@ -668,6 +681,7 @@ void print_help()
|
||||
<< " plan-cloud-upload-all [--file-count N] [--no-progress-ui]\n"
|
||||
<< " plan-recording-session [--running] [--frame-count N] [--platform-deletes-recorded-files]\n"
|
||||
<< " plan-app-preferences [--ui-scale N] [--display-density N] [--current-scale N] [--scale-option N] [--viewport-scale N] [--rtl] [--timelapse-disabled] [--recording-running] [--vr-controllers-disabled] [--cursor-mode N]\n"
|
||||
<< " plan-app-status [--doc-name NAME] [--unsaved] [--resolution N] [--resolution-index N] [--zoom N] [--history-bytes N] [--recording-running] [--encoder-available] [--encoded-frames N]\n"
|
||||
<< " plan-share-file [--path FILE]\n"
|
||||
<< " plan-picked-path [--path FILE]\n"
|
||||
<< " plan-display-file [--path FILE]\n"
|
||||
@@ -2107,6 +2121,104 @@ int plan_app_preferences(int argc, char** argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
pp::foundation::Status parse_plan_app_status_args(
|
||||
int argc,
|
||||
char** argv,
|
||||
PlanAppStatusArgs& args)
|
||||
{
|
||||
for (int i = 2; i < argc; ++i) {
|
||||
const std::string_view key(argv[i]);
|
||||
if (key == "--doc-name") {
|
||||
if (i + 1 >= argc) {
|
||||
return pp::foundation::Status::invalid_argument("missing value for option");
|
||||
}
|
||||
args.document_name = argv[++i];
|
||||
} else if (key == "--unsaved") {
|
||||
args.unsaved = true;
|
||||
} else if (key == "--resolution" || key == "--resolution-index" || key == "--history-bytes"
|
||||
|| key == "--encoded-frames") {
|
||||
if (i + 1 >= argc) {
|
||||
return pp::foundation::Status::invalid_argument("missing value for option");
|
||||
}
|
||||
const auto value = pp::foundation::parse_u32(argv[++i]);
|
||||
if (!value) {
|
||||
return value.status();
|
||||
}
|
||||
if (key == "--resolution") {
|
||||
args.resolution = static_cast<int>(value.value());
|
||||
} else if (key == "--resolution-index") {
|
||||
args.resolution_index = static_cast<int>(value.value());
|
||||
} else if (key == "--history-bytes") {
|
||||
args.history_bytes = value.value();
|
||||
} else {
|
||||
args.encoded_frames = value.value();
|
||||
}
|
||||
} else if (key == "--zoom") {
|
||||
if (i + 1 >= argc) {
|
||||
return pp::foundation::Status::invalid_argument("missing value for option");
|
||||
}
|
||||
const auto value = parse_float_arg(argv[++i]);
|
||||
if (!value) {
|
||||
return value.status();
|
||||
}
|
||||
args.zoom = value.value();
|
||||
} else if (key == "--recording-running") {
|
||||
args.recording_running = true;
|
||||
} else if (key == "--encoder-available") {
|
||||
args.encoder_available = true;
|
||||
} else {
|
||||
return pp::foundation::Status::invalid_argument("unknown option");
|
||||
}
|
||||
}
|
||||
|
||||
return pp::foundation::Status::success();
|
||||
}
|
||||
|
||||
int plan_app_status(int argc, char** argv)
|
||||
{
|
||||
PlanAppStatusArgs args;
|
||||
const auto status = parse_plan_app_status_args(argc, argv, args);
|
||||
if (!status.ok()) {
|
||||
print_error("plan-app-status", status.message);
|
||||
return 2;
|
||||
}
|
||||
|
||||
const auto resolution_from_index = pp::app::display_resolution_from_index(args.resolution_index);
|
||||
const auto resolution_index = pp::app::document_resolution_to_index(args.resolution);
|
||||
const auto resolution_label = pp::app::document_resolution_label(args.resolution);
|
||||
const auto recording_label = pp::app::make_recording_frame_label(
|
||||
args.recording_running,
|
||||
args.encoder_available,
|
||||
static_cast<int>(args.encoded_frames));
|
||||
|
||||
std::cout << "{\"ok\":true,\"command\":\"plan-app-status\""
|
||||
<< ",\"state\":{\"documentName\":\"" << json_escape(args.document_name)
|
||||
<< "\",\"unsaved\":" << json_bool(args.unsaved)
|
||||
<< ",\"resolution\":" << args.resolution
|
||||
<< ",\"resolutionIndex\":" << args.resolution_index
|
||||
<< ",\"zoom\":" << args.zoom
|
||||
<< ",\"historyBytes\":" << args.history_bytes
|
||||
<< ",\"recordingRunning\":" << json_bool(args.recording_running)
|
||||
<< ",\"encoderAvailable\":" << json_bool(args.encoder_available)
|
||||
<< ",\"encodedFrames\":" << args.encoded_frames
|
||||
<< "},\"title\":\"" << json_escape(pp::app::make_document_title(
|
||||
args.document_name,
|
||||
args.unsaved,
|
||||
args.resolution))
|
||||
<< "\",\"dpi\":\"" << json_escape(pp::app::make_dpi_label(args.zoom))
|
||||
<< "\",\"memory\":\"" << json_escape(pp::app::make_history_memory_label(args.history_bytes))
|
||||
<< "\",\"recording\":{\"visible\":" << json_bool(recording_label.visible)
|
||||
<< ",\"text\":\"" << json_escape(recording_label.text)
|
||||
<< "\"},\"resolutionMap\":{\"fromIndexValid\":" << json_bool(static_cast<bool>(resolution_from_index))
|
||||
<< ",\"fromIndex\":" << (resolution_from_index ? resolution_from_index.value() : 0)
|
||||
<< ",\"toIndexValid\":" << json_bool(static_cast<bool>(resolution_index))
|
||||
<< ",\"toIndex\":" << (resolution_index ? resolution_index.value() : 0)
|
||||
<< ",\"labelValid\":" << json_bool(static_cast<bool>(resolution_label))
|
||||
<< ",\"label\":\"" << json_escape(resolution_label ? std::string(resolution_label.value()) : std::string())
|
||||
<< "\"}}\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
pp::foundation::Status parse_plan_share_file_args(
|
||||
int argc,
|
||||
char** argv,
|
||||
@@ -4503,6 +4615,10 @@ int main(int argc, char** argv)
|
||||
return plan_app_preferences(argc, argv);
|
||||
}
|
||||
|
||||
if (command == "plan-app-status") {
|
||||
return plan_app_status(argc, argv);
|
||||
}
|
||||
|
||||
if (command == "plan-share-file") {
|
||||
return plan_share_file(argc, argv);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user