|
@@ -108,7 +108,7 @@ open class GlobalSearchPresenter(
|
|
|
return sourceManager.getCatalogueSources()
|
|
|
.filter { it.lang in languages }
|
|
|
.filterNot { it.id.toString() in disabledSourceIds }
|
|
|
- .sortedWith(compareBy({ it.id.toString() !in pinnedSourceIds }, { "(${it.lang}) ${it.name}" }))
|
|
|
+ .sortedWith(compareBy({ it.id.toString() !in pinnedSourceIds }, { "${it.name} (${it.lang})" }))
|
|
|
}
|
|
|
|
|
|
private fun getSourcesToQuery(): List<CatalogueSource> {
|
|
@@ -161,6 +161,8 @@ open class GlobalSearchPresenter(
|
|
|
val initialItems = sources.map { createCatalogueSearchItem(it, null) }
|
|
|
var items = initialItems
|
|
|
|
|
|
+ val pinnedSourceIds = preferences.pinnedSources().get()
|
|
|
+
|
|
|
fetchSourcesSubscription?.unsubscribe()
|
|
|
fetchSourcesSubscription = Observable.from(sources)
|
|
|
.flatMap(
|
|
@@ -178,7 +180,15 @@ open class GlobalSearchPresenter(
|
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
|
// Update matching source with the obtained results
|
|
|
.map { result ->
|
|
|
- items.map { item -> if (item.source == result.source) result else item }
|
|
|
+ items
|
|
|
+ .map { item -> if (item.source == result.source) result else item }
|
|
|
+ .sortedWith(compareBy(
|
|
|
+ // Bubble up sources that actually have results
|
|
|
+ { it.results.isNullOrEmpty() },
|
|
|
+ // Same as initial sort, i.e. pinned first then alphabetically
|
|
|
+ { it.source.id.toString() !in pinnedSourceIds },
|
|
|
+ { "${it.source.name} (${it.source.lang})" }
|
|
|
+ ))
|
|
|
}
|
|
|
// Update current state
|
|
|
.doOnNext { items = it }
|