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/shuffle_mode.dart'; import '../../domain/entities/song.dart'; import '../../domain/repositories/audio_player_repository.dart'; import '../../domain/usecases/add_to_queue.dart'; import '../../domain/usecases/move_queue_item.dart'; import '../../domain/usecases/pause.dart'; import '../../domain/usecases/play.dart'; import '../../domain/usecases/play_album.dart'; import '../../domain/usecases/play_artist.dart'; import '../../domain/usecases/play_next.dart'; import '../../domain/usecases/play_songs.dart'; import '../../domain/usecases/remove_queue_index.dart'; import '../../domain/usecases/seek_to_index.dart'; import '../../domain/usecases/seek_to_next.dart'; import '../../domain/usecases/seek_to_previous.dart'; import '../../domain/usecases/set_loop_mode.dart'; import '../../domain/usecases/set_shuffle_mode.dart'; import '../../domain/usecases/shuffle_all.dart'; part 'audio_store.g.dart'; class AudioStore extends _AudioStore with _$AudioStore { AudioStore({ @required AddToQueue addToQueue, @required MoveQueueItem moveQueueItem, @required Pause pause, @required Play play, @required PlayAlbum playAlbum, @required PlayArtist playArtist, @required PlayNext playNext, @required PlaySongs playSongs, @required RemoveQueueIndex removeQueueIndex, @required SeekToIndex seekToIndex, @required SeekToNext seekToNext, @required SeekToPrevious seekToPrevious, @required SetLoopMode setLoopMode, @required SetShuffleMode setShuffleMode, @required ShuffleAll shuffleAll, @required AudioPlayerInfoRepository audioPlayerInfoRepository, }) : super( addToQueue, moveQueueItem, playSongs, audioPlayerInfoRepository, pause, play, playAlbum, playArtist, playNext, removeQueueIndex, seekToIndex, seekToNext, seekToPrevious, setLoopMode, setShuffleMode, shuffleAll, ); } abstract class _AudioStore with Store { _AudioStore( this._addToQueue, this._moveQueueItem, this._playSongs, this._audioPlayerInfoRepository, this._pause, this._play, this._playAlbum, this._playArtist, this._playNext, this._removeQueueIndex, this._seekToIndex, this._seekToNext, this._seekToPrevious, this._setLoopMode, this._setShuffleMode, this._shuffleAll, ) { currentPositionStream = _audioPlayerInfoRepository.positionStream .asObservable(initialValue: const Duration(seconds: 0)); queueStream = _audioPlayerInfoRepository.queueStream.asObservable(); queueIndexStream = _audioPlayerInfoRepository.currentIndexStream.asObservable(); currentSongStream = _audioPlayerInfoRepository.currentSongStream.asObservable(); shuffleModeStream = _audioPlayerInfoRepository.shuffleModeStream.asObservable(); loopModeStream = _audioPlayerInfoRepository.loopModeStream.asObservable(); playingStream = _audioPlayerInfoRepository.playingStream.asObservable(); } final AudioPlayerInfoRepository _audioPlayerInfoRepository; final AddToQueue _addToQueue; final MoveQueueItem _moveQueueItem; final Pause _pause; final Play _play; final PlayAlbum _playAlbum; final PlayArtist _playArtist; final PlayNext _playNext; final PlaySongs _playSongs; final RemoveQueueIndex _removeQueueIndex; final SeekToIndex _seekToIndex; final SeekToNext _seekToNext; final SeekToPrevious _seekToPrevious; final SetLoopMode _setLoopMode; final SetShuffleMode _setShuffleMode; final ShuffleAll _shuffleAll; @observable ObservableStream currentSongStream; @observable ObservableStream playingStream; @observable ObservableStream currentPositionStream; // beware that this only triggers reactions when a new list (new reference) is set // doesn't work if the same reference is added to BehaviorSubject @observable ObservableStream> queueStream; @observable ObservableStream queueIndexStream; @observable ObservableStream shuffleModeStream; @observable ObservableStream loopModeStream; Future playSong(int index, List songList) async { _playSongs(songs: songList, initialIndex: index); } Future play() async { _play(); } Future pause() async { _pause(); } Future skipToNext() async { _seekToNext(); } Future skipToPrevious() async { _seekToPrevious(); } Future seekToIndex(int index) async { _seekToIndex(index); } Future setShuffleMode(ShuffleMode shuffleMode) async { _setShuffleMode(shuffleMode); } Future setLoopMode(LoopMode loopMode) async { _setLoopMode(loopMode); } Future shuffleAll() async { _shuffleAll(); } Future addToQueue(Song song) async { _addToQueue(song); } Future playNext(Song song) async { _playNext(song); } Future moveQueueItem(int oldIndex, int newIndex) async { _moveQueueItem(oldIndex, newIndex); } Future removeQueueIndex(int index) async { _removeQueueIndex(index); } Future playAlbum(Album album) async { _playAlbum(album); } Future shuffleArtist(Artist artist) async { _playArtist(artist); } }