add SettingsRepository for library folders

This commit is contained in:
Moritz Weber 2020-12-28 16:41:03 +01:00
parent 3c81067270
commit 26756bb0d5
9 changed files with 1160 additions and 940 deletions

View file

@ -0,0 +1,3 @@
abstract class SettingsRepository {
Future<void> addLibraryFolder(String path);
}

View file

@ -63,7 +63,7 @@ class SettingsPage extends StatelessWidget {
ListTile(
title: const Text('Select library folders'),
trailing: const Icon(Icons.chevron_right),
onTap: () => _openFilePicker(),
onTap: () => _openFilePicker(store),
),
const Divider(
height: 4.0,
@ -72,10 +72,9 @@ class SettingsPage extends StatelessWidget {
);
}
Future<void> _openFilePicker() async {
Future<void> _openFilePicker(MusicDataStore store) async {
try {
var _path = await FilePicker.platform.getDirectoryPath();
print(_path);
store.addLibraryFolder(await FilePicker.platform.getDirectoryPath());
} on PlatformException catch (e) {
print('Unsupported operation' + e.toString());
} catch (ex) {

View file

@ -5,20 +5,24 @@ import '../../domain/entities/album.dart';
import '../../domain/entities/artist.dart';
import '../../domain/entities/song.dart';
import '../../domain/repositories/music_data_repository.dart';
import '../../domain/repositories/settings_repository.dart';
part 'music_data_store.g.dart';
class MusicDataStore extends _MusicDataStore with _$MusicDataStore {
MusicDataStore({@required MusicDataRepository musicDataRepository})
: super(musicDataRepository);
MusicDataStore({
@required MusicDataRepository musicDataRepository,
@required SettingsRepository settingsRepository,
}) : super(musicDataRepository, settingsRepository);
}
abstract class _MusicDataStore with Store {
_MusicDataStore(this._musicDataRepository) {
_MusicDataStore(this._musicDataRepository, this._settingsRepository) {
songStream = _musicDataRepository.songStream.asObservable(initialValue: []);
}
final MusicDataRepository _musicDataRepository;
final SettingsRepository _settingsRepository;
bool _initialized = false;
@ -121,13 +125,6 @@ abstract class _MusicDataStore with Store {
@action
Future<void> fetchSongsFromAlbum(Album album) async {
albumSongStream = _musicDataRepository.getAlbumSongStream(album).asObservable(initialValue: []);
// final result = await _musicDataRepository.getSongsFromAlbum(album);
// albumSongs.clear();
// result.fold(
// (_) => albumSongs = <Song>[].asObservable(),
// (songList) => albumSongs.addAll(songList),
// );
}
Future<void> setSongBlocked(Song song, bool blocked) async {
@ -137,4 +134,8 @@ abstract class _MusicDataStore with Store {
Future<void> toggleNextSongLink(Song song) async {
await _musicDataRepository.toggleNextSongLink(song);
}
Future<void> addLibraryFolder(String path) async {
await _settingsRepository.addLibraryFolder(path);
}
}

View file

@ -0,0 +1,23 @@
import 'package:moor/moor.dart';
import '../moor_music_data_source.dart';
import '../settings_data_source.dart';
part 'settings_dao.g.dart';
@UseDao(tables: [LibraryFolders])
class SettingsDao extends DatabaseAccessor<MoorMusicDataSource>
with _$SettingsDaoMixin
implements SettingsDataSource {
SettingsDao(MoorMusicDataSource attachedDatabase) : super(attachedDatabase);
@override
Future<void> addLibraryFolder(String path) async {
await into(libraryFolders).insert(LibraryFoldersCompanion(path: Value(path)));
}
@override
Future<List<String>> getLibraryFolders() {
return select(libraryFolders).get().then((value) => value.map((e) => e.path).toList());
}
}

View file

@ -0,0 +1,11 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'settings_dao.dart';
// **************************************************************************
// DaoGenerator
// **************************************************************************
mixin _$SettingsDaoMixin on DatabaseAccessor<MoorMusicDataSource> {
$LibraryFoldersTable get libraryFolders => attachedDatabase.libraryFolders;
}

View file

@ -11,6 +11,7 @@ import '../models/album_model.dart';
import '../models/artist_model.dart';
import '../models/song_model.dart';
import 'moor/player_state_dao.dart';
import 'moor/settings_dao.dart';
import 'music_data_source_contract.dart';
part 'moor_music_data_source.g.dart';
@ -78,18 +79,24 @@ class PersistentLoopMode extends Table {
IntColumn get loopMode => integer().withDefault(const Constant(0))();
}
class LibraryFolders extends Table {
TextColumn get path => text()();
}
@UseMoor(
tables: [
Artists,
Albums,
Songs,
Artists,
LibraryFolders,
QueueEntries,
PersistentIndex,
PersistentShuffleMode,
PersistentLoopMode,
PersistentShuffleMode,
Songs,
],
daos: [
PlayerStateDao,
SettingsDao,
],
)
class MoorMusicDataSource extends _$MoorMusicDataSource implements MusicDataSource {

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,4 @@
abstract class SettingsDataSource {
Future<void> addLibraryFolder(String path);
Future<List<String>> getLibraryFolders();
}

View file

@ -0,0 +1,13 @@
import '../../domain/repositories/settings_repository.dart';
import '../datasources/settings_data_source.dart';
class SettingsRepositoryImpl implements SettingsRepository {
SettingsRepositoryImpl(this._settingsDataSource);
final SettingsDataSource _settingsDataSource;
@override
Future<void> addLibraryFolder(String path) async {
await _settingsDataSource.addLibraryFolder(path);
}
}