The UI is _finally_ responsive while the builder runs.

This commit is contained in:
Zed A. Shaw 2024-09-10 23:41:50 -04:00
parent 5ae24d9b0a
commit 7c9bea81b2
4 changed files with 35 additions and 35 deletions

View file

@ -120,27 +120,45 @@ void Builder::waiting(BuildEvent ev) {
game.start_round();
gui.building();
gui.output(format("CHANGES! Running build {}", build_cmd));
build_fut = std::async([&]() {
return start_command(build_cmd);
});
state(STARTING);
state(FORKING);
}
}
void Builder::starting(BuildEvent ev) {
std::future_status status = build_fut.wait_for(0ms);
void Builder::forking(BuildEvent ev) {
if(build_fut.valid()) {
std::future_status status = build_fut.wait_for(0ms);
if(status == std::future_status::ready) {
build_out = build_fut.get();
state(READING);
if(status == std::future_status::ready) {
build_out = build_fut.get();
state(READING);
} else {
state(FORKING);
}
} else {
state(STARTING);
build_fut = std::async([&]() {
return start_command(build_cmd);
});
state(FORKING);
}
}
void Builder::reading(BuildEvent ev) {
line = read_line(build_out, build_done);
state(BUILDING);
// BUG: too much copy-pasta so turn this into a class?
if(read_fut.valid()) {
std::future_status status = read_fut.wait_for(0ms);
if(status == std::future_status::ready) {
line = read_fut.get();
state(BUILDING);
} else {
state(READING);
}
} else {
read_fut = std::async([&]() {
return read_line(build_out, build_done);
});
}
}
void Builder::done(BuildEvent ev) {