TrackRepositoryImpl.kt 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package eu.kanade.data.track
  2. import eu.kanade.data.DatabaseHandler
  3. import eu.kanade.domain.track.model.Track
  4. import eu.kanade.domain.track.repository.TrackRepository
  5. import kotlinx.coroutines.flow.Flow
  6. class TrackRepositoryImpl(
  7. private val handler: DatabaseHandler,
  8. ) : TrackRepository {
  9. override suspend fun getTracksByMangaId(mangaId: Long): List<Track> {
  10. return handler.awaitList {
  11. manga_syncQueries.getTracksByMangaId(mangaId, trackMapper)
  12. }
  13. }
  14. override fun getTracksAsFlow(): Flow<List<Track>> {
  15. return handler.subscribeToList {
  16. manga_syncQueries.getTracks(trackMapper)
  17. }
  18. }
  19. override fun getTracksByMangaIdAsFlow(mangaId: Long): Flow<List<Track>> {
  20. return handler.subscribeToList {
  21. manga_syncQueries.getTracksByMangaId(mangaId, trackMapper)
  22. }
  23. }
  24. override suspend fun delete(mangaId: Long, syncId: Long) {
  25. handler.await {
  26. manga_syncQueries.delete(
  27. mangaId = mangaId,
  28. syncId = syncId,
  29. )
  30. }
  31. }
  32. override suspend fun insert(track: Track) {
  33. insertValues(track)
  34. }
  35. override suspend fun insertAll(tracks: List<Track>) {
  36. insertValues(*tracks.toTypedArray())
  37. }
  38. private suspend fun insertValues(vararg values: Track) {
  39. handler.await(inTransaction = true) {
  40. values.forEach { mangaTrack ->
  41. manga_syncQueries.insert(
  42. mangaId = mangaTrack.mangaId,
  43. syncId = mangaTrack.syncId,
  44. remoteId = mangaTrack.remoteId,
  45. libraryId = mangaTrack.libraryId,
  46. title = mangaTrack.title,
  47. lastChapterRead = mangaTrack.lastChapterRead,
  48. totalChapters = mangaTrack.totalChapters,
  49. status = mangaTrack.status,
  50. score = mangaTrack.score,
  51. remoteUrl = mangaTrack.remoteUrl,
  52. startDate = mangaTrack.startDate,
  53. finishDate = mangaTrack.finishDate,
  54. )
  55. }
  56. }
  57. }
  58. }