mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Bubble up sources with results in global search (closes #3598)
This commit is contained in:
		@@ -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 }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user