Shuffle/Wiederholung: PlaybackState meldet echten Zustand statt immer "aus"

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012A2pmbnVNPiHdyf2GW8eLP
This commit is contained in:
Hermes (Server)
2026-08-27 14:49:32 +02:00
co-authored by Claude Sonnet 5
parent 40171a7c0e
commit 7dbea128e0
2 changed files with 48 additions and 0 deletions
+18
View File
@@ -130,6 +130,22 @@ int startIndexNachFilter(List<bool> behalten, int startIndex) {
return davor.clamp(0, gesamt - 1);
}
/// Übersetzung des Player-Shuffle-Zustands in den `audio_service`-Wert für
/// `PlaybackState.shuffleMode`. Als reine Funktion ausgelagert, damit sie
/// ohne laufenden `AudioPlayer` testbar ist — `_transformEvent()` läuft bei
/// jedem Player-Event und lässt sich nicht isoliert aufrufen.
AudioServiceShuffleMode toAudioServiceShuffleMode(bool enabled) =>
enabled ? AudioServiceShuffleMode.all : AudioServiceShuffleMode.none;
/// Übersetzung des Player-Loop-Modus in den `audio_service`-Wert für
/// `PlaybackState.repeatMode`. Siehe [toAudioServiceShuffleMode].
AudioServiceRepeatMode toAudioServiceRepeatMode(LoopMode loopMode) =>
switch (loopMode) {
LoopMode.one => AudioServiceRepeatMode.one,
LoopMode.all => AudioServiceRepeatMode.all,
LoopMode.off => AudioServiceRepeatMode.none,
};
/// Im Offline-Modus ist keiner der gewählten Titel ohne Netz abspielbar.
class NichtsOfflineVerfuegbar implements Exception {
const NichtsOfflineVerfuegbar();
@@ -633,6 +649,8 @@ class MeloAudioHandler extends BaseAudioHandler with QueueHandler, SeekHandler {
}[_player.processingState] ??
AudioProcessingState.idle,
playing: _player.playing,
shuffleMode: toAudioServiceShuffleMode(_player.shuffleModeEnabled),
repeatMode: toAudioServiceRepeatMode(_player.loopMode),
updatePosition: _player.position,
bufferedPosition: _player.bufferedPosition,
speed: _player.speed,
+30
View File
@@ -0,0 +1,30 @@
import 'package:audio_service/audio_service.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:just_audio/just_audio.dart';
import 'package:melo/player/audio_handler.dart';
void main() {
group('toAudioServiceShuffleMode', () {
test('true wird zu AudioServiceShuffleMode.all', () {
expect(toAudioServiceShuffleMode(true), AudioServiceShuffleMode.all);
});
test('false wird zu AudioServiceShuffleMode.none', () {
expect(toAudioServiceShuffleMode(false), AudioServiceShuffleMode.none);
});
});
group('toAudioServiceRepeatMode', () {
test('LoopMode.one wird zu AudioServiceRepeatMode.one', () {
expect(toAudioServiceRepeatMode(LoopMode.one), AudioServiceRepeatMode.one);
});
test('LoopMode.all wird zu AudioServiceRepeatMode.all', () {
expect(toAudioServiceRepeatMode(LoopMode.all), AudioServiceRepeatMode.all);
});
test('LoopMode.off wird zu AudioServiceRepeatMode.none', () {
expect(toAudioServiceRepeatMode(LoopMode.off), AudioServiceRepeatMode.none);
});
});
}