mucke/lib/presentation/state/audio_store.dart

193 lines
5.3 KiB
Dart
Raw Normal View History

2020-04-07 22:06:43 +02:00
import 'package:mobx/mobx.dart';
import '../../domain/entities/album.dart';
import '../../domain/entities/artist.dart';
2020-12-19 12:22:57 +01:00
import '../../domain/entities/loop_mode.dart';
2020-08-25 16:23:52 +02:00
import '../../domain/entities/shuffle_mode.dart';
2020-04-07 22:06:43 +02:00
import '../../domain/entities/song.dart';
2021-02-26 22:07:18 +01:00
import '../../domain/repositories/audio_player_repository.dart';
2021-03-06 19:09:19 +01:00
import '../../domain/usecases/add_to_queue.dart';
import '../../domain/usecases/move_queue_item.dart';
2021-02-26 22:07:18 +01:00
import '../../domain/usecases/pause.dart';
import '../../domain/usecases/play.dart';
2021-04-16 18:58:27 +02:00
import '../../domain/usecases/play_album.dart';
import '../../domain/usecases/play_artist.dart';
2021-03-06 19:09:19 +01:00
import '../../domain/usecases/play_next.dart';
2021-02-26 22:07:18 +01:00
import '../../domain/usecases/play_songs.dart';
2021-03-06 19:09:19 +01:00
import '../../domain/usecases/remove_queue_index.dart';
import '../../domain/usecases/seek_to_index.dart';
2021-02-26 22:07:18 +01:00
import '../../domain/usecases/seek_to_next.dart';
import '../../domain/usecases/seek_to_previous.dart';
import '../../domain/usecases/set_loop_mode.dart';
2021-03-06 19:09:19 +01:00
import '../../domain/usecases/set_shuffle_mode.dart';
2021-02-26 22:07:18 +01:00
import '../../domain/usecases/shuffle_all.dart';
2020-04-07 22:06:43 +02:00
part 'audio_store.g.dart';
class AudioStore extends _AudioStore with _$AudioStore {
2020-11-15 16:36:50 +01:00
AudioStore({
2021-06-20 13:49:21 +02:00
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,
2021-03-06 19:09:19 +01:00
}) : super(
addToQueue,
moveQueueItem,
playSongs,
audioPlayerInfoRepository,
pause,
play,
2021-04-16 18:58:27 +02:00
playAlbum,
playArtist,
2021-03-06 19:09:19 +01:00
playNext,
removeQueueIndex,
seekToIndex,
seekToNext,
seekToPrevious,
setLoopMode,
setShuffleMode,
shuffleAll,
);
2020-04-07 22:06:43 +02:00
}
abstract class _AudioStore with Store {
2021-02-26 22:07:18 +01:00
_AudioStore(
2021-03-06 19:09:19 +01:00
this._addToQueue,
this._moveQueueItem,
2021-02-26 22:07:18 +01:00
this._playSongs,
this._audioPlayerInfoRepository,
this._pause,
this._play,
2021-04-16 18:58:27 +02:00
this._playAlbum,
this._playArtist,
2021-03-06 19:09:19 +01:00
this._playNext,
this._removeQueueIndex,
this._seekToIndex,
2021-02-26 22:07:18 +01:00
this._seekToNext,
this._seekToPrevious,
this._setLoopMode,
2021-03-06 19:09:19 +01:00
this._setShuffleMode,
2021-02-26 22:07:18 +01:00
this._shuffleAll,
2021-06-20 13:49:21 +02:00
);
2020-04-07 22:06:43 +02:00
2021-02-26 22:07:18 +01:00
final AudioPlayerInfoRepository _audioPlayerInfoRepository;
2021-03-06 19:09:19 +01:00
final AddToQueue _addToQueue;
final MoveQueueItem _moveQueueItem;
2021-02-26 22:07:18 +01:00
final Pause _pause;
final Play _play;
2021-04-16 18:58:27 +02:00
final PlayAlbum _playAlbum;
final PlayArtist _playArtist;
2021-03-06 19:09:19 +01:00
final PlayNext _playNext;
2021-02-26 22:07:18 +01:00
final PlaySongs _playSongs;
2021-03-06 19:09:19 +01:00
final RemoveQueueIndex _removeQueueIndex;
final SeekToIndex _seekToIndex;
2021-02-26 22:07:18 +01:00
final SeekToNext _seekToNext;
final SeekToPrevious _seekToPrevious;
final SetLoopMode _setLoopMode;
2021-03-06 19:09:19 +01:00
final SetShuffleMode _setShuffleMode;
2021-02-26 22:07:18 +01:00
final ShuffleAll _shuffleAll;
2020-04-07 22:06:43 +02:00
@observable
2021-06-20 13:49:21 +02:00
late ObservableStream<Song> currentSongStream =
_audioPlayerInfoRepository.currentSongStream.asObservable();
2020-11-15 16:36:50 +01:00
2020-04-10 20:12:26 +02:00
@observable
2021-06-20 13:49:21 +02:00
late ObservableStream<bool> playingStream =
_audioPlayerInfoRepository.playingStream.asObservable();
2020-04-10 20:12:26 +02:00
2020-04-11 20:23:02 +02:00
@observable
2021-06-20 13:49:21 +02:00
late ObservableStream<Duration> currentPositionStream = _audioPlayerInfoRepository.positionStream
.asObservable(initialValue: const Duration(seconds: 0));
2020-04-11 20:23:02 +02:00
2021-03-06 19:09:19 +01:00
// 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
2020-07-12 18:25:34 +02:00
@observable
2021-06-20 13:49:21 +02:00
late ObservableStream<List<Song>> queueStream =
_audioPlayerInfoRepository.queueStream.asObservable();
2020-07-12 18:25:34 +02:00
@observable
2021-06-20 13:49:21 +02:00
late ObservableStream<int> queueIndexStream =
_audioPlayerInfoRepository.currentIndexStream.asObservable();
2020-07-12 18:25:34 +02:00
2020-08-24 16:43:22 +02:00
@observable
2021-06-20 13:49:21 +02:00
late ObservableStream<ShuffleMode> shuffleModeStream =
_audioPlayerInfoRepository.shuffleModeStream.asObservable();
2020-08-24 16:43:22 +02:00
2020-12-19 12:22:57 +01:00
@observable
2021-06-20 13:49:21 +02:00
late ObservableStream<LoopMode> loopModeStream =
_audioPlayerInfoRepository.loopModeStream.asObservable();
2020-12-19 12:22:57 +01:00
2020-04-07 22:06:43 +02:00
Future<void> playSong(int index, List<Song> songList) async {
2021-02-26 22:07:18 +01:00
_playSongs(songs: songList, initialIndex: index);
2020-04-07 22:06:43 +02:00
}
2020-04-10 20:12:26 +02:00
Future<void> play() async {
2021-02-26 22:07:18 +01:00
_play();
2020-04-10 20:12:26 +02:00
}
Future<void> pause() async {
2021-02-26 22:07:18 +01:00
_pause();
2020-04-10 20:12:26 +02:00
}
2020-07-12 18:25:34 +02:00
Future<void> skipToNext() async {
2021-02-26 22:07:18 +01:00
_seekToNext();
2020-07-12 18:25:34 +02:00
}
Future<void> skipToPrevious() async {
2021-02-26 22:07:18 +01:00
_seekToPrevious();
2020-07-12 18:25:34 +02:00
}
2021-03-06 19:09:19 +01:00
Future<void> seekToIndex(int index) async {
_seekToIndex(index);
2020-12-24 11:20:22 +01:00
}
2020-08-24 16:43:22 +02:00
Future<void> setShuffleMode(ShuffleMode shuffleMode) async {
2021-03-06 19:09:19 +01:00
_setShuffleMode(shuffleMode);
2020-08-24 16:43:22 +02:00
}
2020-12-19 12:22:57 +01:00
Future<void> setLoopMode(LoopMode loopMode) async {
2021-02-26 22:07:18 +01:00
_setLoopMode(loopMode);
2020-12-19 12:22:57 +01:00
}
2020-08-25 16:23:52 +02:00
Future<void> shuffleAll() async {
2021-02-26 22:07:18 +01:00
_shuffleAll();
2020-08-25 16:23:52 +02:00
}
2020-10-25 11:54:11 +01:00
Future<void> addToQueue(Song song) async {
2021-03-06 19:09:19 +01:00
_addToQueue(song);
}
Future<void> playNext(Song song) async {
_playNext(song);
2020-10-25 11:54:11 +01:00
}
Future<void> moveQueueItem(int oldIndex, int newIndex) async {
2021-03-06 19:09:19 +01:00
_moveQueueItem(oldIndex, newIndex);
2020-10-25 11:54:11 +01:00
}
2020-12-08 20:54:41 +01:00
Future<void> removeQueueIndex(int index) async {
2021-03-06 19:09:19 +01:00
_removeQueueIndex(index);
2020-10-25 11:54:11 +01:00
}
Future<void> playAlbum(Album album) async {
2021-04-16 18:58:27 +02:00
_playAlbum(album);
}
Future<void> shuffleArtist(Artist artist) async {
2021-04-16 18:58:27 +02:00
_playArtist(artist);
}
2020-04-10 20:12:26 +02:00
}