summaryrefslogtreecommitdiff
path: root/src/tangara/audio/audio_fsm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tangara/audio/audio_fsm.cpp')
-rw-r--r--src/tangara/audio/audio_fsm.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/tangara/audio/audio_fsm.cpp b/src/tangara/audio/audio_fsm.cpp
index f9823fb3..c6ac75f0 100644
--- a/src/tangara/audio/audio_fsm.cpp
+++ b/src/tangara/audio/audio_fsm.cpp
@@ -91,7 +91,8 @@ auto AudioState::emitPlaybackUpdate(bool paused) -> void {
}
// If we've got an elapsed duration and it's more than 5 minutes
- // increment a counter. Every 60 counts (ie, every minute) save the current elapsed position
+ // increment a counter. Every 60 counts (ie, every minute) save the current
+ // elapsed position
if (position && *position > (5 * 60)) {
sUpdateCounter++;
if (sUpdateCounter >= 60) {
@@ -232,6 +233,7 @@ void AudioState::react(const internal::DecodingFinished& ev) {
}
if (path == ev.track->uri) {
queue.finish();
+ incrementPlayCount(ev.track->uri);
}
});
}
@@ -399,7 +401,8 @@ void AudioState::react(const OutputModeChanged& ev) {
}
}
-auto AudioState::updateSavedPosition(std::string uri, uint32_t position)
+auto AudioState::updateTrackData(std::string uri,
+ std::function<void(database::TrackData&)> fn)
-> void {
sServices->bg_worker().Dispatch<void>([=]() {
auto db = sServices->database().lock();
@@ -415,11 +418,21 @@ auto AudioState::updateSavedPosition(std::string uri, uint32_t position)
return;
}
auto data = track->data().clone();
- data->last_position = position;
+ std::invoke(fn, *data);
db->setTrackData(*id, *data);
});
}
+auto AudioState::updateSavedPosition(std::string uri, uint32_t position)
+ -> void {
+ updateTrackData(
+ uri, [&](database::TrackData& data) { data.last_position = position; });
+}
+
+auto AudioState::incrementPlayCount(std::string uri) -> void {
+ updateTrackData(uri, [&](database::TrackData& data) { data.play_count++; });
+}
+
auto AudioState::updateOutputMode() -> void {
if (is_in_state<states::Playback>() || sIsTtsPlaying) {
sOutput->mode(IAudioOutput::Modes::kOnPlaying);