diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-03-25 17:34:41 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-03-25 17:34:41 +1100 |
| commit | 175bfc4e3e9f7aa39e084d3f1625347f1d5711ec (patch) | |
| tree | f71b458f19acca855815ab876944d48a3c5acbcb /src/ui | |
| parent | 5c985afd258a96b68d6bd5a4fade17ed998d2c07 (diff) | |
| download | tangara-fw-175bfc4e3e9f7aa39e084d3f1625347f1d5711ec.tar.gz | |
WIP rewrie audio pipeline+fsm guts for more reliability
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/include/ui_fsm.hpp | 2 | ||||
| -rw-r--r-- | src/ui/ui_fsm.cpp | 27 |
2 files changed, 9 insertions, 20 deletions
diff --git a/src/ui/include/ui_fsm.hpp b/src/ui/include/ui_fsm.hpp index f7fde1dd..5e1cc487 100644 --- a/src/ui/include/ui_fsm.hpp +++ b/src/ui/include/ui_fsm.hpp @@ -57,8 +57,6 @@ class UiState : public tinyfsm::Fsm<UiState> { virtual void react(const system_fsm::StorageMounted&) {} void react(const system_fsm::BatteryStateChanged&); - void react(const audio::PlaybackStarted&); - void react(const audio::PlaybackStopped&); void react(const audio::PlaybackUpdate&); void react(const audio::QueueUpdate&); diff --git a/src/ui/ui_fsm.cpp b/src/ui/ui_fsm.cpp index a913a339..42c6a99c 100644 --- a/src/ui/ui_fsm.cpp +++ b/src/ui/ui_fsm.cpp @@ -114,14 +114,11 @@ lua::Property UiState::sBluetoothDevices{ lua::Property UiState::sPlaybackPlaying{ false, [](const lua::LuaValue& val) { - bool current_val = std::get<bool>(sPlaybackPlaying.Get()); if (!std::holds_alternative<bool>(val)) { return false; } bool new_val = std::get<bool>(val); - if (current_val != new_val) { - events::Audio().Dispatch(audio::TogglePlayPause{}); - } + events::Audio().Dispatch(audio::TogglePlayPause{.set_to = new_val}); return true; }}; @@ -135,12 +132,13 @@ lua::Property UiState::sPlaybackPosition{ int new_val = std::get<int>(val); if (current_val != new_val) { auto track = sPlaybackTrack.Get(); - if (!std::holds_alternative<audio::Track>(track)) { + if (!std::holds_alternative<audio::TrackInfo>(track)) { return false; } - events::Audio().Dispatch(audio::SeekFile{ - .offset = (uint32_t)new_val, - .filename = std::get<audio::Track>(track).filepath}); + events::Audio().Dispatch(audio::SetTrack{ + .new_track = std::get<audio::TrackInfo>(track).uri, + .seek_to_second = (uint32_t)new_val, + }); } return true; }}; @@ -393,17 +391,10 @@ void UiState::react(const audio::QueueUpdate&) { sQueueReplay.Update(queue.replay()); } -void UiState::react(const audio::PlaybackStarted& ev) { - sPlaybackPlaying.Update(true); -} - void UiState::react(const audio::PlaybackUpdate& ev) { - sPlaybackTrack.Update(*ev.track); - sPlaybackPosition.Update(static_cast<int>(ev.seconds_elapsed)); -} - -void UiState::react(const audio::PlaybackStopped&) { - sPlaybackPlaying.Update(false); + sPlaybackTrack.Update(*ev.current_track); + sPlaybackPlaying.Update(!ev.paused); + sPlaybackPosition.Update(static_cast<int>(ev.track_position.value_or(0))); } void UiState::react(const audio::VolumeChanged& ev) { |
