For migration, put the selected source at the top of the search list instead of excluding it (#1542)
* For migration, put the selected source at the top of the search list rather than excluding it * Indicate which source is currently selected during migration Currently uses ▶
This commit is contained in:
parent
3c1179d27b
commit
353ccbd444
@ -45,8 +45,11 @@ class CatalogueSearchHolder(view: View, val adapter: CatalogueSearchAdapter) :
|
|||||||
val source = item.source
|
val source = item.source
|
||||||
val results = item.results
|
val results = item.results
|
||||||
|
|
||||||
// Set Title witch country code if available.
|
val titlePrefix = if (item.highlighted) "▶" else ""
|
||||||
title.text = if (!source.lang.isEmpty()) "${source.name} (${source.lang})" else source.name
|
val langSuffix = if (source.lang.isNotEmpty()) " (${source.lang})" else ""
|
||||||
|
|
||||||
|
// Set Title with country code if available.
|
||||||
|
title.text = titlePrefix + source.name + langSuffix
|
||||||
|
|
||||||
when {
|
when {
|
||||||
results == null -> {
|
results == null -> {
|
||||||
@ -93,5 +96,4 @@ class CatalogueSearchHolder(view: View, val adapter: CatalogueSearchAdapter) :
|
|||||||
|
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,9 +9,11 @@ import eu.kanade.tachiyomi.source.CatalogueSource
|
|||||||
/**
|
/**
|
||||||
* Item that contains search result information.
|
* Item that contains search result information.
|
||||||
*
|
*
|
||||||
* @param source contains information about search result.
|
* @param source the source for the search results.
|
||||||
|
* @param results the search results.
|
||||||
|
* @param highlighted whether this search item should be highlighted/marked in the catalogue search view.
|
||||||
*/
|
*/
|
||||||
class CatalogueSearchItem(val source: CatalogueSource, val results: List<CatalogueSearchCardItem>?)
|
class CatalogueSearchItem(val source: CatalogueSource, val results: List<CatalogueSearchCardItem>?, val highlighted: Boolean = false)
|
||||||
: AbstractFlexibleItem<CatalogueSearchHolder>() {
|
: AbstractFlexibleItem<CatalogueSearchHolder>() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -98,7 +98,14 @@ open class CatalogueSearchPresenter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initiates a search for mnaga per catalogue.
|
* Creates a catalogue search item
|
||||||
|
*/
|
||||||
|
protected open fun createCatalogueSearchItem(source: CatalogueSource, results: List<CatalogueSearchCardItem>?): CatalogueSearchItem {
|
||||||
|
return CatalogueSearchItem(source, results)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initiates a search for manga per catalogue.
|
||||||
*
|
*
|
||||||
* @param query query on which to search.
|
* @param query query on which to search.
|
||||||
*/
|
*/
|
||||||
@ -113,7 +120,7 @@ open class CatalogueSearchPresenter(
|
|||||||
initializeFetchImageSubscription()
|
initializeFetchImageSubscription()
|
||||||
|
|
||||||
// Create items with the initial state
|
// Create items with the initial state
|
||||||
val initialItems = sources.map { CatalogueSearchItem(it, null) }
|
val initialItems = sources.map { createCatalogueSearchItem(it, null) }
|
||||||
var items = initialItems
|
var items = initialItems
|
||||||
|
|
||||||
fetchSourcesSubscription?.unsubscribe()
|
fetchSourcesSubscription?.unsubscribe()
|
||||||
@ -125,7 +132,7 @@ open class CatalogueSearchPresenter(
|
|||||||
.map { it.mangas.take(10) } // Get at most 10 manga from search result.
|
.map { it.mangas.take(10) } // Get at most 10 manga from search result.
|
||||||
.map { it.map { networkToLocalManga(it, source.id) } } // Convert to local manga.
|
.map { it.map { networkToLocalManga(it, source.id) } } // Convert to local manga.
|
||||||
.doOnNext { fetchImage(it, source) } // Load manga covers.
|
.doOnNext { fetchImage(it, source) } // Load manga covers.
|
||||||
.map { CatalogueSearchItem(source, it.map { CatalogueSearchCardItem(it) }) }
|
.map { createCatalogueSearchItem(source, it.map { CatalogueSearchCardItem(it) }) }
|
||||||
}, 5)
|
}, 5)
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
// Update matching source with the obtained results
|
// Update matching source with the obtained results
|
||||||
|
@ -2,6 +2,8 @@ package eu.kanade.tachiyomi.ui.migration
|
|||||||
|
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.source.CatalogueSource
|
import eu.kanade.tachiyomi.source.CatalogueSource
|
||||||
|
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchCardItem
|
||||||
|
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchPresenter
|
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchPresenter
|
||||||
|
|
||||||
class SearchPresenter(
|
class SearchPresenter(
|
||||||
@ -10,8 +12,13 @@ class SearchPresenter(
|
|||||||
) : CatalogueSearchPresenter(initialQuery) {
|
) : CatalogueSearchPresenter(initialQuery) {
|
||||||
|
|
||||||
override fun getEnabledSources(): List<CatalogueSource> {
|
override fun getEnabledSources(): List<CatalogueSource> {
|
||||||
// Filter out the source of the selected manga
|
// Put the source of the selected manga at the top
|
||||||
return super.getEnabledSources()
|
return super.getEnabledSources()
|
||||||
.filterNot { it.id == manga.source }
|
.sortedByDescending { it.id == manga.source }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createCatalogueSearchItem(source: CatalogueSource, results: List<CatalogueSearchCardItem>?): CatalogueSearchItem {
|
||||||
|
//Set the catalogue search item as highlighted if the source matches that of the selected manga
|
||||||
|
return CatalogueSearchItem(source, results, source.id == manga.source)
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user