summaryrefslogtreecommitdiff
path: root/src/audio/track_queue.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2024-02-19 09:35:19 +1100
committerjacqueline <me@jacqueline.id.au>2024-02-19 09:35:19 +1100
commitc035ed2b4d9aec9cdb2b91771aff7db324a34287 (patch)
treeac9f2d5169bb648e70938ad3a08d97b90f0fc312 /src/audio/track_queue.cpp
parent4509ab8d6e341f7f7d92ac6e9d63ad822fe3441b (diff)
downloadtangara-fw-c035ed2b4d9aec9cdb2b91771aff7db324a34287.tar.gz
Don't mark the current track as changed when falling off the end of the queue
Diffstat (limited to 'src/audio/track_queue.cpp')
-rw-r--r--src/audio/track_queue.cpp57
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 {