forked from recloudstream/cloudstream
Make searching always respect your preferred media setting
This commit is contained in:
parent
fd7cf51f57
commit
65b5efb848
1 changed files with 27 additions and 9 deletions
|
@ -117,18 +117,36 @@ class SearchFragment : Fragment() {
|
||||||
var selectedSearchTypes = mutableListOf<TvType>()
|
var selectedSearchTypes = mutableListOf<TvType>()
|
||||||
var selectedApis = mutableSetOf<String>()
|
var selectedApis = mutableSetOf<String>()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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?) {
|
fun search(query: String?) {
|
||||||
if (query == null) return
|
if (query == null) return
|
||||||
context?.getApiSettings()?.let { settings ->
|
|
||||||
|
context?.let { ctx ->
|
||||||
|
val default = enumValues<TvType>().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(
|
searchViewModel.searchAndCancel(
|
||||||
query = query,
|
query = query,
|
||||||
providersActive = selectedApis.filter { name ->
|
providersActive = notFilteredBySelectedTypes.filter { (_, types) ->
|
||||||
settings.contains(name) && getApiFromNameNull(name)?.supportedTypes?.any {
|
types?.any { selectedSearchTypes.contains(it) } == true
|
||||||
selectedSearchTypes.contains(
|
}.ifEmpty { notFilteredBySelectedTypes }.map { it.first }.toSet()
|
||||||
it
|
|
||||||
)
|
|
||||||
} == true
|
|
||||||
}.toSet()
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -227,7 +245,7 @@ class SearchFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateList(types: List<TvType>) {
|
fun updateList(types: List<TvType>) {
|
||||||
setKey(SEARCH_PREF_TAGS, types.map {it.name})
|
setKey(SEARCH_PREF_TAGS, types.map { it.name })
|
||||||
|
|
||||||
arrayAdapter.clear()
|
arrayAdapter.clear()
|
||||||
currentValidApis = validAPIs.filter { api ->
|
currentValidApis = validAPIs.filter { api ->
|
||||||
|
|
Loading…
Reference in a new issue