import 'package:meta/meta.dart'; import 'package:mobx/mobx.dart'; import '../../domain/entities/album.dart'; import '../../domain/entities/artist.dart'; import '../../domain/entities/loop_mode.dart'; import '../../domain/entities/playback_state.dart'; import '../../domain/entities/shuffle_mode.dart'; import '../../domain/entities/song.dart'; import '../../domain/repositories/audio_repository.dart'; import '../../domain/repositories/persistent_player_state_repository.dart'; part 'audio_store.g.dart'; class AudioStore extends _AudioStore with _$AudioStore { AudioStore({ @required AudioRepository audioRepository, @required PlayerStateRepository persistentPlayerStateRepository, }) : super(audioRepository, persistentPlayerStateRepository); } abstract class _AudioStore with Store { _AudioStore(this._audioRepository, this._persistentPlayerStateRepository) { currentPositionStream = _audioRepository.currentPositionStream.asObservable(initialValue: 0); queueStream = _persistentPlayerStateRepository.queueStream.asObservable(); queueIndexStream = _persistentPlayerStateRepository.currentIndexStream.asObservable(); shuffleModeStream = _persistentPlayerStateRepository.shuffleModeStream.asObservable(); loopModeStream = _persistentPlayerStateRepository.loopModeStream.asObservable(); playbackStateStream = _audioRepository.playbackStateStream.asObservable(); } final AudioRepository _audioRepository; final PlayerStateRepository _persistentPlayerStateRepository; @computed Song get currentSong { if (queueStream.value != null && queueIndexStream.value != null) { if (queueIndexStream.value < queueStream.value.length) { final song = queueStream.value[queueIndexStream.value]; return song; } } return null; } @observable ObservableStream playbackStateStream; @observable ObservableStream currentPositionStream; @observable ObservableStream> queueStream; @observable ObservableStream queueIndexStream; @observable ObservableStream shuffleModeStream; @observable ObservableStream loopModeStream; Future playSong(int index, List songList) async { _audioRepository.playSong(index, songList); } Future play() async { _audioRepository.play(); } Future pause() async { _audioRepository.pause(); } Future skipToNext() async { _audioRepository.skipToNext(); } Future skipToPrevious() async { _audioRepository.skipToPrevious(); } Future setIndex(int index) async { _audioRepository.setIndex(index); } Future setShuffleMode(ShuffleMode shuffleMode) async { _audioRepository.setShuffleMode(shuffleMode); } Future setLoopMode(LoopMode loopMode) async { _audioRepository.setLoopMode(loopMode); } Future shuffleAll() async { _audioRepository.shuffleAll(); } Future addToQueue(Song song) async { _audioRepository.addToQueue(song); } Future moveQueueItem(int oldIndex, int newIndex) async { _audioRepository.moveQueueItem(oldIndex, newIndex); } Future removeQueueIndex(int index) async { _audioRepository.removeQueueIndex(index); } Future playAlbum(Album album) async { _audioRepository.playAlbum(album); } Future shuffleArtist(Artist artist) async { _audioRepository.playArtist(artist, shuffleMode: ShuffleMode.plus); } }