From 65b5efb848bb2110651194325d558fccdfb232bd Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Fri, 28 Oct 2022 22:29:32 +0200 Subject: [PATCH] Make searching always respect your preferred media setting --- .../cloudstream3/ui/search/SearchFragment.kt | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index 8f588bf7..a4b2be8f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -117,18 +117,36 @@ class SearchFragment : Fragment() { var selectedSearchTypes = mutableListOf() var selectedApis = mutableSetOf() + /** + * Will filter all providers by preferred media and selectedSearchTypes. + * If that results in no available providers then only filter + * providers by preferred media + **/ fun search(query: String?) { if (query == null) return - context?.getApiSettings()?.let { settings -> + + context?.let { ctx -> + val default = enumValues().sorted().filter { it != TvType.NSFW } + .map { it.ordinal.toString() }.toSet() + val preferredTypes = PreferenceManager.getDefaultSharedPreferences(ctx) + .getStringSet(this.getString(R.string.prefer_media_type_key), default) + ?.mapNotNull { it.toIntOrNull() ?: return@mapNotNull null } ?: default + + val settings = ctx.getApiSettings() + + val notFilteredBySelectedTypes = selectedApis.filter { name -> + settings.contains(name) + }.map { name -> + name to getApiFromNameNull(name)?.supportedTypes + }.filter { (_, types) -> + types?.any { preferredTypes.contains(it.ordinal) } == true + } + searchViewModel.searchAndCancel( query = query, - providersActive = selectedApis.filter { name -> - settings.contains(name) && getApiFromNameNull(name)?.supportedTypes?.any { - selectedSearchTypes.contains( - it - ) - } == true - }.toSet() + providersActive = notFilteredBySelectedTypes.filter { (_, types) -> + types?.any { selectedSearchTypes.contains(it) } == true + }.ifEmpty { notFilteredBySelectedTypes }.map { it.first }.toSet() ) } } @@ -227,7 +245,7 @@ class SearchFragment : Fragment() { } fun updateList(types: List) { - setKey(SEARCH_PREF_TAGS, types.map {it.name}) + setKey(SEARCH_PREF_TAGS, types.map { it.name }) arrayAdapter.clear() currentValidApis = validAPIs.filter { api ->