import 'package:audio_service/audio_service.dart'; import 'package:audiotagger/audiotagger.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/persistence_actor.dart'; import 'domain/actors/platform_integration_actor.dart'; import 'domain/entities/album.dart'; import 'domain/entities/artist.dart'; import 'domain/entities/smart_list.dart'; import 'domain/modules/managed_queue.dart'; import 'domain/repositories/audio_player_repository.dart'; import 'domain/repositories/music_data_repository.dart'; import 'domain/repositories/persistent_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/increment_play_count.dart'; import 'domain/usecases/init_queue.dart'; import 'domain/usecases/inrement_like_count.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/reset_like_count.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/set_song_blocked.dart'; import 'domain/usecases/shuffle_all.dart'; import 'domain/usecases/toggle_next_song_link.dart'; import 'domain/usecases/toggle_previous_song_link.dart'; import 'domain/usecases/update_database.dart'; import 'presentation/state/album_page_store.dart'; import 'presentation/state/artist_page_store.dart'; import 'presentation/state/audio_store.dart'; import 'presentation/state/music_data_store.dart'; import 'presentation/state/navigation_store.dart'; import 'presentation/state/search_page_store.dart'; import 'presentation/state/settings_store.dart'; import 'presentation/state/smart_list_form_store.dart'; import 'presentation/state/smart_list_page_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/persistent_state_data_source.dart'; import 'system/datasources/platform_integration_data_source.dart'; import 'system/datasources/platform_integration_data_source_impl.dart'; import 'system/datasources/settings_data_source.dart'; import 'system/repositories/audio_player_repository_impl.dart'; import 'system/repositories/music_data_repository_impl.dart'; import 'system/repositories/persistent_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 setupGetIt() async { print('setupGetIt'); // stores getIt.registerLazySingleton( () => MusicDataStore( musicDataInfoRepository: getIt(), incrementLikeCount: getIt(), resetLikeCount: getIt(), setSongBlocked: getIt(), updateDatabase: getIt(), toggleNextSongLink: getIt(), togglePreviousSongLink: getIt(), ), ); getIt.registerLazySingleton( () => 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(), ), ); getIt.registerLazySingleton( () => NavigationStore(), ); getIt.registerLazySingleton( () => SearchPageStore( musicDataInfoRepository: getIt(), ), ); getIt.registerFactoryParam( (Artist? artist, _) => ArtistPageStore(artist: artist!, musicDataInfoRepository: getIt()), ); getIt.registerFactoryParam( (Album? album, _) => AlbumPageStore(album: album!, musicDataInfoRepository: getIt()), ); getIt.registerFactory( () => SettingsStore(settingsRepository: getIt()), ); getIt.registerFactoryParam( (SmartList? smartList, _) => SmartListFormStore(settingsRepository: getIt(), smartList: smartList), ); getIt.registerFactoryParam( (SmartList? smartList, _) => SmartListPageStore(smartList: smartList!, musicDataInfoRepository: getIt()), ); // use cases getIt.registerLazySingleton( () => AddToQueue( getIt(), getIt(), ), ); getIt.registerLazySingleton( () => HandlePlaybackEvent( getIt(), ), ); getIt.registerLazySingleton( () => IncrementLikeCount( getIt(), ), ); getIt.registerLazySingleton( () => IncrementPlayCount( getIt(), ), ); getIt.registerLazySingleton( () => InitQueue( getIt(), ), ); getIt.registerLazySingleton( () => MoveQueueItem( getIt(), getIt(), ), ); getIt.registerLazySingleton( () => Pause( getIt(), ), ); getIt.registerLazySingleton( () => Play( getIt(), ), ); getIt.registerLazySingleton( () => PlayAlbum( getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => PlayArtist( getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => PlayNext( getIt(), getIt(), ), ); getIt.registerLazySingleton( () => PlaySongs( getIt(), getIt(), ), ); getIt.registerLazySingleton( () => RemoveQueueIndex( getIt(), getIt(), ), ); getIt.registerLazySingleton( () => ResetLikeCount( getIt(), ), ); getIt.registerLazySingleton( () => SeekToIndex( getIt(), ), ); getIt.registerLazySingleton( () => SeekToNext( getIt(), ), ); getIt.registerLazySingleton( () => SeekToPrevious( getIt(), ), ); getIt.registerLazySingleton( () => SetCurrentSong( getIt(), ), ); getIt.registerLazySingleton( () => SetLoopMode( getIt(), ), ); getIt.registerLazySingleton( () => SetShuffleMode( getIt(), getIt(), ), ); getIt.registerLazySingleton( () => SetSongBlocked( getIt(), ), ); getIt.registerLazySingleton( () => ShuffleAll( getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => ToggleNextSongLink( getIt(), ), ); getIt.registerLazySingleton( () => TogglePreviousSongLink( getIt(), ), ); getIt.registerLazySingleton( () => UpdateDatabase( getIt(), ), ); // modules getIt.registerLazySingleton( () => ManagedQueue( getIt(), ), ); // repositories getIt.registerLazySingleton( () => AudioPlayerRepositoryImpl( getIt(), getIt(), ), ); getIt.registerLazySingleton( () => getIt(), ); getIt.registerLazySingleton( () => MusicDataRepositoryImpl( getIt(), getIt(), ), ); getIt.registerLazySingleton( () => getIt(), ); getIt.registerLazySingleton( () => PersistentStateRepositoryImpl( getIt(), ), ); getIt.registerLazySingleton( () => SettingsRepositoryImpl( getIt(), ), ); getIt.registerLazySingleton( () => PlatformIntegrationRepositoryImpl( getIt(), ), ); getIt.registerLazySingleton( () => getIt(), ); // data sources final MoorDatabase moorDatabase = MoorDatabase(); getIt.registerLazySingleton(() => moorDatabase.musicDataDao); getIt.registerLazySingleton(() => moorDatabase.persistentStateDao); getIt.registerLazySingleton(() => moorDatabase.settingsDao); getIt.registerLazySingleton( () => LocalMusicFetcherImpl( getIt(), getIt(), ), ); final AudioPlayerDataSource audioPlayer = AudioPlayerDataSourceImpl( AudioPlayer(), ); getIt.registerLazySingleton(() => audioPlayer); final PlatformIntegrationDataSource _platformIntegrationDataSource = PlatformIntegrationDataSourceImpl(); getIt.registerLazySingleton( () => _platformIntegrationDataSource, ); // external final _audioHandler = await AudioService.init( builder: () => _platformIntegrationDataSource as AudioHandler, config: AudioServiceConfig( androidNotificationChannelName: 'mucke', androidEnableQueue: true, ), ); getIt.registerLazySingleton(() => _audioHandler); getIt.registerFactory(() => AudioPlayer()); getIt.registerLazySingleton(() => Audiotagger()); // actors getIt.registerSingleton( PlatformIntegrationActor( getIt(), getIt(), getIt(), getIt(), getIt(), ), ); getIt.registerSingleton( AudioPlayerActor( getIt(), getIt(), getIt(), getIt(), getIt(), ), ); getIt.registerSingleton( PersistenceActor( getIt(), getIt(), getIt(), getIt(), getIt(), ), ); }