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:
co-authored by
Claude Sonnet 5
parent
40171a7c0e
commit
7dbea128e0
@@ -130,6 +130,22 @@ int startIndexNachFilter(List<bool> behalten, int startIndex) {
|
|||||||
return davor.clamp(0, gesamt - 1);
|
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.
|
/// Im Offline-Modus ist keiner der gewählten Titel ohne Netz abspielbar.
|
||||||
class NichtsOfflineVerfuegbar implements Exception {
|
class NichtsOfflineVerfuegbar implements Exception {
|
||||||
const NichtsOfflineVerfuegbar();
|
const NichtsOfflineVerfuegbar();
|
||||||
@@ -633,6 +649,8 @@ class MeloAudioHandler extends BaseAudioHandler with QueueHandler, SeekHandler {
|
|||||||
}[_player.processingState] ??
|
}[_player.processingState] ??
|
||||||
AudioProcessingState.idle,
|
AudioProcessingState.idle,
|
||||||
playing: _player.playing,
|
playing: _player.playing,
|
||||||
|
shuffleMode: toAudioServiceShuffleMode(_player.shuffleModeEnabled),
|
||||||
|
repeatMode: toAudioServiceRepeatMode(_player.loopMode),
|
||||||
updatePosition: _player.position,
|
updatePosition: _player.position,
|
||||||
bufferedPosition: _player.bufferedPosition,
|
bufferedPosition: _player.bufferedPosition,
|
||||||
speed: _player.speed,
|
speed: _player.speed,
|
||||||
|
|||||||
@@ -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);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user