add SettingsRepository for library folders
This commit is contained in:
parent
3c81067270
commit
26756bb0d5
9 changed files with 1160 additions and 940 deletions
3
lib/domain/repositories/settings_repository.dart
Normal file
3
lib/domain/repositories/settings_repository.dart
Normal file
|
@ -0,0 +1,3 @@
|
|||
abstract class SettingsRepository {
|
||||
Future<void> addLibraryFolder(String path);
|
||||
}
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
23
lib/system/datasources/moor/settings_dao.dart
Normal file
23
lib/system/datasources/moor/settings_dao.dart
Normal 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());
|
||||
}
|
||||
}
|
11
lib/system/datasources/moor/settings_dao.g.dart
Normal file
11
lib/system/datasources/moor/settings_dao.g.dart
Normal 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;
|
||||
}
|
|
@ -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
4
lib/system/datasources/settings_data_source.dart
Normal file
4
lib/system/datasources/settings_data_source.dart
Normal file
|
@ -0,0 +1,4 @@
|
|||
abstract class SettingsDataSource {
|
||||
Future<void> addLibraryFolder(String path);
|
||||
Future<List<String>> getLibraryFolders();
|
||||
}
|
13
lib/system/repositories/settings_repository_impl.dart
Normal file
13
lib/system/repositories/settings_repository_impl.dart
Normal 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);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue