From c061aabfc6a5953a85aefeff8685f091eb12901d Mon Sep 17 00:00:00 2001 From: arkon Date: Tue, 18 Jul 2023 18:09:31 -0400 Subject: [PATCH] Use correct sources when triggering new global search Actually fixes #9724 (cherry picked from commit 3f868c0435009f6c36fe4e91f93c5480e8486685) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateSearchScreenModel.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt --- .../search/MigrateSearchScreenModel.kt | 18 ++++++++++++++++-- .../globalsearch/GlobalSearchScreenModel.kt | 2 +- .../source/globalsearch/SearchScreenModel.kt | 18 ++++++++---------- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateSearchScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateSearchScreenModel.kt index fe446e932..538b3fa80 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateSearchScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateSearchScreenModel.kt @@ -6,12 +6,20 @@ import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SearchScreenModel import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SourceFilter import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import tachiyomi.domain.manga.interactor.GetManga +import tachiyomi.domain.source.service.SourceManager +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get class MigrateSearchScreenModel( val mangaId: Long, // SY --> val validSources: List, // SY <-- + getManga: GetManga = Injekt.get(), + // SY --> + private val sourceManager: SourceManager = Injekt.get(), + // SY <-- ) : SearchScreenModel() { init { @@ -28,11 +36,17 @@ class MigrateSearchScreenModel( } override fun getEnabledSources(): List { - val pinnedSources = sourcePreferences.pinnedSources().get() // SY --> return validSources.mapNotNull { sourceManager.get(it) } .filterIsInstance() - .filter { mutableState.value.sourceFilter != SourceFilter.PinnedOnly || "${it.id}" in pinnedSources } + .filter { state.value.sourceFilter != SourceFilter.PinnedOnly || "${it.id}" in pinnedSources } + .sortedWith( + compareBy( + { it.id != state.value.fromSourceId }, + { "${it.id}" !in pinnedSources }, + { "${it.name.lowercase()} (${it.lang})" }, + ), + ) // SY <-- } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchScreenModel.kt index 62d4d03bc..944c28f17 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchScreenModel.kt @@ -16,6 +16,6 @@ class GlobalSearchScreenModel( override fun getEnabledSources(): List { return super.getEnabledSources() - .filter { mutableState.value.sourceFilter != SourceFilter.PinnedOnly || "${it.id}" in pinnedSources } + .filter { state.value.sourceFilter != SourceFilter.PinnedOnly || "${it.id}" in pinnedSources } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt index 9615e661b..3f07d72ad 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt @@ -29,22 +29,24 @@ import java.util.concurrent.Executors abstract class SearchScreenModel( initialState: State = State(), - protected val sourcePreferences: SourcePreferences = Injekt.get(), - protected val sourceManager: SourceManager = Injekt.get(), + sourcePreferences: SourcePreferences = Injekt.get(), + private val sourceManager: SourceManager = Injekt.get(), private val extensionManager: ExtensionManager = Injekt.get(), private val networkToLocalManga: NetworkToLocalManga = Injekt.get(), - protected val getManga: GetManga = Injekt.get(), + private val getManga: GetManga = Injekt.get(), ) : StateScreenModel(initialState) { private val coroutineDispatcher = Executors.newFixedThreadPool(5).asCoroutineDispatcher() private var searchJob: Job? = null - private val sources by lazy { getSelectedSources() } + private val enabledLanguages = sourcePreferences.enabledLanguages().get() + private val disabledSources = sourcePreferences.disabledSources().get() + protected val pinnedSources = sourcePreferences.pinnedSources().get() + private var lastQuery: String? = null private var lastSourceFilter: SourceFilter? = null protected var extensionFilter: String? = null - protected val pinnedSources = sourcePreferences.pinnedSources().get() private val sortComparator = { map: Map -> compareBy( @@ -66,10 +68,6 @@ abstract class SearchScreenModel( } open fun getEnabledSources(): List { - val enabledLanguages = sourcePreferences.enabledLanguages().get() - val disabledSources = sourcePreferences.disabledSources().get() - val pinnedSources = sourcePreferences.pinnedSources().get() - return sourceManager.getVisibleCatalogueSources() .filter { it.lang in enabledLanguages && "${it.id}" !in disabledSources } .sortedWith( @@ -125,7 +123,7 @@ abstract class SearchScreenModel( val initialItems = getSelectedSources().associateWith { SearchItemResult.Loading } updateItems(initialItems) searchJob = ioCoroutineScope.launch { - sources.map { source -> + getSelectedSources().map { source -> async { try { val page = withContext(coroutineDispatcher) {