From 37ec49ed69ef999dcd5d85cf7b212875f33cd767 Mon Sep 17 00:00:00 2001
From: tarsin
Date: Wed, 12 Jul 2023 09:22:24 +0800
Subject: [PATCH] Suspend parser
---
app/src/main/java/com/hippo/ehviewer/EhDB.kt | 7 ++-----
app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt | 3 ++-
.../com/hippo/ehviewer/client/parser/FavoritesParser.kt | 2 +-
.../hippo/ehviewer/client/parser/GalleryDetailParser.kt | 4 ++--
.../com/hippo/ehviewer/client/parser/GalleryListParser.kt | 4 ++--
5 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/app/src/main/java/com/hippo/ehviewer/EhDB.kt b/app/src/main/java/com/hippo/ehviewer/EhDB.kt
index 18dee33ff..fabc4ba69 100644
--- a/app/src/main/java/com/hippo/ehviewer/EhDB.kt
+++ b/app/src/main/java/com/hippo/ehviewer/EhDB.kt
@@ -33,7 +33,6 @@ import com.hippo.ehviewer.dao.LocalFavoriteInfo
import com.hippo.ehviewer.dao.QuickSearch
import com.hippo.ehviewer.download.DownloadManager
import com.hippo.ehviewer.util.sendTo
-import kotlinx.coroutines.runBlocking
import splitties.arch.room.roomDb
object EhDB {
@@ -162,11 +161,9 @@ object EhDB {
}
}
- @Synchronized
- fun containLocalFavorites(gid: Long): Boolean {
+ suspend fun containLocalFavorites(gid: Long): Boolean {
val dao = db.localFavoritesDao()
- // TODO: remove runBlocking
- return runBlocking { dao.contains(gid) }
+ return dao.contains(gid)
}
suspend fun putLocalFavorites(galleryInfo: GalleryInfo) {
diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt
index 017e9c888..f273ade05 100644
--- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt
+++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt
@@ -121,7 +121,8 @@ private fun rethrowExactly(code: Int, headers: Headers, body: String, e: Throwab
throw e
}
-private suspend inline fun Request.executeAndParsingWith(block: String.() -> T): T {
+@Suppress("REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE")
+private suspend inline fun Request.executeAndParsingWith(block: suspend String.() -> T): T {
Log.d(TAG, url.toString())
return execute {
val body = body.string()
diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/FavoritesParser.kt b/app/src/main/java/com/hippo/ehviewer/client/parser/FavoritesParser.kt
index 30486f552..88a37a765 100644
--- a/app/src/main/java/com/hippo/ehviewer/client/parser/FavoritesParser.kt
+++ b/app/src/main/java/com/hippo/ehviewer/client/parser/FavoritesParser.kt
@@ -21,7 +21,7 @@ import com.hippo.ehviewer.client.exception.ParseException
import splitties.init.appCtx
object FavoritesParser {
- fun parse(body: String): Result {
+ suspend fun parse(body: String): Result {
if (body.contains("This page requires you to log on.
")) {
throw EhException(appCtx.getString(R.string.need_sign_in))
}
diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt
index da6293ad5..812e2cf28 100644
--- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt
+++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt
@@ -83,7 +83,7 @@ object GalleryDetailParser {
"(And if you choose to ignore this warning, you lose all rights to complain about it in the future.)
"
private const val PINING_STRING = "This gallery is pining for the fjords.
"
- fun parse(body: String): GalleryDetail {
+ suspend fun parse(body: String): GalleryDetail {
if (body.contains(OFFENSIVE_STRING)) {
throw OffensiveException()
}
@@ -108,7 +108,7 @@ object GalleryDetailParser {
return galleryDetail
}
- private fun parseDetail(gd: GalleryDetail, d: Document, body: String) {
+ private suspend fun parseDetail(gd: GalleryDetail, d: Document, body: String) {
PATTERN_DETAIL.find(body)?.apply {
gd.gid = groupValues[1].toLongOrNull() ?: -1L
gd.token = groupValues[2]
diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.kt b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.kt
index 9d7664ab6..12a890887 100644
--- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.kt
+++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.kt
@@ -35,13 +35,13 @@ object GalleryListParser {
private val PATTERN_PREV = Pattern.compile("prev=(\\d+(-\\d+)?)")
private val PATTERN_NEXT = Pattern.compile("next=(\\d+(-\\d+)?)")
- fun parse(body: String): Result {
+ suspend fun parse(body: String): Result {
val d = Jsoup.parse(body)
d.outputSettings().prettyPrint(false)
return parse(d, body)
}
- fun parse(d: Document, body: String): Result {
+ suspend fun parse(d: Document, body: String): Result {
val result = Result()
try {
val prev = d.getElementById("uprev")