From 8e36a48396b3f0d690cf02b4bdfd69bc8790dd32 Mon Sep 17 00:00:00 2001 From: Land <84073086+LandWarderer2772@users.noreply.github.com> Date: Fri, 2 Jan 2026 03:39:27 +0000 Subject: [PATCH] Refactor scrobbler injection to use Provider for lazy initialization --- .../landwarderer/futon/alternatives/domain/MigrateUseCase.kt | 4 +++- .../landwarderer/futon/details/domain/DetailsInteractor.kt | 4 +++- .../github/landwarderer/futon/details/ui/DetailsViewModel.kt | 4 +++- .../landwarderer/futon/history/data/HistoryRepository.kt | 3 ++- .../scrobbling/common/ui/config/ScrobblerConfigViewModel.kt | 5 +++-- .../common/ui/selector/ScrobblingSelectorViewModel.kt | 4 +++- 6 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/MigrateUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/MigrateUseCase.kt index 72d253a606..c95e0fe69f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/MigrateUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/MigrateUseCase.kt @@ -16,6 +16,7 @@ import io.github.landwarderer.futon.scrobbling.common.domain.Scrobbler import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblingStatus import io.github.landwarderer.futon.tracker.data.TrackEntity import javax.inject.Inject +import javax.inject.Provider class MigrateUseCase @Inject @@ -24,8 +25,9 @@ constructor( private val mangaDataRepository: MangaDataRepository, private val database: MangaDatabase, private val progressUpdateUseCase: ProgressUpdateUseCase, - private val scrobblers: Set<@JvmSuppressWildcards Scrobbler>, + private val scrobblersProvider: Provider>, ) { + private val scrobblers: Set<@JvmSuppressWildcards Scrobbler> by lazy { scrobblersProvider.get() } suspend operator fun invoke( oldManga: Manga, newManga: Manga, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/DetailsInteractor.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/DetailsInteractor.kt index c62ac26dbe..076bbdd73f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/DetailsInteractor.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/DetailsInteractor.kt @@ -22,6 +22,7 @@ import io.github.landwarderer.futon.scrobbling.common.domain.Scrobbler import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblingInfo import io.github.landwarderer.futon.tracker.domain.TrackingRepository import javax.inject.Inject +import javax.inject.Provider /* TODO: remove */ class DetailsInteractor @Inject constructor( @@ -30,8 +31,9 @@ class DetailsInteractor @Inject constructor( private val localMangaRepository: LocalMangaRepository, private val trackingRepository: TrackingRepository, private val settings: AppSettings, - private val scrobblers: Set<@JvmSuppressWildcards Scrobbler>, + private val scrobblersProvider: Provider>, ) { + private val scrobblers: Set<@JvmSuppressWildcards Scrobbler> by lazy { scrobblersProvider.get() } fun observeFavourite(mangaId: Long): Flow> { return favouritesRepository.observeCategories(mangaId) diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsViewModel.kt index 231e529435..cbb2c42f71 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsViewModel.kt @@ -55,13 +55,14 @@ import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblingInf import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblingStatus import io.github.landwarderer.futon.stats.data.StatsRepository import javax.inject.Inject +import javax.inject.Provider @HiltViewModel class DetailsViewModel @Inject constructor( private val historyRepository: HistoryRepository, bookmarksRepository: BookmarksRepository, settings: AppSettings, - private val scrobblers: Set<@JvmSuppressWildcards Scrobbler>, + private val scrobblersProvider: Provider>, @LocalStorageChanges localStorageChanges: SharedFlow, downloadScheduler: DownloadWorker.Scheduler, interactor: DetailsInteractor, @@ -86,6 +87,7 @@ class DetailsViewModel @Inject constructor( private val intent = MangaIntent(savedStateHandle) private var loadingJob: Job val mangaId = intent.mangaId + private val scrobblers: Set<@JvmSuppressWildcards Scrobbler> by lazy { scrobblersProvider.get() } init { mangaDetails.value = intent.manga?.let { MangaDetails(it) } diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/history/data/HistoryRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/history/data/HistoryRepository.kt index 9b8f98c41e..68fc42c7aa 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/history/data/HistoryRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/history/data/HistoryRepository.kt @@ -40,11 +40,12 @@ import javax.inject.Provider class HistoryRepository @Inject constructor( private val db: MangaDatabase, private val settings: AppSettings, - private val scrobblers: Set<@JvmSuppressWildcards Scrobbler>, + private val scrobblersProvider: Provider>, private val mangaRepository: MangaDataRepository, private val localObserver: HistoryLocalObserver, private val newChaptersUseCaseProvider: Provider, ) { + private val scrobblers: Set<@JvmSuppressWildcards Scrobbler> by lazy { scrobblersProvider.get() } suspend fun getList(offset: Int, limit: Int): List { val entities = db.getHistoryDao().findAll(offset, limit) diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/ui/config/ScrobblerConfigViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/ui/config/ScrobblerConfigViewModel.kt index 17ef5faba3..7683596c18 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/ui/config/ScrobblerConfigViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/ui/config/ScrobblerConfigViewModel.kt @@ -28,15 +28,16 @@ import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblerUser import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblingInfo import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblingStatus import javax.inject.Inject +import javax.inject.Provider @HiltViewModel class ScrobblerConfigViewModel @Inject constructor( savedStateHandle: SavedStateHandle, - scrobblers: Set<@JvmSuppressWildcards Scrobbler>, + scrobblersProvider: Provider>, ) : BaseViewModel() { private val scrobblerService = getScrobblerService(savedStateHandle) - private val scrobbler = scrobblers.first { it.scrobblerService == scrobblerService } + private val scrobbler = scrobblersProvider.get().first { it.scrobblerService == scrobblerService } val titleResId = scrobbler.scrobblerService.titleResId diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/ui/selector/ScrobblingSelectorViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/ui/selector/ScrobblingSelectorViewModel.kt index d38f2a4095..de3371d6c0 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/ui/selector/ScrobblingSelectorViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/ui/selector/ScrobblingSelectorViewModel.kt @@ -34,16 +34,18 @@ import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblerMang import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblingStatus import io.github.landwarderer.futon.scrobbling.common.ui.selector.model.ScrobblerHint import javax.inject.Inject +import javax.inject.Provider @HiltViewModel class ScrobblingSelectorViewModel @Inject constructor( savedStateHandle: SavedStateHandle, - scrobblers: Set<@JvmSuppressWildcards Scrobbler>, + scrobblersProvider: Provider>, private val historyRepository: HistoryRepository, ) : BaseViewModel() { val manga = savedStateHandle.require(AppRouter.KEY_MANGA).manga + private val scrobblers by lazy { scrobblersProvider.get() } val availableScrobblers = scrobblers.filter { it.isEnabled } val selectedScrobblerIndex = MutableStateFlow(0)