diff options
| author | ailurux <ailuruxx@gmail.com> | 2024-08-26 11:15:27 +1000 |
|---|---|---|
| committer | ailurux <ailuruxx@gmail.com> | 2024-08-26 11:15:27 +1000 |
| commit | 978429109ed421a8e49b7a155f3e043247d905b1 (patch) | |
| tree | 603bfafd39eb3ab62d66f7ebf9865776ff7fb2b0 /src/tangara/audio/track_queue.cpp | |
| parent | 0f9005626d2d919e6995809453b9b5ec3c72096b (diff) | |
| download | tangara-fw-978429109ed421a8e49b7a155f3e043247d905b1.tar.gz | |
Fix queue serialisation so that the position is correctly applied
Diffstat (limited to 'src/tangara/audio/track_queue.cpp')
| -rw-r--r-- | src/tangara/audio/track_queue.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/tangara/audio/track_queue.cpp b/src/tangara/audio/track_queue.cpp index ecf33c74..761ea09a 100644 --- a/src/tangara/audio/track_queue.cpp +++ b/src/tangara/audio/track_queue.cpp @@ -137,14 +137,16 @@ auto TrackQueue::open() -> bool { return playlist_.open(); } -auto TrackQueue::openPlaylist(const std::string& playlist_file) -> bool { +auto TrackQueue::openPlaylist(const std::string& playlist_file, bool notify) -> bool { opened_playlist_.emplace(playlist_file); auto res = opened_playlist_->open(); if (!res) { return false; } updateShuffler(true); - notifyChanged(true, Reason::kExplicitUpdate); + if (notify) { + notifyChanged(true, Reason::kExplicitUpdate); + } return true; } @@ -371,7 +373,7 @@ auto TrackQueue::serialise() -> std::string { } TrackQueue::QueueParseClient::QueueParseClient(TrackQueue& queue) - : queue_(queue), state_(State::kInit), i_(0) {} + : queue_(queue), state_(State::kInit), i_(0), position_to_set_(0) {} cppbor::ParseClient* TrackQueue::QueueParseClient::item( std::unique_ptr<cppbor::Item>& item, @@ -400,10 +402,11 @@ cppbor::ParseClient* TrackQueue::QueueParseClient::item( i_ = 0; } else if (item->type() == cppbor::UINT) { auto val = item->asUint()->unsignedValue(); - queue_.goTo(val); + // Save the position so we can apply it later when we have finished serialising + position_to_set_ = val; } else if (item->type() == cppbor::TSTR) { auto val = item->asTstr(); - queue_.openPlaylist(val->value()); + queue_.openPlaylist(val->value(), false); } else if (item->type() == cppbor::SIMPLE) { bool val = item->asBool()->value(); if (i_ == 0) { @@ -448,6 +451,7 @@ cppbor::ParseClient* TrackQueue::QueueParseClient::itemEnd( if (state_ == State::kInit) { state_ = State::kFinished; } else if (state_ == State::kRoot) { + queue_.goTo(position_to_set_); state_ = State::kFinished; } else if (state_ == State::kMetadata) { if (item->type() == cppbor::ARRAY) { |
