mirror of
https://github.com/mihonapp/mihon.git
synced 2026-10-16 13:48:09 -07:00
Load all tracks in one query for statistics
This commit is contained in:
@@ -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<LibraryManga>): Map<Long, List<Track>> {
|
||||
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
|
||||
|
||||
@@ -31,6 +31,12 @@ class TrackRepositoryImpl(
|
||||
.awaitAsList()
|
||||
}
|
||||
|
||||
override suspend fun getTracks(): List<Track> {
|
||||
return database.manga_trackQueries
|
||||
.getTracks(TrackMapper::mapTrack)
|
||||
.awaitAsList()
|
||||
}
|
||||
|
||||
override fun getTracksAsFlow(): Flow<List<Track>> {
|
||||
return database.manga_trackQueries
|
||||
.getTracks(TrackMapper::mapTrack)
|
||||
|
||||
@@ -11,6 +11,10 @@ class GetTracksPerManga(
|
||||
private val trackRepository: TrackRepository,
|
||||
) {
|
||||
|
||||
suspend fun await(): Map<Long, List<Track>> {
|
||||
return trackRepository.getTracks().groupBy { it.mangaId }
|
||||
}
|
||||
|
||||
fun subscribe(): Flow<Map<Long, List<Track>>> {
|
||||
return trackRepository.getTracksAsFlow().map { tracks -> tracks.groupBy { it.mangaId } }
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ interface TrackRepository {
|
||||
|
||||
suspend fun getTracksByMangaId(mangaId: Long): List<Track>
|
||||
|
||||
suspend fun getTracks(): List<Track>
|
||||
|
||||
fun getTracksAsFlow(): Flow<List<Track>>
|
||||
|
||||
fun getTracksByMangaIdAsFlow(mangaId: Long): Flow<List<Track>>
|
||||
|
||||
Reference in New Issue
Block a user