diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index d9dc4e25..215232f0 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -1,17 +1,17 @@ - + - + - + - - + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index e9fdb8bd..e244d847 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -38,7 +38,7 @@ android { minSdkVersion 16 targetSdkVersion 31 versionCode 69 - versionName "5.2.11" + versionName "5.2.12" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true } diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 850699a2..62c82216 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -12,7 +12,7 @@ "filters": [], "attributes": [], "versionCode": 69, - "versionName": "5.2.11", + "versionName": "5.2.12", "outputFile": "app-release.apk" } ], diff --git a/app/src/main/java/xyz/quaver/pupil/Pupil.kt b/app/src/main/java/xyz/quaver/pupil/Pupil.kt index 6e81ae53..1fa23cbc 100644 --- a/app/src/main/java/xyz/quaver/pupil/Pupil.kt +++ b/app/src/main/java/xyz/quaver/pupil/Pupil.kt @@ -93,7 +93,7 @@ fun reloadWebView() { webViewReady = false webViewFailed = false - evaluationContext.cancelChildren() + evaluationContext.cancelChildren(CancellationException("reload")) runCatching { URL( diff --git a/app/src/main/java/xyz/quaver/pupil/hitomi/common.kt b/app/src/main/java/xyz/quaver/pupil/hitomi/common.kt index d53dc563..58f18023 100644 --- a/app/src/main/java/xyz/quaver/pupil/hitomi/common.kt +++ b/app/src/main/java/xyz/quaver/pupil/hitomi/common.kt @@ -56,7 +56,7 @@ suspend fun WebView.evaluate(script: String): String = coroutineScope { } } catch (e: CancellationException) { - continue + if (e.message != "reload") result = "null" } } @@ -91,7 +91,7 @@ suspend fun WebView.evaluatePromise( flow.first().second } } catch (e: CancellationException) { - continue + if (e.message != "reload") result = "null" } } diff --git a/app/src/main/java/xyz/quaver/pupil/hitomi/results.kt b/app/src/main/java/xyz/quaver/pupil/hitomi/results.kt index 112b062e..23f78778 100644 --- a/app/src/main/java/xyz/quaver/pupil/hitomi/results.kt +++ b/app/src/main/java/xyz/quaver/pupil/hitomi/results.kt @@ -16,8 +16,8 @@ package xyz.quaver.pupil.hitomi -import android.util.Log -import kotlinx.coroutines.* +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope import java.util.* suspend fun doSearch(query: String, sortByPopularity: Boolean = false) : Set = coroutineScope { diff --git a/app/src/main/java/xyz/quaver/pupil/hitomi/search.kt b/app/src/main/java/xyz/quaver/pupil/hitomi/search.kt index 36d76329..0653cded 100644 --- a/app/src/main/java/xyz/quaver/pupil/hitomi/search.kt +++ b/app/src/main/java/xyz/quaver/pupil/hitomi/search.kt @@ -16,6 +16,7 @@ package xyz.quaver.pupil.hitomi +import android.util.Log import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable import kotlinx.serialization.decodeFromString @@ -37,9 +38,22 @@ data class Suggestion(val s: String, val t: Int, val u: String, val n: String) @OptIn(ExperimentalSerializationApi::class) suspend fun getSuggestionsForQuery(query: String) : List { - val result = webView.evaluatePromise("get_suggestions_for_query('$query')") + val result = webView.evaluatePromise( + "get_suggestions_for_query('$query', ++search_serial)", + then = """ + .then(r => { + let [results, results_serial] = r; + console.log(results_serial, r, search_serial); + if (search_serial !== results_serial) { + Callback.onResult(%uid, '[]'); + } else { + Callback.onResult(%uid, JSON.stringify(results)); + } + }); + """.trimIndent() + ) - return Json.decodeFromString?>>(result)[0] ?: return emptyList() + return Json.decodeFromString(result) ?: return emptyList() } @OptIn(ExperimentalSerializationApi::class)