v2.49.3 — Shuffle-Edge-Case: Einzel-Song-Queue + Repeat-aus → Queue-Ende
## Fix (Code-Review Finding 1, HIGH) - _baueShuffleReihenfolge: Index 0 nur noch bei Repeat-playlist in die Shuffle-Reihenfolge aufnehmen (Einzel-Song-Queue) - naechsterIndex: Sicherheitsnetz gegen stale Reihenfolge — Kandidat == aktueller Song bei Repeat-aus liefert null (Queue-Ende) statt denselben Song erneut - Test ergänzt: shuffle + repeat aus + 1-Song-Queue → null
This commit is contained in:
@@ -90,12 +90,16 @@ class PlayerService extends ChangeNotifier {
|
||||
}
|
||||
|
||||
/// Baut die Zufallsreihenfolge neu: alle Indizes außer dem aktuellen Song, gemischt.
|
||||
/// Bei einer Einzel-Song-Queue kommt der Song nur bei Repeat-playlist in die
|
||||
/// Reihenfolge — sonst ist die Queue nach dem Song zu Ende (naechsterIndex → null).
|
||||
void _baueShuffleReihenfolge() {
|
||||
_shuffleReihenfolge.clear();
|
||||
_shufflePos = -1;
|
||||
if (_warteschlange.isEmpty) return;
|
||||
if (_warteschlange.length == 1) {
|
||||
_shuffleReihenfolge.add(0);
|
||||
if (_wiederholmodus == Wiederholmodus.playlist) {
|
||||
_shuffleReihenfolge.add(0);
|
||||
}
|
||||
return;
|
||||
}
|
||||
final indices = List<int>.generate(_warteschlange.length, (i) => i);
|
||||
@@ -237,6 +241,11 @@ class PlayerService extends ChangeNotifier {
|
||||
return null;
|
||||
}
|
||||
final idx = _shuffleReihenfolge[_shufflePos];
|
||||
// Sicherheitsnetz: Einzel-Song-Queue (oder stale Reihenfolge) darf bei
|
||||
// Repeat-aus nicht denselben Song erneut liefern — das ist Queue-Ende.
|
||||
if (idx == _aktuellerIndex && _wiederholmodus == Wiederholmodus.aus) {
|
||||
return null;
|
||||
}
|
||||
return (idx >= 0 && idx < _warteschlange.length) ? idx : null;
|
||||
}
|
||||
var neuerIndex = _aktuellerIndex + 1;
|
||||
|
||||
Reference in New Issue
Block a user