Fix some search bugs when using the latest/browse menu
This commit is contained in:
parent
367d95c825
commit
2ddf5f5037
@ -130,7 +130,13 @@ open class IndexController :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onSearchViewQueryTextSubmit(query: String?) {
|
override fun onSearchViewQueryTextSubmit(query: String?) {
|
||||||
onBrowseClick(presenter.query.nullIfBlank())
|
onBrowseClick(query.nullIfBlank())
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onSearchViewQueryTextChange(newText: String?) {
|
||||||
|
if (router.backstack.lastOrNull()?.controller() == this) {
|
||||||
|
presenter.query = newText ?: ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -168,13 +174,13 @@ open class IndexController :
|
|||||||
|
|
||||||
presenter.latestItems
|
presenter.latestItems
|
||||||
.onEach {
|
.onEach {
|
||||||
bindLatest(it)
|
bind(it, true)
|
||||||
}
|
}
|
||||||
.launchIn(viewScope)
|
.launchIn(viewScope)
|
||||||
|
|
||||||
presenter.browseItems
|
presenter.browseItems
|
||||||
.onEach {
|
.onEach {
|
||||||
bindBrowse(it)
|
bind(it, false)
|
||||||
}
|
}
|
||||||
.launchIn(viewScope)
|
.launchIn(viewScope)
|
||||||
|
|
||||||
@ -260,87 +266,48 @@ open class IndexController :
|
|||||||
actionFab = null
|
actionFab = null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun bindLatest(latestResults: List<IndexCardItem>?) {
|
private fun bind(results: List<IndexCardItem>?, isLatest: Boolean) {
|
||||||
|
val progress = if (isLatest) binding.latestProgress else binding.browseProgress
|
||||||
when {
|
when {
|
||||||
latestResults == null -> {
|
results == null -> {
|
||||||
binding.latestProgress.isVisible = true
|
progress.isVisible = true
|
||||||
showLatestResultsHolder()
|
showResultsHolder(isLatest)
|
||||||
}
|
}
|
||||||
latestResults.isEmpty() -> {
|
results.isEmpty() -> {
|
||||||
binding.latestProgress.isVisible = false
|
progress.isVisible = false
|
||||||
showLatestNoResults()
|
showNoResults(isLatest)
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
binding.latestProgress.isVisible = false
|
progress.isVisible = false
|
||||||
showLatestResultsHolder()
|
showResultsHolder(isLatest)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
latestAdapter?.updateDataSet(latestResults)
|
val adapter = if (isLatest) {
|
||||||
}
|
latestAdapter
|
||||||
|
} else {
|
||||||
private fun bindBrowse(browseResults: List<IndexCardItem>?) {
|
browseAdapter
|
||||||
when {
|
|
||||||
browseResults == null -> {
|
|
||||||
binding.browseProgress.isVisible = true
|
|
||||||
showBrowseResultsHolder()
|
|
||||||
}
|
|
||||||
browseResults.isEmpty() -> {
|
|
||||||
binding.browseProgress.isVisible = false
|
|
||||||
showBrowseNoResults()
|
|
||||||
}
|
|
||||||
else -> {
|
|
||||||
binding.browseProgress.isVisible = false
|
|
||||||
showBrowseResultsHolder()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
adapter?.updateDataSet(results)
|
||||||
browseAdapter?.updateDataSet(browseResults)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onLatestError(e: Exception) {
|
fun onError(e: Exception, isLatest: Boolean) {
|
||||||
e.message?.let {
|
e.message?.let {
|
||||||
binding.latestNoResultsFound.text = it
|
val textView = if (isLatest) {
|
||||||
|
binding.latestNoResultsFound
|
||||||
|
} else {
|
||||||
|
binding.browseNoResultsFound
|
||||||
|
}
|
||||||
|
textView.text = it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onBrowseError(e: Exception) {
|
private fun showResultsHolder(isLatest: Boolean) {
|
||||||
e.message?.let {
|
(if (isLatest) binding.latestNoResultsFound else binding.browseNoResultsFound).isVisible = false
|
||||||
binding.browseNoResultsFound.text = it
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showLatestResultsHolder() {
|
private fun showNoResults(isLatest: Boolean) {
|
||||||
binding.latestNoResultsFound.isVisible = false
|
(if (isLatest) binding.latestNoResultsFound else binding.browseNoResultsFound).isVisible = true
|
||||||
}
|
|
||||||
|
|
||||||
private fun showLatestNoResults() {
|
|
||||||
binding.latestNoResultsFound.isVisible = true
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun showBrowseResultsHolder() {
|
|
||||||
binding.browseNoResultsFound.isVisible = false
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun showBrowseNoResults() {
|
|
||||||
binding.browseNoResultsFound.isVisible = true
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setLatestImage(manga: Manga) {
|
|
||||||
val latestAdapter = latestAdapter ?: return
|
|
||||||
latestAdapter.allBoundViewHolders.forEach {
|
|
||||||
if (it !is IndexCardHolder) return@forEach
|
|
||||||
if (latestAdapter.getItem(it.bindingAdapterPosition)?.manga?.id != manga.id) return@forEach
|
|
||||||
it.setImage(manga)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private fun setBrowseImage(manga: Manga) {
|
|
||||||
val browseAdapter = browseAdapter ?: return
|
|
||||||
browseAdapter.allBoundViewHolders.forEach {
|
|
||||||
if (it !is IndexCardHolder) return@forEach
|
|
||||||
if (browseAdapter.getItem(it.bindingAdapterPosition)?.manga?.id != manga.id) return@forEach
|
|
||||||
it.setImage(manga)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView(view: View) {
|
override fun onDestroyView(view: View) {
|
||||||
@ -363,8 +330,14 @@ open class IndexController :
|
|||||||
* @param manga the initialized manga.
|
* @param manga the initialized manga.
|
||||||
*/
|
*/
|
||||||
fun onMangaInitialized(manga: Manga, isLatest: Boolean) {
|
fun onMangaInitialized(manga: Manga, isLatest: Boolean) {
|
||||||
if (isLatest) setLatestImage(manga)
|
val adapter = if (isLatest) latestAdapter else browseAdapter
|
||||||
else setBrowseImage(manga)
|
adapter ?: return
|
||||||
|
|
||||||
|
adapter.allBoundViewHolders.forEach {
|
||||||
|
if (it !is IndexCardHolder) return@forEach
|
||||||
|
if (adapter.getItem(it.bindingAdapterPosition)?.manga?.id != manga.id) return@forEach
|
||||||
|
it.setImage(manga)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -111,7 +111,7 @@ open class IndexPresenter(
|
|||||||
.map { networkToLocalManga(it, source.id) }
|
.map { networkToLocalManga(it, source.id) }
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
withUIContext {
|
withUIContext {
|
||||||
view?.onLatestError(e)
|
view?.onError(e, true)
|
||||||
}
|
}
|
||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
@ -131,7 +131,7 @@ open class IndexPresenter(
|
|||||||
.map { networkToLocalManga(it, source.id) }
|
.map { networkToLocalManga(it, source.id) }
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
withUIContext {
|
withUIContext {
|
||||||
view?.onBrowseError(e)
|
view?.onError(e, true)
|
||||||
}
|
}
|
||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user