mucke/lib/presentation/state/audio_store.dart

126 lines
3.4 KiB
Dart
Raw Normal View History

2020-04-07 22:06:43 +02:00
import 'package:meta/meta.dart';
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-04-10 20:12:26 +02:00
import '../../domain/entities/playback_state.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';
import '../../domain/repositories/audio_repository.dart';
2020-12-21 11:50:46 +01:00
import '../../domain/repositories/persistent_player_state_repository.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({
@required AudioRepository audioRepository,
2020-12-21 11:50:46 +01:00
@required PlayerStateRepository persistentPlayerStateRepository,
}) : super(audioRepository, persistentPlayerStateRepository);
2020-04-07 22:06:43 +02:00
}
abstract class _AudioStore with Store {
2020-12-21 11:57:30 +01:00
_AudioStore(this._audioRepository, this._persistentPlayerStateRepository) {
2020-12-15 21:09:58 +01:00
currentPositionStream = _audioRepository.currentPositionStream.asObservable(initialValue: 0);
2020-09-19 17:08:48 +02:00
2020-12-21 11:50:46 +01:00
queueStream = _persistentPlayerStateRepository.queueStream.asObservable();
2020-09-19 17:08:48 +02:00
2020-12-21 11:50:46 +01:00
queueIndexStream = _persistentPlayerStateRepository.currentIndexStream.asObservable();
2020-09-19 17:08:48 +02:00
2020-12-21 11:57:30 +01:00
shuffleModeStream = _persistentPlayerStateRepository.shuffleModeStream.asObservable();
2020-09-19 17:08:48 +02:00
2020-12-21 11:50:46 +01:00
loopModeStream = _persistentPlayerStateRepository.loopModeStream.asObservable();
2020-12-19 12:22:57 +01:00
2020-09-19 17:08:48 +02:00
playbackStateStream = _audioRepository.playbackStateStream.asObservable();
}
2020-04-07 22:06:43 +02:00
final AudioRepository _audioRepository;
2020-12-21 11:50:46 +01:00
final PlayerStateRepository _persistentPlayerStateRepository;
2020-04-07 22:06:43 +02:00
2020-11-15 16:36:50 +01:00
@computed
Song get currentSong {
2020-12-21 11:50:46 +01:00
if (queueStream.value != null && queueIndexStream.value != null) {
2020-12-15 21:09:58 +01:00
if (queueIndexStream.value < queueStream.value.length) {
final song = queueStream.value[queueIndexStream.value];
return song;
}
2020-11-15 16:36:50 +01:00
}
return null;
}
2020-04-10 20:12:26 +02:00
@observable
ObservableStream<PlaybackState> playbackStateStream;
2020-04-11 20:23:02 +02:00
@observable
ObservableStream<int> currentPositionStream;
2020-07-12 18:25:34 +02:00
@observable
ObservableStream<List<Song>> queueStream;
@observable
ObservableStream<int> queueIndexStream;
2020-08-24 16:43:22 +02:00
@observable
ObservableStream<ShuffleMode> shuffleModeStream;
2020-12-19 12:22:57 +01:00
@observable
ObservableStream<LoopMode> loopModeStream;
2020-04-07 22:06:43 +02:00
Future<void> playSong(int index, List<Song> songList) async {
_audioRepository.playSong(index, songList);
}
2020-04-10 20:12:26 +02:00
Future<void> play() async {
_audioRepository.play();
}
Future<void> pause() async {
_audioRepository.pause();
}
2020-07-12 18:25:34 +02:00
Future<void> skipToNext() async {
_audioRepository.skipToNext();
}
Future<void> skipToPrevious() async {
_audioRepository.skipToPrevious();
}
2020-12-24 11:20:22 +01:00
Future<void> setIndex(int index) async {
_audioRepository.setIndex(index);
}
2020-08-24 16:43:22 +02:00
Future<void> setShuffleMode(ShuffleMode shuffleMode) async {
_audioRepository.setShuffleMode(shuffleMode);
}
2020-12-19 12:22:57 +01:00
Future<void> setLoopMode(LoopMode loopMode) async {
_audioRepository.setLoopMode(loopMode);
}
2020-08-25 16:23:52 +02:00
Future<void> shuffleAll() async {
_audioRepository.shuffleAll();
}
2020-10-25 11:54:11 +01:00
Future<void> addToQueue(Song song) async {
_audioRepository.addToQueue(song);
}
Future<void> moveQueueItem(int oldIndex, int newIndex) async {
_audioRepository.moveQueueItem(oldIndex, newIndex);
}
2020-12-08 20:54:41 +01:00
Future<void> removeQueueIndex(int index) async {
_audioRepository.removeQueueIndex(index);
2020-10-25 11:54:11 +01:00
}
Future<void> playAlbum(Album album) async {
_audioRepository.playAlbum(album);
}
Future<void> shuffleArtist(Artist artist) async {
_audioRepository.playArtist(artist, shuffleMode: ShuffleMode.plus);
}
2020-04-10 20:12:26 +02:00
}