From 9b3579acf68dfe49e4d61e774d191269e4aa86e7 Mon Sep 17 00:00:00 2001 From: NerdNumber9 Date: Fri, 12 Apr 2019 12:16:52 -0400 Subject: [PATCH] Decrease debounce time for library search Async library search code cleanup Rename LoadingTools -> LoaderManager --- .../tachiyomi/ui/library/LibraryCategoryAdapter.kt | 9 +++++---- .../tachiyomi/ui/library/LibraryCategoryView.kt | 2 +- .../exh/ui/{LoadingTools.kt => LoaderManager.kt} | 0 app/src/main/java/exh/util/CoroutineUtil.kt | 12 ++++++++++++ 4 files changed, 18 insertions(+), 5 deletions(-) rename app/src/main/java/exh/ui/{LoadingTools.kt => LoaderManager.kt} (100%) create mode 100644 app/src/main/java/exh/util/CoroutineUtil.kt 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