Browse Source

Bubble up sources with results in global search (closes #3598)

arkon 4 years ago
parent
commit
9376b223bb

+ 12 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchPresenter.kt

@@ -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 }