mucke/lib/presentation/state/music_data_store.dart

104 lines
3.2 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';
2020-08-08 19:02:03 +02:00
import '../../domain/entities/artist.dart';
import '../../domain/entities/song.dart';
2021-01-09 19:55:56 +01:00
import '../../domain/repositories/music_data_modifier_repository.dart';
2020-03-28 09:39:31 +01:00
import '../../domain/repositories/music_data_repository.dart';
import '../../domain/repositories/settings_repository.dart';
2021-02-26 22:07:18 +01:00
import '../../domain/usecases/update_database.dart';
2020-03-28 09:39:31 +01:00
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({
2021-02-26 22:07:18 +01:00
@required MusicDataInfoRepository musicDataInfoRepository,
2021-01-09 19:55:56 +01:00
@required MusicDataModifierRepository musicDataModifierRepository,
2021-02-26 22:07:18 +01:00
@required SettingsRepository settingsRepository,
@required UpdateDatabase updateDatabase,
}) : super(
musicDataInfoRepository,
settingsRepository,
musicDataModifierRepository,
updateDatabase,
);
2020-03-28 09:39:31 +01:00
}
2020-04-07 22:06:43 +02:00
abstract class _MusicDataStore with Store {
2021-02-26 22:07:18 +01:00
_MusicDataStore(this._musicDataInfoRepository, this._settingsRepository,
this._musicDataModifierRepository, this._updateDatabase) {
songStream = _musicDataInfoRepository.songStream.asObservable(initialValue: []);
albumStream = _musicDataInfoRepository.albumStream.asObservable(initialValue: []);
artistStream = _musicDataInfoRepository.artistStream.asObservable(initialValue: []);
2020-11-15 16:36:50 +01:00
}
2020-03-28 09:39:31 +01:00
2021-02-26 22:07:18 +01:00
final UpdateDatabase _updateDatabase;
final MusicDataInfoRepository _musicDataInfoRepository;
2021-01-09 19:55:56 +01:00
final MusicDataModifierRepository _musicDataModifierRepository;
final SettingsRepository _settingsRepository;
2020-04-10 20:12:26 +02:00
2020-11-15 16:36:50 +01:00
@observable
ObservableStream<List<Song>> songStream;
@observable
2020-12-30 18:28:16 +01:00
ObservableStream<List<Album>> albumStream;
2020-08-08 19:02:03 +02:00
@observable
2020-12-30 18:28:16 +01:00
ObservableStream<List<Artist>> artistStream;
2020-08-08 19:02:03 +02:00
2020-03-28 09:39:31 +01:00
@observable
2020-12-30 18:28:16 +01:00
ObservableStream<List<Song>> albumSongStream;
2020-03-28 09:39:31 +01:00
@observable
2020-12-30 18:28:16 +01:00
ObservableStream<List<Album>> artistAlbumStream;
2020-03-30 23:19:02 +02:00
@observable
bool isUpdatingDatabase = false;
2021-01-17 10:20:51 +01:00
@computed
2021-02-26 22:07:18 +01:00
List<Album> get sortedArtistAlbums => artistAlbumStream.value.toList()
..sort((a, b) {
if (b.pubYear == null) return -1;
if (a.pubYear == null) return 1;
return -a.pubYear.compareTo(b.pubYear);
});
2021-01-17 10:20:51 +01:00
2020-03-28 09:39:31 +01:00
@action
Future<void> updateDatabase() async {
2020-03-30 23:19:02 +02:00
isUpdatingDatabase = true;
2021-02-26 22:07:18 +01:00
await _updateDatabase();
2020-03-30 23:19:02 +02:00
isUpdatingDatabase = false;
2020-03-28 09:39:31 +01:00
}
@action
Future<void> fetchSongsFromAlbum(Album album) async {
2021-02-26 22:07:18 +01:00
albumSongStream =
_musicDataInfoRepository.getAlbumSongStream(album).asObservable(initialValue: []);
}
2020-09-19 17:08:48 +02:00
@action
Future<void> fetchAlbumsFromArtist(Artist artist) async {
2020-12-30 16:04:20 +01:00
artistAlbumStream =
2021-02-26 22:07:18 +01:00
_musicDataInfoRepository.getArtistAlbumStream(artist).asObservable(initialValue: []);
}
2020-09-19 17:08:48 +02:00
Future<void> setSongBlocked(Song song, bool blocked) async {
2021-01-09 19:55:56 +01:00
await _musicDataModifierRepository.setSongBlocked(song, blocked);
2020-09-19 17:08:48 +02:00
}
Future<void> toggleNextSongLink(Song song) async {
2021-01-09 19:55:56 +01:00
await _musicDataModifierRepository.toggleNextSongLink(song);
}
2021-01-09 19:55:56 +01:00
Future<void> incrementLikeCount(Song song) =>
_musicDataModifierRepository.incrementLikeCount(song);
Future<void> resetLikeCount(Song song) => _musicDataModifierRepository.resetLikeCount(song);
Future<void> addLibraryFolder(String path) async {
await _settingsRepository.addLibraryFolder(path);
}
2020-03-28 09:39:31 +01:00
}