Cleanup
ci / checks (push) Successful in 41m34s

This commit is contained in:
khodowany
2026-09-10 09:22:26 -05:00
parent fa7485d404
commit 1a13d6b0e1
14 changed files with 609 additions and 13 deletions
+35 -6
View File
@@ -10,6 +10,7 @@
#include <future>
#include <iostream>
#include <iterator>
#include <memory>
#include <string>
#include <string_view>
#include <thread>
@@ -27,6 +28,7 @@
#include <modulus.hpp>
#include <vamp_zero/config.hpp>
#include <vamp_zero/audio.hpp>
#include <vamp_zero/database.hpp>
#include <vamp_zero/errors.hpp>
#include <vamp_zero/library.hpp>
@@ -129,6 +131,14 @@ auto load_initial_state(vamp_zero::config const& config) -> std::expected<vamp_z
auto state = vamp_zero::app_state{
.performance = std::move(*performance),
.practice = std::move(*practice),
.audio = {
.track_enabled = config.audio.track_enabled,
.metronome_enabled = config.audio.metronome_enabled,
.metronome_bpm = config.audio.metronome_bpm,
.metronome_min_bpm = config.audio.metronome_min_bpm,
.metronome_max_bpm = config.audio.metronome_max_bpm,
.metronome_step = config.audio.metronome_step,
},
};
if (auto valid = vamp_zero::validate_app_state(state); !valid) {
return std::unexpected(valid.error());
@@ -136,7 +146,7 @@ auto load_initial_state(vamp_zero::config const& config) -> std::expected<vamp_z
return state;
}
auto run_headless(vamp_zero::config const& config, vamp_zero::control_state& state) -> std::expected<void, modulus::error> {
auto run_headless(vamp_zero::config const& config, vamp_zero::control_state& state, vamp_zero::audio_controller* audio) -> std::expected<void, modulus::error> {
auto io = boost::asio::io_context{};
auto endpoint = make_server_endpoint(config);
if (!endpoint) {
@@ -147,6 +157,12 @@ auto run_headless(vamp_zero::config const& config, vamp_zero::control_state& sta
if (!started) {
return std::unexpected(started.error());
}
if (audio != nullptr) {
state.set_observer([audio](vamp_zero::app_state app) {
audio->sync(app);
});
audio->sync(state.snapshot());
}
auto heartbeat = write_heartbeat(config);
if (!heartbeat) {
server.stop();
@@ -162,7 +178,7 @@ auto run_headless(vamp_zero::config const& config, vamp_zero::control_state& sta
return {};
}
auto run_display(vamp_zero::config const& config, vamp_zero::control_state& state) -> std::expected<void, modulus::error> {
auto run_display(vamp_zero::config const& config, vamp_zero::control_state& state, vamp_zero::audio_controller* audio) -> std::expected<void, modulus::error> {
auto io = boost::asio::io_context{};
auto endpoint = make_server_endpoint(config);
if (!endpoint) {
@@ -171,12 +187,18 @@ auto run_display(vamp_zero::config const& config, vamp_zero::control_state& stat
auto ui = vamp_zero::zero_ui{io.get_executor(), config.display, [&state](vamp_protocol::page_command command) {
static_cast<void>(state.apply(command));
}};
state.set_observer([&ui, &config](vamp_zero::app_state app) {
state.set_observer([&ui, &config, audio](vamp_zero::app_state app) {
if (audio != nullptr) {
audio->sync(app);
}
auto status = ui.publish(vamp_zero::make_ui_state(config, std::move(app)));
if (!status) {
modulus::log_error("failed to publish UI state: " + status.error().describe());
}
});
if (audio != nullptr) {
audio->sync(state.snapshot());
}
auto published = ui.publish(vamp_zero::make_ui_state(config, state.snapshot()));
if (!published) {
return std::unexpected(published.error());
@@ -316,8 +338,15 @@ auto vamp_zero::run(vamp_zero::command_line command) -> std::expected<void, modu
return std::unexpected(initial.error());
}
auto state = vamp_zero::control_state{*config, std::move(*initial)};
if (config->runtime.headless) {
return run_headless(*config, state);
auto audio_controller = std::unique_ptr<vamp_zero::audio_controller>{};
auto audio = vamp_zero::create_audio_controller(config->audio);
if (!audio) {
modulus::log_error("audio unavailable: " + audio.error().describe());
} else {
audio_controller = std::move(*audio);
}
return run_display(*config, state);
if (config->runtime.headless) {
return run_headless(*config, state, audio_controller.get());
}
return run_display(*config, state, audio_controller.get());
}