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:
joren
2026-03-24 00:43:08 +01:00
parent 2852ffb0b7
commit 2ccd95b276

View File

@@ -124,14 +124,17 @@ public:
return static_cast<qint64>(current()["id"].toDouble()); 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() QJsonObject advance()
{ {
if (!m_playNext.isEmpty()) { if (!m_playNext.isEmpty()) {
m_playNext.removeFirst(); // Return the playNext item directly — do NOT call current() after
} else { // removal, as that would fall back to the already-playing m_index track.
++m_index; const QJsonObject next = m_playNext.takeFirst();
emit queueChanged();
return next;
} }
++m_index;
emit queueChanged(); emit queueChanged();
return current(); return current();
} }