fix: play next track correctly skips to queued track
advance() was removing the playNext item then calling current(), which fell back to m_queue[m_index] — the same track already playing. Fix: use takeFirst() and return that item directly, only advancing m_index when the playNext list is empty. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -124,14 +124,17 @@ public:
|
||||
return static_cast<qint64>(current()["id"].toDouble());
|
||||
}
|
||||
|
||||
/// Advance and return the new current track. Returns {} at end of queue.
|
||||
/// Advance and return the track to play next. Returns {} at end of queue.
|
||||
QJsonObject advance()
|
||||
{
|
||||
if (!m_playNext.isEmpty()) {
|
||||
m_playNext.removeFirst();
|
||||
} else {
|
||||
++m_index;
|
||||
// Return the playNext item directly — do NOT call current() after
|
||||
// removal, as that would fall back to the already-playing m_index track.
|
||||
const QJsonObject next = m_playNext.takeFirst();
|
||||
emit queueChanged();
|
||||
return next;
|
||||
}
|
||||
++m_index;
|
||||
emit queueChanged();
|
||||
return current();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user