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")