package eu.kanade.data.track import eu.kanade.data.DatabaseHandler import eu.kanade.domain.track.model.Track import eu.kanade.domain.track.repository.TrackRepository import kotlinx.coroutines.flow.Flow class TrackRepositoryImpl( private val handler: DatabaseHandler, ) : TrackRepository { override suspend fun getTracksByMangaId(mangaId: Long): List { return handler.awaitList { manga_syncQueries.getTracksByMangaId(mangaId, trackMapper) } } override fun getTracksAsFlow(): Flow> { return handler.subscribeToList { manga_syncQueries.getTracks(trackMapper) } } override fun getTracksByMangaIdAsFlow(mangaId: Long): Flow> { return handler.subscribeToList { manga_syncQueries.getTracksByMangaId(mangaId, trackMapper) } } override suspend fun delete(mangaId: Long, syncId: Long) { handler.await { manga_syncQueries.delete( mangaId = mangaId, syncId = syncId, ) } } override suspend fun insert(track: Track) { insertValues(track) } override suspend fun insertAll(tracks: List) { insertValues(*tracks.toTypedArray()) } private suspend fun insertValues(vararg values: Track) { handler.await(inTransaction = true) { values.forEach { mangaTrack -> manga_syncQueries.insert( mangaId = mangaTrack.mangaId, syncId = mangaTrack.syncId, remoteId = mangaTrack.remoteId, libraryId = mangaTrack.libraryId, title = mangaTrack.title, lastChapterRead = mangaTrack.lastChapterRead, totalChapters = mangaTrack.totalChapters, status = mangaTrack.status, score = mangaTrack.score, remoteUrl = mangaTrack.remoteUrl, startDate = mangaTrack.startDate, finishDate = mangaTrack.finishDate, ) } } } }