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?) {
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
.onEach {
bindLatest(it)
bind(it, true)
}
.launchIn(viewScope)
presenter.browseItems
.onEach {
bindBrowse(it)
bind(it, false)
}
.launchIn(viewScope)
@ -260,87 +266,48 @@ open class IndexController :
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 {
latestResults == null -> {
binding.latestProgress.isVisible = true
showLatestResultsHolder()
results == null -> {
progress.isVisible = true
showResultsHolder(isLatest)
}
latestResults.isEmpty() -> {
binding.latestProgress.isVisible = false
showLatestNoResults()
results.isEmpty() -> {
progress.isVisible = false
showNoResults(isLatest)
}
else -> {
binding.latestProgress.isVisible = false
showLatestResultsHolder()
progress.isVisible = false
showResultsHolder(isLatest)
}
}
latestAdapter?.updateDataSet(latestResults)
}
private fun bindBrowse(browseResults: List<IndexCardItem>?) {
when {
browseResults == null -> {
binding.browseProgress.isVisible = true
showBrowseResultsHolder()
}
browseResults.isEmpty() -> {
binding.browseProgress.isVisible = false
showBrowseNoResults()
}
else -> {
binding.browseProgress.isVisible = false
showBrowseResultsHolder()
}
val adapter = if (isLatest) {
latestAdapter
} else {
browseAdapter
}
browseAdapter?.updateDataSet(browseResults)
adapter?.updateDataSet(results)
}
fun onLatestError(e: Exception) {
fun onError(e: Exception, isLatest: Boolean) {
e.message?.let {
binding.latestNoResultsFound.text = it
val textView = if (isLatest) {
binding.latestNoResultsFound
} else {
binding.browseNoResultsFound
}
textView.text = it
}
}
fun onBrowseError(e: Exception) {
e.message?.let {
binding.browseNoResultsFound.text = it
}
private fun showResultsHolder(isLatest: Boolean) {
(if (isLatest) binding.latestNoResultsFound else binding.browseNoResultsFound).isVisible = false
}
private fun showLatestResultsHolder() {
binding.latestNoResultsFound.isVisible = false
}
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)
}
private fun showNoResults(isLatest: Boolean) {
(if (isLatest) binding.latestNoResultsFound else binding.browseNoResultsFound).isVisible = true
}
override fun onDestroyView(view: View) {
@ -363,8 +330,14 @@ open class IndexController :
* @param manga the initialized manga.
*/
fun onMangaInitialized(manga: Manga, isLatest: Boolean) {
if (isLatest) setLatestImage(manga)
else setBrowseImage(manga)
val adapter = if (isLatest) latestAdapter else browseAdapter
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 {

View File

@ -111,7 +111,7 @@ open class IndexPresenter(
.map { networkToLocalManga(it, source.id) }
} catch (e: Exception) {
withUIContext {
view?.onLatestError(e)
view?.onError(e, true)
}
emptyList()
}
@ -131,7 +131,7 @@ open class IndexPresenter(
.map { networkToLocalManga(it, source.id) }
} catch (e: Exception) {
withUIContext {
view?.onBrowseError(e)
view?.onError(e, true)
}
emptyList()
}