From 3f7f199cb940c8d5f6d48f77fd59971adffe49ef Mon Sep 17 00:00:00 2001 From: jacqueline Date: Thu, 7 Dec 2023 16:57:05 +1100 Subject: Remove pre-iterator concepts - No more IndexRecord/Result/dbGetPage nonsense - Queue is just track ids - i am so tired and have so much to do --- src/audio/audio_fsm.cpp | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) (limited to 'src/audio/audio_fsm.cpp') diff --git a/src/audio/audio_fsm.cpp b/src/audio/audio_fsm.cpp index ce610abb..3bd4d396 100644 --- a/src/audio/audio_fsm.cpp +++ b/src/audio/audio_fsm.cpp @@ -93,6 +93,17 @@ void AudioState::react(const OutputModeChanged& ev) { sOutput->SetMode(IAudioOutput::Modes::kOnPaused); } +auto AudioState::playTrack(database::TrackId id) -> void { + sCurrentTrack = id; + sServices->bg_worker().Dispatch([=]() { + auto db = sServices->database().lock(); + if (!db) { + return; + } + sFileSource->SetPath(db->getTrackPath(id)); + }); +} + namespace states { void Uninitialised::react(const system_fsm::BootComplete& ev) { @@ -143,19 +154,11 @@ void Standby::react(const internal::InputFileOpened& ev) { } void Standby::react(const QueueUpdate& ev) { - auto current_track = sServices->track_queue().Current(); + auto current_track = sServices->track_queue().current(); if (!current_track || (sCurrentTrack && *sCurrentTrack == *current_track)) { return; } - - sCurrentTrack = current_track; - - auto db = sServices->database().lock(); - if (!db) { - ESP_LOGW(kTag, "database not open; ignoring play request"); - return; - } - sFileSource->SetPath(db->GetTrackPath(*current_track)); + playTrack(*current_track); } void Standby::react(const TogglePlayPause& ev) { @@ -187,22 +190,14 @@ void Playback::react(const QueueUpdate& ev) { if (!ev.current_changed) { return; } - auto current_track = sServices->track_queue().Current(); + auto current_track = sServices->track_queue().current(); if (!current_track) { sFileSource->SetPath(); sCurrentTrack.reset(); transit(); return; } - - sCurrentTrack = current_track; - - auto db = sServices->database().lock(); - if (!db) { - return; - } - - sFileSource->SetPath(db->GetTrackPath(*current_track)); + playTrack(*current_track); } void Playback::react(const TogglePlayPause& ev) { @@ -220,9 +215,8 @@ void Playback::react(const internal::InputFileClosed& ev) {} void Playback::react(const internal::InputFileFinished& ev) { ESP_LOGI(kTag, "finished playing file"); - auto editor = sServices->track_queue().Edit(); - sServices->track_queue().Next(editor); - if (!sServices->track_queue().Current()) { + sServices->track_queue().next(); + if (!sServices->track_queue().current()) { transit(); } } -- cgit v1.2.3