diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt index 2de8331a6..78cceb55f 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt @@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.data.database.models.Manga import exh.isLewdSource import exh.metadata.sql.tables.SearchMetadataTable import exh.search.SearchEngine +import exh.util.cancellable import kotlinx.coroutines.* import kotlinx.coroutines.flow.asFlow import kotlinx.coroutines.flow.filter @@ -77,24 +78,24 @@ class LibraryCategoryAdapter(val view: LibraryCategoryView) : .args(*sqlQuery.second.toTypedArray()) .build()) - if(!isActive) return@launch // Fail early when cancelled + ensureActive() // Fail early when cancelled val convertedResult = LongArray(queryResult.count) if(convertedResult.isNotEmpty()) { val mangaIdCol = queryResult.getColumnIndex(SearchMetadataTable.COL_MANGA_ID) queryResult.moveToFirst() while (!queryResult.isAfterLast) { - if(!isActive) return@launch // Fail early when cancelled + ensureActive() // Fail early when cancelled convertedResult[queryResult.position] = queryResult.getLong(mangaIdCol) queryResult.moveToNext() } } - if(!isActive) return@launch // Fail early when cancelled + ensureActive() // Fail early when cancelled // Flow the mangas to allow cancellation of this filter operation - mangas.asFlow().filter { item -> + mangas.asFlow().cancellable().filter { item -> if(isLewdSource(item.manga.source)) { convertedResult.binarySearch(item.manga.id ?: -1) >= 0 } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt index f9a821c04..7e59afcfe 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt @@ -131,7 +131,7 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att subscriptions += controller.searchRelay .doOnNext { adapter.searchText = it } .skip(1) - .debounce(500, TimeUnit.MILLISECONDS) + .debounce(250, TimeUnit.MILLISECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe { // EXH --> diff --git a/app/src/main/java/exh/ui/LoadingTools.kt b/app/src/main/java/exh/ui/LoaderManager.kt similarity index 100% rename from app/src/main/java/exh/ui/LoadingTools.kt rename to app/src/main/java/exh/ui/LoaderManager.kt diff --git a/app/src/main/java/exh/util/CoroutineUtil.kt b/app/src/main/java/exh/util/CoroutineUtil.kt new file mode 100644 index 000000000..b9c55bb41 --- /dev/null +++ b/app/src/main/java/exh/util/CoroutineUtil.kt @@ -0,0 +1,12 @@ +package exh.util + +import kotlinx.coroutines.FlowPreview +import kotlinx.coroutines.ensureActive +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.onEach +import kotlin.coroutines.coroutineContext + +@FlowPreview +fun Flow.cancellable() = onEach { + coroutineContext.ensureActive() +} \ No newline at end of file