diff --git a/app/src/main/java/eu/kanade/domain/manga/interactor/NetworkToLocalManga.kt b/app/src/main/java/eu/kanade/domain/manga/interactor/NetworkToLocalManga.kt index 04daa1800..d863e7b73 100644 --- a/app/src/main/java/eu/kanade/domain/manga/interactor/NetworkToLocalManga.kt +++ b/app/src/main/java/eu/kanade/domain/manga/interactor/NetworkToLocalManga.kt @@ -7,11 +7,11 @@ class NetworkToLocalManga( private val mangaRepository: MangaRepository, ) { - suspend fun await(manga: Manga, sourceId: Long): Manga { - val localManga = getManga(manga.url, sourceId) + suspend fun await(manga: Manga): Manga { + val localManga = getManga(manga.url, manga.source) return when { localManga == null -> { - val id = insertManga(manga, sourceId) + val id = insertManga(manga) manga.copy(id = id!!) } !localManga.favorite -> { @@ -29,7 +29,7 @@ class NetworkToLocalManga( return mangaRepository.getMangaByUrlAndSourceId(url, sourceId) } - private suspend fun insertManga(manga: Manga, sourceId: Long): Long? { - return mangaRepository.insert(manga.copy(source = sourceId)) + private suspend fun insertManga(manga: Manga): Long? { + return mangaRepository.insert(manga) } } diff --git a/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt b/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt index 72bca15dc..f762d3262 100644 --- a/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt +++ b/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt @@ -295,7 +295,7 @@ fun Manga.toMangaUpdate(): MangaUpdate { ) } -fun SManga.toDomainManga(): Manga { +fun SManga.toDomainManga(sourceId: Long): Manga { return Manga.create().copy( url = url, // SY --> @@ -309,6 +309,7 @@ fun SManga.toDomainManga(): Manga { thumbnailUrl = thumbnail_url, updateStrategy = update_strategy, initialized = initialized, + source = sourceId, ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt index 5a97798ef..836f41f5e 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt @@ -734,7 +734,6 @@ class LibraryUpdateService( favorite = true, dateAdded = System.currentTimeMillis(), ), - mangaDex.id, ) } else if (!dbManga.favorite) { updateManga.awaitUpdateFavorite(dbManga.id, true) diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt b/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt index e0ee4bd7a..d4fba38f1 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt @@ -55,13 +55,7 @@ class SourceManager( private val scope = CoroutineScope(Job() + Dispatchers.IO) - private var sourcesMap = ConcurrentHashMap() - set(value) { - field = value - sourcesMapFlow.value = field - } - - private val sourcesMapFlow = MutableStateFlow(sourcesMap) + private val sourcesMapFlow = MutableStateFlow(ConcurrentHashMap()) private val stubSourcesMap = ConcurrentHashMap() @@ -96,7 +90,7 @@ class SourceManager( registerStubSource(it.toSourceData()) } } - sourcesMap = mutableMap + sourcesMapFlow.value = mutableMap } } @@ -154,18 +148,18 @@ class SourceManager( } fun get(sourceKey: Long): Source? { - return sourcesMap[sourceKey] + return sourcesMapFlow.value[sourceKey] } fun getOrStub(sourceKey: Long): Source { - return sourcesMap[sourceKey] ?: stubSourcesMap.getOrPut(sourceKey) { + return sourcesMapFlow.value[sourceKey] ?: stubSourcesMap.getOrPut(sourceKey) { runBlocking { createStubSource(sourceKey) } } } - fun getOnlineSources() = sourcesMap.values.filterIsInstance() + fun getOnlineSources() = sourcesMapFlow.value.values.filterIsInstance() - fun getCatalogueSources() = sourcesMap.values.filterIsInstance() + fun getCatalogueSources() = sourcesMapFlow.value.values.filterIsInstance() fun getStubSources(): List { val onlineSourceIds = getOnlineSources().map { it.id } @@ -173,15 +167,15 @@ class SourceManager( } // SY --> - fun getVisibleOnlineSources() = sourcesMap.values.filterIsInstance().filter { + fun getVisibleOnlineSources() = sourcesMapFlow.value.values.filterIsInstance().filter { it.id !in BlacklistedSources.HIDDEN_SOURCES } - fun getVisibleCatalogueSources() = sourcesMap.values.filterIsInstance().filter { + fun getVisibleCatalogueSources() = sourcesMapFlow.value.values.filterIsInstance().filter { it.id !in BlacklistedSources.HIDDEN_SOURCES } - fun getDelegatedCatalogueSources() = sourcesMap.values.filterIsInstance().mapNotNull { enhancedHttpSource -> + fun getDelegatedCatalogueSources() = sourcesMapFlow.value.values.filterIsInstance().mapNotNull { enhancedHttpSource -> enhancedHttpSource.enhancedSource as? DelegatedHttpSource } // SY <-- diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt index a54a9e8db..03c7be276 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt @@ -153,7 +153,6 @@ class MergedSource : HttpSource() { source = mangaSourceId, url = mangaUrl, ), - mangaSourceId, ) updateManga.awaitUpdateFromSource(newManga, source.getMangaDetails(newManga.toSManga()), false) manga = getManga.await(newManga.id)!! diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedPresenter.kt index a68e2f07c..143dcd955 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedPresenter.kt @@ -201,7 +201,7 @@ open class FeedPresenter( .subscribeOn(Schedulers.io()) .onErrorReturn { MangasPage(emptyList(), false) } // Ignore timeouts or other exceptions .map { it.mangas } // Get manga from search result. - .map { list -> runBlocking { list.map { networkToLocalManga.await(it.toDomainManga(), itemUI.source.id) } } } // Convert to local manga. + .map { list -> runBlocking { list.map { networkToLocalManga.await(it.toDomainManga(itemUI.source.id)) } } } // Convert to local manga. .map { list -> itemUI.copy(results = list) } } else { Observable.just(itemUI.copy(results = emptyList())) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListPresenter.kt index 5f0ae8760..79e19fcde 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListPresenter.kt @@ -179,10 +179,7 @@ class MigrationListPresenter( } if (searchResult != null && !(searchResult.url == mangaObj.url && source.id == mangaObj.source)) { - val localManga = networkToLocalManga.await( - searchResult, - source.id, - ) + val localManga = networkToLocalManga.await(searchResult) val chapters = if (source is EHentai) { source.getChapterList(localManga.toSManga(), throttleManager::throttle) @@ -219,7 +216,7 @@ class MigrationListPresenter( } if (searchResult != null) { - val localManga = networkToLocalManga.await(searchResult, source.id) + val localManga = networkToLocalManga.await(searchResult) val chapters = try { if (source is EHentai) { source.getChapterList(localManga.toSManga(), throttleManager::throttle) @@ -384,7 +381,7 @@ class MigrationListPresenter( migratingManga.searchResult.value = SearchResult.Searching presenterScope.launchIO { val result = migratingManga.migrationScope.async { - val localManga = networkToLocalManga.await(manga, source.id) + val localManga = networkToLocalManga.await(manga) try { val chapters = source.getChapterList(localManga.toSManga()) syncChaptersWithSource.await(chapters, localManga, source) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt index 837b0cedc..22a9a17c2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt @@ -171,7 +171,7 @@ open class BrowseSourcePresenter( it.map { (sManga, metadata) -> // SY --> withIOContext { - networkToLocalManga.await(sManga.toDomainManga(), sourceId) + networkToLocalManga.await(sManga.toDomainManga(sourceId)) } to metadata // SY <-- } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedPresenter.kt index a59f88d79..e04e3bd54 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedPresenter.kt @@ -159,7 +159,7 @@ open class SourceFeedPresenter( .subscribeOn(Schedulers.io()) .onErrorReturn { MangasPage(emptyList(), false) } // Ignore timeouts or other exceptions .map { it.mangas } // Get manga from search result. - .map { list -> runBlocking { list.map { networkToLocalManga.await(it.toDomainManga(), source.id) } } } // Convert to local manga. + .map { list -> runBlocking { list.map { networkToLocalManga.await(it.toDomainManga(source.id)) } } } // Convert to local manga. .map { list -> sourceFeed.withResults(list) } }, 5, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchPresenter.kt index a3e50cbb0..ce6ee8a04 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchPresenter.kt @@ -264,6 +264,6 @@ open class GlobalSearchPresenter( * @return a manga from the database. */ protected open suspend fun networkToLocalManga(sManga: SManga, sourceId: Long): DomainManga { - return networkToLocalManga.await(sManga.toDomainManga(), sourceId) + return networkToLocalManga.await(sManga.toDomainManga(sourceId)) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt index 392947026..9165c9a65 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt @@ -594,7 +594,7 @@ class MangaInfoScreenModel( existingManga = getManga.await(mergedManga.url, mergedManga.source) } - mergedManga = networkToLocalManga.await(mergedManga, mergedManga.source) + mergedManga = networkToLocalManga.await(mergedManga) getCategories.await(originalMangaId) .let { diff --git a/app/src/main/java/exh/GalleryAdder.kt b/app/src/main/java/exh/GalleryAdder.kt index 142aea538..47c354d86 100755 --- a/app/src/main/java/exh/GalleryAdder.kt +++ b/app/src/main/java/exh/GalleryAdder.kt @@ -134,7 +134,6 @@ class GalleryAdder( source = source.id, url = cleanedMangaUrl, ), - source.id, ) // Fetch and copy details diff --git a/app/src/main/java/exh/smartsearch/SmartSearchEngine.kt b/app/src/main/java/exh/smartsearch/SmartSearchEngine.kt index dec502894..7dfbd4dd8 100644 --- a/app/src/main/java/exh/smartsearch/SmartSearchEngine.kt +++ b/app/src/main/java/exh/smartsearch/SmartSearchEngine.kt @@ -44,7 +44,7 @@ class SmartSearchEngine( }.flatMap { it.await() } } - return eligibleManga.maxByOrNull { it.dist }?.manga?.toDomainManga() + return eligibleManga.maxByOrNull { it.dist }?.manga?.toDomainManga(source.id) } suspend fun normalSearch(source: CatalogueSource, title: String): Manga? { @@ -68,7 +68,7 @@ class SmartSearchEngine( } } - return eligibleManga.maxByOrNull { it.dist }?.manga?.toDomainManga() + return eligibleManga.maxByOrNull { it.dist }?.manga?.toDomainManga(source.id) } private fun getSmartSearchQueries(cleanedTitle: String): List { diff --git a/app/src/main/java/exh/ui/smartsearch/SmartSearchPresenter.kt b/app/src/main/java/exh/ui/smartsearch/SmartSearchPresenter.kt index 75fb659f2..52ce1c2e3 100644 --- a/app/src/main/java/exh/ui/smartsearch/SmartSearchPresenter.kt +++ b/app/src/main/java/exh/ui/smartsearch/SmartSearchPresenter.kt @@ -33,7 +33,7 @@ class SmartSearchPresenter( val result = try { val resultManga = smartSearchEngine.smartSearch(source, config.origTitle) if (resultManga != null) { - val localManga = networkToLocalManga.await(resultManga, source.id) + val localManga = networkToLocalManga.await(resultManga) SearchResults.Found(localManga) } else { SearchResults.NotFound