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
This commit is contained in:
arkon 2023-07-18 18:09:31 -04:00 committed by Jobobby04
parent 18b2d575c5
commit c061aabfc6
3 changed files with 25 additions and 13 deletions

View File

@ -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<Long>,
// 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<CatalogueSource> {
val pinnedSources = sourcePreferences.pinnedSources().get()
// SY -->
return validSources.mapNotNull { sourceManager.get(it) }
.filterIsInstance<CatalogueSource>()
.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 <--
}
}

View File

@ -16,6 +16,6 @@ class GlobalSearchScreenModel(
override fun getEnabledSources(): List<CatalogueSource> {
return super.getEnabledSources()
.filter { mutableState.value.sourceFilter != SourceFilter.PinnedOnly || "${it.id}" in pinnedSources }
.filter { state.value.sourceFilter != SourceFilter.PinnedOnly || "${it.id}" in pinnedSources }
}
}

View File

@ -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<SearchScreenModel.State>(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<CatalogueSource, SearchItemResult> ->
compareBy<CatalogueSource>(
@ -66,10 +68,6 @@ abstract class SearchScreenModel(
}
open fun getEnabledSources(): List<CatalogueSource> {
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) {