mucke/lib/presentation/state/music_data_store.dart

102 lines
2.3 KiB
Dart
Raw Normal View History

2020-04-06 22:33:26 +02:00
import 'package:meta/meta.dart';
2020-03-28 09:39:31 +01:00
import 'package:mobx/mobx.dart';
import '../../domain/entities/album.dart';
import '../../domain/entities/song.dart';
2020-03-28 09:39:31 +01:00
import '../../domain/repositories/music_data_repository.dart';
part 'music_data_store.g.dart';
2020-03-28 09:39:31 +01:00
2020-04-07 22:06:43 +02:00
class MusicDataStore extends _MusicDataStore with _$MusicDataStore {
MusicDataStore({@required MusicDataRepository musicDataRepository})
: super(musicDataRepository);
2020-03-28 09:39:31 +01:00
}
2020-04-07 22:06:43 +02:00
abstract class _MusicDataStore with Store {
2020-08-01 19:45:40 +02:00
_MusicDataStore(this._musicDataRepository);
2020-03-28 09:39:31 +01:00
final MusicDataRepository _musicDataRepository;
2020-04-10 20:12:26 +02:00
2020-08-01 20:14:13 +02:00
bool _initialized = false;
2020-03-28 09:39:31 +01:00
@observable
2020-08-01 20:14:13 +02:00
ObservableList<Album> albums = <Album>[].asObservable();
@observable
bool isFetchingAlbums = false;
2020-03-28 09:39:31 +01:00
@observable
ObservableList<Song> songs = <Song>[].asObservable();
@observable
bool isFetchingSongs = false;
2020-03-30 23:19:02 +02:00
@observable
bool isUpdatingDatabase = false;
@observable
ObservableList<Song> albumSongs = <Song>[].asObservable();
2020-04-10 20:12:26 +02:00
@action
2020-05-27 21:54:33 +02:00
void init() {
2020-04-10 20:12:26 +02:00
if (!_initialized) {
print('MusicDataStore.init');
fetchAlbums();
fetchSongs();
_initialized = true;
}
}
2020-03-28 09:39:31 +01:00
@action
Future<void> updateDatabase() async {
2020-03-30 23:19:02 +02:00
isUpdatingDatabase = true;
2020-08-01 19:45:40 +02:00
await _musicDataRepository.updateDatabase();
2020-04-04 21:02:42 +02:00
await Future.wait([
fetchAlbums(),
fetchSongs(),
]);
2020-03-30 23:19:02 +02:00
isUpdatingDatabase = false;
2020-03-28 09:39:31 +01:00
}
@action
2020-04-03 15:51:43 +02:00
Future<void> fetchAlbums() async {
2020-08-01 20:14:13 +02:00
isFetchingAlbums = true;
final result = await _musicDataRepository.getAlbums();
result.fold(
(_) => albums = <Album>[].asObservable(),
(albumList) {
albums.clear();
albums.addAll(albumList);
},
);
2020-08-01 20:14:13 +02:00
isFetchingAlbums = false;
2020-03-28 09:39:31 +01:00
}
2020-04-03 15:51:43 +02:00
@action
Future<void> fetchSongs() async {
isFetchingSongs = true;
2020-08-01 19:45:40 +02:00
final result = await _musicDataRepository.getSongs();
result.fold(
(_) => songs = <Song>[].asObservable(),
2020-04-04 21:54:43 +02:00
(songList) {
songs.clear();
songs.addAll(songList);
},
);
2020-04-04 21:54:43 +02:00
isFetchingSongs = false;
}
@action
Future<void> fetchSongsFromAlbum(Album album) async {
final result = await _musicDataRepository.getSongsFromAlbum(album);
albumSongs.clear();
result.fold(
(_) => albumSongs = <Song>[].asObservable(),
(songList) => albumSongs.addAll(songList),
);
}
2020-03-28 09:39:31 +01:00
}