326 lines
8.7 KiB
Dart
326 lines
8.7 KiB
Dart
import 'package:audio_service/audio_service.dart';
|
|
import 'package:device_info/device_info.dart';
|
|
import 'package:flutter_audio_query/flutter_audio_query.dart';
|
|
import 'package:get_it/get_it.dart';
|
|
import 'package:just_audio/just_audio.dart';
|
|
|
|
import 'domain/actors/audio_player_actor.dart';
|
|
import 'domain/actors/platform_integration_actor.dart';
|
|
import 'domain/modules/queue_manager.dart';
|
|
import 'domain/repositories/audio_player_repository.dart';
|
|
import 'domain/repositories/music_data_modifier_repository.dart';
|
|
import 'domain/repositories/music_data_repository.dart';
|
|
import 'domain/repositories/persistent_player_state_repository.dart';
|
|
import 'domain/repositories/platform_integration_repository.dart';
|
|
import 'domain/repositories/settings_repository.dart';
|
|
import 'domain/usecases/add_to_queue.dart';
|
|
import 'domain/usecases/handle_playback_state.dart';
|
|
import 'domain/usecases/move_queue_item.dart';
|
|
import 'domain/usecases/pause.dart';
|
|
import 'domain/usecases/play.dart';
|
|
import 'domain/usecases/play_album.dart';
|
|
import 'domain/usecases/play_artist.dart';
|
|
import 'domain/usecases/play_next.dart';
|
|
import 'domain/usecases/play_songs.dart';
|
|
import 'domain/usecases/remove_queue_index.dart';
|
|
import 'domain/usecases/seek_to_index.dart';
|
|
import 'domain/usecases/seek_to_next.dart';
|
|
import 'domain/usecases/seek_to_previous.dart';
|
|
import 'domain/usecases/set_current_song.dart';
|
|
import 'domain/usecases/set_loop_mode.dart';
|
|
import 'domain/usecases/set_shuffle_mode.dart';
|
|
import 'domain/usecases/shuffle_all.dart';
|
|
import 'domain/usecases/update_database.dart';
|
|
import 'presentation/state/audio_store.dart';
|
|
import 'presentation/state/music_data_store.dart';
|
|
import 'presentation/state/navigation_store.dart';
|
|
import 'system/datasources/audio_player_data_source.dart';
|
|
import 'system/datasources/audio_player_data_source_impl.dart';
|
|
import 'system/datasources/local_music_fetcher.dart';
|
|
import 'system/datasources/local_music_fetcher_impl.dart';
|
|
import 'system/datasources/moor_database.dart';
|
|
import 'system/datasources/music_data_source_contract.dart';
|
|
import 'system/datasources/platform_integration_data_source.dart';
|
|
import 'system/datasources/platform_integration_data_source_impl.dart';
|
|
import 'system/datasources/player_state_data_source.dart';
|
|
import 'system/datasources/settings_data_source.dart';
|
|
import 'system/repositories/audio_player_repository_impl.dart';
|
|
import 'system/repositories/music_data_modifier_repository_impl.dart';
|
|
import 'system/repositories/music_data_repository_impl.dart';
|
|
import 'system/repositories/persistent_player_state_repository_impl.dart';
|
|
import 'system/repositories/platform_integration_repository_impl.dart';
|
|
import 'system/repositories/settings_repository_impl.dart';
|
|
|
|
final GetIt getIt = GetIt.instance;
|
|
|
|
Future<void> setupGetIt() async {
|
|
print('setupGetIt');
|
|
|
|
// stores
|
|
getIt.registerFactory<MusicDataStore>(
|
|
() {
|
|
final musicDataStore = MusicDataStore(
|
|
musicDataInfoRepository: getIt(),
|
|
settingsRepository: getIt(),
|
|
musicDataModifierRepository: getIt(),
|
|
updateDatabase: getIt(),
|
|
);
|
|
return musicDataStore;
|
|
},
|
|
);
|
|
getIt.registerFactory<AudioStore>(
|
|
() {
|
|
final audioStore = AudioStore(
|
|
audioPlayerInfoRepository: getIt(),
|
|
addToQueue: getIt(),
|
|
moveQueueItem: getIt(),
|
|
pause: getIt(),
|
|
play: getIt(),
|
|
playAlbum: getIt(),
|
|
playArtist: getIt(),
|
|
playNext: getIt(),
|
|
playSongs: getIt(),
|
|
removeQueueIndex: getIt(),
|
|
seekToIndex: getIt(),
|
|
seekToNext: getIt(),
|
|
seekToPrevious: getIt(),
|
|
setLoopMode: getIt(),
|
|
setShuffleMode: getIt(),
|
|
shuffleAll: getIt(),
|
|
);
|
|
return audioStore;
|
|
},
|
|
);
|
|
getIt.registerFactory<NavigationStore>(
|
|
() {
|
|
final navigationStore = NavigationStore();
|
|
return navigationStore;
|
|
},
|
|
);
|
|
|
|
// use cases
|
|
getIt.registerLazySingleton<AddToQueue>(
|
|
() => AddToQueue(
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<HandlePlaybackEvent>(
|
|
() => HandlePlaybackEvent(
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<MoveQueueItem>(
|
|
() => MoveQueueItem(
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<Pause>(
|
|
() => Pause(
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<Play>(
|
|
() => Play(
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<PlayAlbum>(
|
|
() => PlayAlbum(
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<PlayArtist>(
|
|
() => PlayArtist(
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<PlayNext>(
|
|
() => PlayNext(
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<PlaySongs>(
|
|
() => PlaySongs(
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<RemoveQueueIndex>(
|
|
() => RemoveQueueIndex(
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<SeekToIndex>(
|
|
() => SeekToIndex(
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<SeekToNext>(
|
|
() => SeekToNext(
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<SeekToPrevious>(
|
|
() => SeekToPrevious(
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<SetCurrentSong>(
|
|
() => SetCurrentSong(
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<SetLoopMode>(
|
|
() => SetLoopMode(
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<SetShuffleMode>(
|
|
() => SetShuffleMode(
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<ShuffleAll>(
|
|
() => ShuffleAll(
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<UpdateDatabase>(
|
|
() => UpdateDatabase(
|
|
getIt(),
|
|
),
|
|
);
|
|
|
|
// modules
|
|
getIt.registerLazySingleton<QueueManagerModule>(
|
|
() => QueueManagerModule(
|
|
getIt(),
|
|
),
|
|
);
|
|
|
|
// repositories
|
|
getIt.registerLazySingleton<AudioPlayerRepository>(
|
|
() => AudioPlayerRepositoryImpl(
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<AudioPlayerInfoRepository>(
|
|
() => getIt<AudioPlayerRepository>(),
|
|
);
|
|
|
|
getIt.registerLazySingleton<MusicDataRepository>(
|
|
() => MusicDataRepositoryImpl(
|
|
getIt(),
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<MusicDataInfoRepository>(
|
|
() => getIt<MusicDataRepository>(),
|
|
);
|
|
getIt.registerLazySingleton<MusicDataModifierRepository>(
|
|
() => MusicDataModifierRepositoryImpl(
|
|
getIt(),
|
|
),
|
|
);
|
|
|
|
getIt.registerLazySingleton<PlayerStateRepository>(
|
|
() => PlayerStateRepositoryImpl(
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<SettingsRepository>(
|
|
() => SettingsRepositoryImpl(
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<PlatformIntegrationRepository>(
|
|
() => PlatformIntegrationRepositoryImpl(
|
|
getIt(),
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<PlatformIntegrationInfoRepository>(
|
|
() => getIt<PlatformIntegrationRepository>(),
|
|
);
|
|
|
|
// data sources
|
|
final MoorDatabase moorDatabase = MoorDatabase();
|
|
getIt.registerLazySingleton<MusicDataSource>(() => moorDatabase.musicDataDao);
|
|
getIt.registerLazySingleton<PlayerStateDataSource>(() => moorDatabase.playerStateDao);
|
|
getIt.registerLazySingleton<SettingsDataSource>(() => moorDatabase.settingsDao);
|
|
getIt.registerLazySingleton<LocalMusicFetcher>(
|
|
() => LocalMusicFetcherImpl(
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
),
|
|
);
|
|
|
|
final AudioPlayerDataSource audioPlayer = AudioPlayerDataSourceImpl(
|
|
AudioPlayer(),
|
|
);
|
|
getIt.registerLazySingleton<AudioPlayerDataSource>(() => audioPlayer);
|
|
|
|
final PlatformIntegrationDataSource _platformIntegrationDataSource =
|
|
PlatformIntegrationDataSourceImpl();
|
|
getIt.registerLazySingleton<PlatformIntegrationDataSource>(
|
|
() => _platformIntegrationDataSource,
|
|
);
|
|
|
|
// external
|
|
final _audioHandler = await AudioService.init(
|
|
builder: () => _platformIntegrationDataSource as AudioHandler,
|
|
config: AudioServiceConfig(
|
|
androidNotificationChannelName: 'mucke',
|
|
androidEnableQueue: true,
|
|
),
|
|
);
|
|
getIt.registerLazySingleton<AudioHandler>(() => _audioHandler);
|
|
|
|
getIt.registerFactory<AudioPlayer>(() => AudioPlayer());
|
|
|
|
getIt.registerLazySingleton<FlutterAudioQuery>(() => FlutterAudioQuery());
|
|
|
|
getIt.registerLazySingleton<DeviceInfoPlugin>(() => DeviceInfoPlugin());
|
|
|
|
// actors
|
|
getIt.registerSingleton<PlatformIntegrationActor>(
|
|
PlatformIntegrationActor(
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
),
|
|
);
|
|
|
|
getIt.registerSingleton<AudioPlayerActor>(
|
|
AudioPlayerActor(
|
|
getIt(),
|
|
getIt(),
|
|
getIt(),
|
|
),
|
|
);
|
|
}
|