Fix and cleanup SmartSearch

This commit is contained in:
Jobobby04 2021-12-12 17:59:29 -05:00
parent 04451ab14e
commit d7f5ded41a
3 changed files with 39 additions and 72 deletions

View File

@ -11,9 +11,7 @@ import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
import eu.kanade.tachiyomi.ui.browse.source.SourceController import eu.kanade.tachiyomi.ui.browse.source.SourceController
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
import eu.kanade.tachiyomi.ui.manga.MangaController import eu.kanade.tachiyomi.ui.manga.MangaController
import eu.kanade.tachiyomi.util.lang.withUIContext
import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.system.toast
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.plus import kotlinx.coroutines.plus
@ -36,8 +34,6 @@ class SmartSearchController(bundle: Bundle? = null) : NucleusController<EhSmartS
override fun onViewCreated(view: View) { override fun onViewCreated(view: View) {
super.onViewCreated(view) super.onViewCreated(view)
binding.appbar.bringToFront()
if (source == null || smartSearchConfig == null) { if (source == null || smartSearchConfig == null) {
router.popCurrentController() router.popCurrentController()
applicationContext?.toast("Missing data!") applicationContext?.toast("Missing data!")
@ -48,25 +44,22 @@ class SmartSearchController(bundle: Bundle? = null) : NucleusController<EhSmartS
.onEach { results -> .onEach { results ->
if (results is SmartSearchPresenter.SearchResults.Found) { if (results is SmartSearchPresenter.SearchResults.Found) {
val transaction = MangaController(results.manga, true, smartSearchConfig).withFadeTransaction() val transaction = MangaController(results.manga, true, smartSearchConfig).withFadeTransaction()
withUIContext { router.replaceTopController(transaction)
router.replaceTopController(transaction)
}
} else { } else {
withUIContext { if (results is SmartSearchPresenter.SearchResults.NotFound) {
if (results is SmartSearchPresenter.SearchResults.NotFound) { applicationContext?.toast("Couldn't find the manga in the source!")
applicationContext?.toast("Couldn't find the manga in the source!") } else {
} else { applicationContext?.toast("Error performing automatic search!")
applicationContext?.toast("Error performing automatic search!")
}
}
val transaction = BrowseSourceController(source, smartSearchConfig.origTitle, smartSearchConfig).withFadeTransaction()
withUIContext {
router.replaceTopController(transaction)
} }
val transaction = BrowseSourceController(
source,
smartSearchConfig.origTitle,
smartSearchConfig
).withFadeTransaction()
router.replaceTopController(transaction)
} }
} }
.launchIn(viewScope + Dispatchers.IO) .launchIn(viewScope)
} }
companion object { companion object {

View File

@ -4,24 +4,25 @@ import android.os.Bundle
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.browse.source.SourceController import eu.kanade.tachiyomi.ui.browse.source.SourceController
import eu.kanade.tachiyomi.util.lang.launchIO
import exh.smartsearch.SmartSearchEngine import exh.smartsearch.SmartSearchEngine
import exh.ui.base.CoroutinePresenter import exh.ui.base.CoroutinePresenter
import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.flow.asSharedFlow
class SmartSearchPresenter(private val source: CatalogueSource, private val config: SourceController.SmartSearchConfig) : class SmartSearchPresenter(private val source: CatalogueSource, private val config: SourceController.SmartSearchConfig) :
CoroutinePresenter<SmartSearchController>() { CoroutinePresenter<SmartSearchController>() {
val smartSearchFlow = MutableSharedFlow<SearchResults>() private val _smartSearchFlow = MutableSharedFlow<SearchResults>()
val smartSearchFlow = _smartSearchFlow.asSharedFlow()
private val smartSearchEngine = SmartSearchEngine() private val smartSearchEngine = SmartSearchEngine()
override fun onCreate(savedState: Bundle?) { override fun onCreate(savedState: Bundle?) {
super.onCreate(savedState) super.onCreate(savedState)
launch(Dispatchers.IO) { launchIO {
val result = try { val result = try {
val resultManga = smartSearchEngine.smartSearch(source, config.origTitle) val resultManga = smartSearchEngine.smartSearch(source, config.origTitle)
if (resultManga != null) { if (resultManga != null) {
@ -38,7 +39,7 @@ class SmartSearchPresenter(private val source: CatalogueSource, private val conf
} }
} }
smartSearchFlow.emit(result) _smartSearchFlow.emit(result)
} }
} }

View File

@ -1,54 +1,27 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:layout_gravity="center"
android:background="?attr/colorSurface"
android:gravity="center"
android:orientation="vertical">
<LinearLayout <TextView
android:layout_width="match_parent" android:id="@+id/intercept_status"
android:layout_height="match_parent" android:layout_width="wrap_content"
android:orientation="vertical"> android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/searching_source"
android:textAppearance="?attr/textAppearanceTitleLarge" />
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/appbar" android:id="@+id/intercept_progress"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:elevation="0dp"> android:layout_gravity="center"
android:indeterminate="true"
<androidx.appcompat.widget.Toolbar app:indicatorSize="56dp" />
android:id="@+id/toolbar" </LinearLayout>
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="?attr/actionBarTheme" />
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="?attr/colorPrimary"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/intercept_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/searching_source"
android:textAppearance="?attr/textAppearanceTitleLarge" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/intercept_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"
app:indicatorSize="56dp" />
</LinearLayout>
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>