diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-02-19 09:35:19 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-02-19 09:35:19 +1100 |
| commit | c035ed2b4d9aec9cdb2b91771aff7db324a34287 (patch) | |
| tree | ac9f2d5169bb648e70938ad3a08d97b90f0fc312 | |
| parent | 4509ab8d6e341f7f7d92ac6e9d63ad822fe3441b (diff) | |
| download | tangara-fw-c035ed2b4d9aec9cdb2b91771aff7db324a34287.tar.gz | |
Don't mark the current track as changed when falling off the end of the queue
| -rw-r--r-- | src/audio/track_queue.cpp | 57 |
1 files changed, 35 insertions, 22 deletions
diff --git a/src/audio/track_queue.cpp b/src/audio/track_queue.cpp index 534da10c..b75230fc 100644 --- a/src/audio/track_queue.cpp +++ b/src/audio/track_queue.cpp @@ -200,39 +200,52 @@ auto TrackQueue::append(Item i) -> void { } auto TrackQueue::next() -> void { - const std::unique_lock<std::shared_mutex> lock(mutex_); - if (shuffle_) { - shuffle_->next(); - pos_ = shuffle_->current(); - } else { - if (pos_ + 1 >= tracks_.size()) { - if (replay_) { - pos_ = 0; - } + bool changed = true; + + { + const std::unique_lock<std::shared_mutex> lock(mutex_); + if (shuffle_) { + shuffle_->next(); + pos_ = shuffle_->current(); } else { - pos_++; + if (pos_ + 1 >= tracks_.size()) { + if (replay_) { + pos_ = 0; + } else { + pos_ = tracks_.size(); + changed = false; + } + } else { + pos_++; + } } } - notifyChanged(true); + notifyChanged(changed); } auto TrackQueue::previous() -> void { - const std::unique_lock<std::shared_mutex> lock(mutex_); - if (shuffle_) { - shuffle_->prev(); - pos_ = shuffle_->current(); - } else { - if (pos_ == 0) { - if (repeat_) { - pos_ = tracks_.size() - 1; - } + bool changed = true; + + { + const std::unique_lock<std::shared_mutex> lock(mutex_); + if (shuffle_) { + shuffle_->prev(); + pos_ = shuffle_->current(); } else { - pos_--; + if (pos_ == 0) { + if (repeat_) { + pos_ = tracks_.size() - 1; + } else { + changed = false; + } + } else { + pos_--; + } } } - notifyChanged(true); + notifyChanged(changed); } auto TrackQueue::finish() -> void { |
