diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsViewModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsViewModel.kt index c5902132d..e6e523fef 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsViewModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsViewModel.kt @@ -26,7 +26,7 @@ import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_HAS_U import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_COMPLETED import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_READ import tachiyomi.domain.manga.interactor.GetLibraryManga -import tachiyomi.domain.track.interactor.GetTracks +import tachiyomi.domain.track.interactor.GetTracksPerManga import tachiyomi.domain.track.model.Track import tachiyomi.source.local.isLocal @@ -37,7 +37,7 @@ class StatsViewModel( private val downloadManager: DownloadManager, private val getLibraryManga: GetLibraryManga, private val getTotalReadDuration: GetTotalReadDuration, - private val getTracks: GetTracks, + private val getTracksPerManga: GetTracksPerManga, private val preferences: LibraryPreferences, private val trackerManager: TrackerManager, ) : ViewModel() { @@ -114,8 +114,11 @@ class StatsViewModel( private suspend fun getMangaTrackMap(libraryManga: List): Map> { val loggedInTrackerIds = loggedInTrackers.map { it.id }.toHashSet() + if (loggedInTrackerIds.isEmpty()) return emptyMap() + + val tracksPerManga = getTracksPerManga.await() return libraryManga.associate { manga -> - val tracks = getTracks.await(manga.id) + val tracks = tracksPerManga[manga.id].orEmpty() .fastFilter { it.trackerId in loggedInTrackerIds } manga.id to tracks diff --git a/data/src/main/java/tachiyomi/data/track/TrackRepositoryImpl.kt b/data/src/main/java/tachiyomi/data/track/TrackRepositoryImpl.kt index dc2650211..29c452868 100644 --- a/data/src/main/java/tachiyomi/data/track/TrackRepositoryImpl.kt +++ b/data/src/main/java/tachiyomi/data/track/TrackRepositoryImpl.kt @@ -31,6 +31,12 @@ class TrackRepositoryImpl( .awaitAsList() } + override suspend fun getTracks(): List { + return database.manga_trackQueries + .getTracks(TrackMapper::mapTrack) + .awaitAsList() + } + override fun getTracksAsFlow(): Flow> { return database.manga_trackQueries .getTracks(TrackMapper::mapTrack) diff --git a/domain/src/main/java/tachiyomi/domain/track/interactor/GetTracksPerManga.kt b/domain/src/main/java/tachiyomi/domain/track/interactor/GetTracksPerManga.kt index 05434e97e..93570b6dc 100644 --- a/domain/src/main/java/tachiyomi/domain/track/interactor/GetTracksPerManga.kt +++ b/domain/src/main/java/tachiyomi/domain/track/interactor/GetTracksPerManga.kt @@ -11,6 +11,10 @@ class GetTracksPerManga( private val trackRepository: TrackRepository, ) { + suspend fun await(): Map> { + return trackRepository.getTracks().groupBy { it.mangaId } + } + fun subscribe(): Flow>> { return trackRepository.getTracksAsFlow().map { tracks -> tracks.groupBy { it.mangaId } } } diff --git a/domain/src/main/java/tachiyomi/domain/track/repository/TrackRepository.kt b/domain/src/main/java/tachiyomi/domain/track/repository/TrackRepository.kt index 214256ab1..a4cf534ae 100644 --- a/domain/src/main/java/tachiyomi/domain/track/repository/TrackRepository.kt +++ b/domain/src/main/java/tachiyomi/domain/track/repository/TrackRepository.kt @@ -9,6 +9,8 @@ interface TrackRepository { suspend fun getTracksByMangaId(mangaId: Long): List + suspend fun getTracks(): List + fun getTracksAsFlow(): Flow> fun getTracksByMangaIdAsFlow(mangaId: Long): Flow>