SourceRepositoryImpl.kt 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package eu.kanade.data.source
  2. import eu.kanade.domain.source.repository.SourceRepository
  3. import eu.kanade.tachiyomi.source.CatalogueSource
  4. import eu.kanade.tachiyomi.source.model.FilterList
  5. import eu.kanade.tachiyomi.source.online.HttpSource
  6. import kotlinx.coroutines.flow.Flow
  7. import kotlinx.coroutines.flow.map
  8. import tachiyomi.data.DatabaseHandler
  9. import tachiyomi.data.source.SourceLatestPagingSource
  10. import tachiyomi.data.source.SourcePagingSourceType
  11. import tachiyomi.data.source.SourcePopularPagingSource
  12. import tachiyomi.data.source.SourceSearchPagingSource
  13. import tachiyomi.data.source.sourceMapper
  14. import tachiyomi.domain.source.model.Source
  15. import tachiyomi.domain.source.model.SourceWithCount
  16. import tachiyomi.domain.source.model.StubSource
  17. import tachiyomi.domain.source.service.SourceManager
  18. class SourceRepositoryImpl(
  19. private val sourceManager: SourceManager,
  20. private val handler: DatabaseHandler,
  21. ) : SourceRepository {
  22. override fun getSources(): Flow<List<Source>> {
  23. return sourceManager.catalogueSources.map { sources ->
  24. sources.map {
  25. sourceMapper(it).copy(
  26. supportsLatest = it.supportsLatest,
  27. )
  28. }
  29. }
  30. }
  31. override fun getOnlineSources(): Flow<List<Source>> {
  32. return sourceManager.catalogueSources.map { sources ->
  33. sources
  34. .filterIsInstance<HttpSource>()
  35. .map(sourceMapper)
  36. }
  37. }
  38. override fun getSourcesWithFavoriteCount(): Flow<List<Pair<Source, Long>>> {
  39. val sourceIdWithFavoriteCount = handler.subscribeToList { mangasQueries.getSourceIdWithFavoriteCount() }
  40. return sourceIdWithFavoriteCount.map { sourceIdsWithCount ->
  41. sourceIdsWithCount
  42. .map { (sourceId, count) ->
  43. val source = sourceManager.getOrStub(sourceId)
  44. val domainSource = sourceMapper(source).copy(
  45. isStub = source is StubSource,
  46. )
  47. domainSource to count
  48. }
  49. }
  50. }
  51. override fun getSourcesWithNonLibraryManga(): Flow<List<SourceWithCount>> {
  52. val sourceIdWithNonLibraryManga = handler.subscribeToList { mangasQueries.getSourceIdsWithNonLibraryManga() }
  53. return sourceIdWithNonLibraryManga.map { sourceId ->
  54. sourceId.map { (sourceId, count) ->
  55. val source = sourceManager.getOrStub(sourceId)
  56. val domainSource = sourceMapper(source).copy(
  57. isStub = source is StubSource,
  58. )
  59. SourceWithCount(domainSource, count)
  60. }
  61. }
  62. }
  63. override fun search(
  64. sourceId: Long,
  65. query: String,
  66. filterList: FilterList,
  67. ): SourcePagingSourceType {
  68. val source = sourceManager.get(sourceId) as CatalogueSource
  69. return SourceSearchPagingSource(source, query, filterList)
  70. }
  71. override fun getPopular(sourceId: Long): SourcePagingSourceType {
  72. val source = sourceManager.get(sourceId) as CatalogueSource
  73. return SourcePopularPagingSource(source)
  74. }
  75. override fun getLatest(sourceId: Long): SourcePagingSourceType {
  76. val source = sourceManager.get(sourceId) as CatalogueSource
  77. return SourceLatestPagingSource(source)
  78. }
  79. }