mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Move more things to domain/data modules
This commit is contained in:
		| @@ -1,6 +1,5 @@ | ||||
| package tachiyomi.data.source | ||||
|  | ||||
| import androidx.paging.PagingSource | ||||
| import androidx.paging.PagingState | ||||
| import eu.kanade.tachiyomi.source.CatalogueSource | ||||
| import eu.kanade.tachiyomi.source.model.FilterList | ||||
| @@ -8,8 +7,25 @@ import eu.kanade.tachiyomi.source.model.MangasPage | ||||
| import eu.kanade.tachiyomi.source.model.SManga | ||||
| import tachiyomi.core.util.lang.awaitSingle | ||||
| import tachiyomi.core.util.lang.withIOContext | ||||
| import tachiyomi.domain.source.repository.SourcePagingSourceType | ||||
|  | ||||
| typealias SourcePagingSourceType = PagingSource<Long, SManga> | ||||
| class SourceSearchPagingSource(source: CatalogueSource, val query: String, val filters: FilterList) : SourcePagingSource(source) { | ||||
|     override suspend fun requestNextPage(currentPage: Int): MangasPage { | ||||
|         return source.fetchSearchManga(currentPage, query, filters).awaitSingle() | ||||
|     } | ||||
| } | ||||
|  | ||||
| class SourcePopularPagingSource(source: CatalogueSource) : SourcePagingSource(source) { | ||||
|     override suspend fun requestNextPage(currentPage: Int): MangasPage { | ||||
|         return source.fetchPopularManga(currentPage).awaitSingle() | ||||
|     } | ||||
| } | ||||
|  | ||||
| class SourceLatestPagingSource(source: CatalogueSource) : SourcePagingSource(source) { | ||||
|     override suspend fun requestNextPage(currentPage: Int): MangasPage { | ||||
|         return source.fetchLatestUpdates(currentPage).awaitSingle() | ||||
|     } | ||||
| } | ||||
|  | ||||
| abstract class SourcePagingSource( | ||||
|     protected val source: CatalogueSource, | ||||
| @@ -45,22 +61,4 @@ abstract class SourcePagingSource( | ||||
|     } | ||||
| } | ||||
|  | ||||
| class SourceSearchPagingSource(source: CatalogueSource, val query: String, val filters: FilterList) : SourcePagingSource(source) { | ||||
|     override suspend fun requestNextPage(currentPage: Int): MangasPage { | ||||
|         return source.fetchSearchManga(currentPage, query, filters).awaitSingle() | ||||
|     } | ||||
| } | ||||
|  | ||||
| class SourcePopularPagingSource(source: CatalogueSource) : SourcePagingSource(source) { | ||||
|     override suspend fun requestNextPage(currentPage: Int): MangasPage { | ||||
|         return source.fetchPopularManga(currentPage).awaitSingle() | ||||
|     } | ||||
| } | ||||
|  | ||||
| class SourceLatestPagingSource(source: CatalogueSource) : SourcePagingSource(source) { | ||||
|     override suspend fun requestNextPage(currentPage: Int): MangasPage { | ||||
|         return source.fetchLatestUpdates(currentPage).awaitSingle() | ||||
|     } | ||||
| } | ||||
|  | ||||
| class NoResultsException : Exception() | ||||
|   | ||||
| @@ -0,0 +1,84 @@ | ||||
| package tachiyomi.data.source | ||||
|  | ||||
| import eu.kanade.tachiyomi.source.CatalogueSource | ||||
| import eu.kanade.tachiyomi.source.model.FilterList | ||||
| import eu.kanade.tachiyomi.source.online.HttpSource | ||||
| import kotlinx.coroutines.flow.Flow | ||||
| import kotlinx.coroutines.flow.map | ||||
| import tachiyomi.data.DatabaseHandler | ||||
| import tachiyomi.domain.source.model.Source | ||||
| import tachiyomi.domain.source.model.SourceWithCount | ||||
| import tachiyomi.domain.source.model.StubSource | ||||
| import tachiyomi.domain.source.repository.SourcePagingSourceType | ||||
| import tachiyomi.domain.source.repository.SourceRepository | ||||
| import tachiyomi.domain.source.service.SourceManager | ||||
|  | ||||
| class SourceRepositoryImpl( | ||||
|     private val sourceManager: SourceManager, | ||||
|     private val handler: DatabaseHandler, | ||||
| ) : SourceRepository { | ||||
|  | ||||
|     override fun getSources(): Flow<List<Source>> { | ||||
|         return sourceManager.catalogueSources.map { sources -> | ||||
|             sources.map { | ||||
|                 sourceMapper(it).copy( | ||||
|                     supportsLatest = it.supportsLatest, | ||||
|                 ) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     override fun getOnlineSources(): Flow<List<Source>> { | ||||
|         return sourceManager.catalogueSources.map { sources -> | ||||
|             sources | ||||
|                 .filterIsInstance<HttpSource>() | ||||
|                 .map(sourceMapper) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     override fun getSourcesWithFavoriteCount(): Flow<List<Pair<Source, Long>>> { | ||||
|         val sourceIdWithFavoriteCount = handler.subscribeToList { mangasQueries.getSourceIdWithFavoriteCount() } | ||||
|         return sourceIdWithFavoriteCount.map { sourceIdsWithCount -> | ||||
|             sourceIdsWithCount | ||||
|                 .map { (sourceId, count) -> | ||||
|                     val source = sourceManager.getOrStub(sourceId) | ||||
|                     val domainSource = sourceMapper(source).copy( | ||||
|                         isStub = source is StubSource, | ||||
|                     ) | ||||
|                     domainSource to count | ||||
|                 } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     override fun getSourcesWithNonLibraryManga(): Flow<List<SourceWithCount>> { | ||||
|         val sourceIdWithNonLibraryManga = handler.subscribeToList { mangasQueries.getSourceIdsWithNonLibraryManga() } | ||||
|         return sourceIdWithNonLibraryManga.map { sourceId -> | ||||
|             sourceId.map { (sourceId, count) -> | ||||
|                 val source = sourceManager.getOrStub(sourceId) | ||||
|                 val domainSource = sourceMapper(source).copy( | ||||
|                     isStub = source is StubSource, | ||||
|                 ) | ||||
|                 SourceWithCount(domainSource, count) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     override fun search( | ||||
|         sourceId: Long, | ||||
|         query: String, | ||||
|         filterList: FilterList, | ||||
|     ): SourcePagingSourceType { | ||||
|         val source = sourceManager.get(sourceId) as CatalogueSource | ||||
|         return SourceSearchPagingSource(source, query, filterList) | ||||
|     } | ||||
|  | ||||
|     override fun getPopular(sourceId: Long): SourcePagingSourceType { | ||||
|         val source = sourceManager.get(sourceId) as CatalogueSource | ||||
|         return SourcePopularPagingSource(source) | ||||
|     } | ||||
|  | ||||
|     override fun getLatest(sourceId: Long): SourcePagingSourceType { | ||||
|         val source = sourceManager.get(sourceId) as CatalogueSource | ||||
|         return SourceLatestPagingSource(source) | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user