This commit is contained in:
Moritz Weber 2020-12-28 15:45:18 +01:00
parent 2cb557ab6f
commit 3c81067270
8 changed files with 10 additions and 114 deletions

View file

@ -9,10 +9,7 @@ import '../entities/song.dart';
abstract class AudioRepository {
Stream<Song> get currentSongStream;
Stream<PlaybackState> get playbackStateStream;
Stream<List<Song>> get queueStream;
Stream<int> get queueIndexStream;
Stream<int> get currentPositionStream;
Stream<ShuffleMode> get shuffleModeStream;
Future<Either<Failure, void>> playSong(int index, List<Song> songList);
Future<Either<Failure, void>> play();
@ -21,7 +18,7 @@ abstract class AudioRepository {
Future<Either<Failure, void>> skipToPrevious();
Future<void> setIndex(int index);
Future<Either<Failure, void>> setShuffleMode(ShuffleMode shuffleMode);
Future<void> setShuffleMode(ShuffleMode shuffleMode);
Future<void> setLoopMode(LoopMode loopMode);
Future<Either<Failure, void>> shuffleAll();

View file

@ -19,14 +19,11 @@ class AudioStore extends _AudioStore with _$AudioStore {
abstract class _AudioStore with Store {
_AudioStore(this._audioRepository, this._persistentPlayerStateRepository) {
currentSongStream = _audioRepository.currentSongStream.distinct().asObservable();
currentPositionStream = _audioRepository.currentPositionStream.asObservable(initialValue: 0);
queueStream = _persistentPlayerStateRepository.queueStream.asObservable();
queueIndexStream = _persistentPlayerStateRepository.currentIndexStream.asObservable();
// queueIndexStream = _audioRepository.queueIndexStream.asObservable();
shuffleModeStream = _persistentPlayerStateRepository.shuffleModeStream.asObservable();
@ -38,15 +35,8 @@ abstract class _AudioStore with Store {
final AudioRepository _audioRepository;
final PlayerStateRepository _persistentPlayerStateRepository;
@observable
ObservableStream<Song> currentSongStream;
@computed
Song get currentSong {
print('currentSong!!!');
print(queueStream.value);
print(queueIndexStream.value);
if (queueStream.value != null && queueIndexStream.value != null) {
if (queueIndexStream.value < queueStream.value.length) {
final song = queueStream.value[queueIndexStream.value];

View file

@ -17,21 +17,6 @@ mixin _$AudioStore on _AudioStore, Store {
name: '_AudioStore.currentSong'))
.value;
final _$currentSongStreamAtom = Atom(name: '_AudioStore.currentSongStream');
@override
ObservableStream<Song> get currentSongStream {
_$currentSongStreamAtom.reportRead();
return super.currentSongStream;
}
@override
set currentSongStream(ObservableStream<Song> value) {
_$currentSongStreamAtom.reportWrite(value, super.currentSongStream, () {
super.currentSongStream = value;
});
}
final _$playbackStateStreamAtom =
Atom(name: '_AudioStore.playbackStateStream');
@ -128,7 +113,6 @@ mixin _$AudioStore on _AudioStore, Store {
@override
String toString() {
return '''
currentSongStream: ${currentSongStream},
playbackStateStream: ${playbackStateStream},
currentPositionStream: ${currentPositionStream},
queueStream: ${queueStream},

View file

@ -30,7 +30,6 @@ class MyAudioHandler extends BaseAudioHandler {
_audioPlayer.shuffleModeStream.listen((shuffleMode) {
_playerStateDataSource.setShuffleMode(shuffleMode);
customEventSubject.add({SHUFFLE_MODE: shuffleMode});
});
_audioPlayer.loopModeStream.listen((event) {
@ -108,8 +107,6 @@ class MyAudioHandler extends BaseAudioHandler {
final context = arguments['CONTEXT'] as List<String>;
final index = arguments['INDEX'] as int;
return playWithContext(context, index);
case APP_LIFECYCLE_RESUMED:
return onAppLifecycleResumed();
case SET_SHUFFLE_MODE:
return setCustomShuffleMode(arguments['SHUFFLE_MODE'] as ShuffleMode);
case SET_LOOP_MODE:
@ -134,11 +131,6 @@ class MyAudioHandler extends BaseAudioHandler {
_audioPlayer.playSongList(songs, index);
}
Future<void> onAppLifecycleResumed() async {
// customEventSubject.add({SHUFFLE_MODE: shuffleMode});
// customEventSubject.add({KEY_INDEX: playbackIndex});
}
Future<void> setCustomShuffleMode(ShuffleMode mode) async {
_audioPlayer.setShuffleMode(mode, true);
}
@ -175,7 +167,6 @@ class MyAudioHandler extends BaseAudioHandler {
void _handlePlaybackEvent(PlaybackEventModel pe) {
if (pe.index != null) {
_playerStateDataSource.setCurrentIndex(pe.index);
customEventSubject.add({KEY_INDEX: pe.index});
}
if (pe.processingState == ProcessingState.ready) {

View file

@ -13,25 +13,12 @@ import 'stream_constants.dart';
typedef Conversion<S, T> = T Function(S);
class AudioManagerImpl implements AudioManager {
AudioManagerImpl(this._audioHandler) {
_audioHandler.customEventStream.listen((event) {
final data = event as Map<String, dynamic>;
if (data.containsKey(KEY_INDEX)) {
_queueIndex = data[KEY_INDEX] as int;
}
if (data.containsKey(SHUFFLE_MODE)) {
_shuffleMode = data[SHUFFLE_MODE] as ShuffleMode;
}
});
}
AudioManagerImpl(this._audioHandler);
final AudioHandler _audioHandler;
int _queueIndex;
ShuffleMode _shuffleMode;
@override
Stream<SongModel> get currentSongStream =>
_filterStream<MediaItem, SongModel>(
Stream<SongModel> get currentSongStream => _filterStream<MediaItem, SongModel>(
_audioHandler.mediaItem.stream,
(MediaItem mi) => SongModel.fromMediaItem(mi),
);
@ -42,46 +29,6 @@ class AudioManagerImpl implements AudioManager {
(PlaybackState ps) => PlaybackStateModel.fromASPlaybackState(ps),
);
// TODO: test
@override
Stream<List<SongModel>> get queueStream {
return _audioHandler.queue.stream.map((mediaItems) =>
mediaItems.map((m) => SongModel.fromMediaItem(m)).toList());
}
@override
Stream<int> get queueIndexStream =>
_queueIndexStream(_audioHandler.customEventStream.cast());
Stream<int> _queueIndexStream(Stream<Map<String, dynamic>> source) async* {
if (_queueIndex != null) {
yield _queueIndex;
}
await for (final data in source) {
if (data.containsKey(KEY_INDEX)) {
yield data[KEY_INDEX] as int;
}
}
}
@override
Stream<ShuffleMode> get shuffleModeStream =>
_shuffleModeStream(_audioHandler.customEventStream.cast());
Stream<ShuffleMode> _shuffleModeStream(
Stream<Map<String, dynamic>> source) async* {
if (_shuffleMode != null) {
yield _shuffleMode;
}
await for (final data in source) {
if (data.containsKey(SHUFFLE_MODE)) {
yield data[SHUFFLE_MODE] as ShuffleMode;
}
}
}
@override
Stream<int> get currentPositionStream => _position().distinct();
@ -154,8 +101,7 @@ class AudioManagerImpl implements AudioManager {
if (statePosition != null && updateTime != null && state != null) {
if (state.playing) {
yield statePosition.inMilliseconds +
(DateTime.now().millisecondsSinceEpoch -
updateTime.millisecondsSinceEpoch);
(DateTime.now().millisecondsSinceEpoch - updateTime.millisecondsSinceEpoch);
} else {
yield statePosition.inMilliseconds;
}
@ -178,7 +124,10 @@ class AudioManagerImpl implements AudioManager {
@override
Future<void> moveQueueItem(int oldIndex, int newIndex) async {
await _audioHandler.customAction(MOVE_QUEUE_ITEM, {'OLD_INDEX': oldIndex, 'NEW_INDEX': newIndex});
await _audioHandler.customAction(MOVE_QUEUE_ITEM, {
'OLD_INDEX': oldIndex,
'NEW_INDEX': newIndex,
});
}
@override

View file

@ -6,11 +6,9 @@ import '../models/song_model.dart';
abstract class AudioManager {
Stream<SongModel> get currentSongStream;
Stream<PlaybackState> get playbackStateStream;
Stream<List<SongModel>> get queueStream;
Stream<int> get queueIndexStream;
/// Current position in the song in milliseconds.
Stream<int> get currentPositionStream;
Stream<ShuffleMode> get shuffleModeStream;
Future<void> playSong(int index, List<SongModel> songList);
Future<void> play();
@ -24,4 +22,4 @@ abstract class AudioManager {
Future<void> addToQueue(SongModel songModel);
Future<void> moveQueueItem(int oldIndex, int newIndex);
Future<void> removeQueueIndex(int index);
}
}

View file

@ -1,8 +1,4 @@
const String KEY_INDEX = 'INDEX';
const String SHUFFLE_MODE = 'SHUFFLE_MODE';
const String PLAY_WITH_CONTEXT = 'PLAY_WITH_CONTEXT';
const String APP_LIFECYCLE_RESUMED = 'APP_LIFECYCLE_RESUMED';
const String SHUFFLE_ALL = 'SHUFFLE_ALL';
const String SET_SHUFFLE_MODE = 'SET_SHUFFLE_MODE';
const String SET_LOOP_MODE = 'SET_LOOP_MODE';

View file

@ -21,15 +21,6 @@ class AudioRepositoryImpl implements AudioRepository {
Stream<PlaybackState> get playbackStateStream =>
_audioManager.playbackStateStream;
@override
Stream<List<Song>> get queueStream => _audioManager.queueStream;
@override
Stream<int> get queueIndexStream => _audioManager.queueIndexStream;
@override
Stream<ShuffleMode> get shuffleModeStream => _audioManager.shuffleModeStream;
@override
Stream<int> get currentPositionStream => _audioManager.currentPositionStream;