Fix some search bugs when using the latest/browse menu

This commit is contained in:
Jobobby04 2021-03-31 14:30:03 -04:00
parent 367d95c825
commit 2ddf5f5037
2 changed files with 45 additions and 72 deletions

View File

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

View File

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