From 79eec138566d7b0f994c6d8f3d4ade11d4b7357f Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Tue, 10 Oct 2023 21:59:37 +0800 Subject: [PATCH] Wrap exceptions thrown by native methods --- .../hippo/ehviewer/client/parser/FavoritesParser.kt | 13 +++++++------ .../com/hippo/ehviewer/client/parser/HomeParser.kt | 4 +++- 2 files changed, 10 insertions(+), 7 deletions(-) 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 0ac3aecb9..48151fc03 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 @@ -1,18 +1,19 @@ package com.hippo.ehviewer.client.parser -import com.hippo.ehviewer.R -import com.hippo.ehviewer.client.exception.EhException +import com.hippo.ehviewer.client.exception.NotLoggedInException import com.hippo.ehviewer.client.exception.ParseException -import splitties.init.appCtx object FavoritesParser { 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)) + throw NotLoggedInException() } val catArray = arrayOfNulls(10) - val countArray = parseFav(body, catArray) - if (countArray.isEmpty()) throw ParseException("Parse favorites error") + val countArray = runCatching { + parseFav(body, catArray).also { check(it.isNotEmpty()) } + }.getOrElse { + throw ParseException("Parse favorites error", it) + } val result = GalleryListParser.parse(body) return Result(catArray.requireNoNulls(), countArray, result) } diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/HomeParser.kt b/app/src/main/java/com/hippo/ehviewer/client/parser/HomeParser.kt index d4b70e580..6c0a9f5f3 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/HomeParser.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/HomeParser.kt @@ -10,7 +10,9 @@ object HomeParser { private val PATTERN_FUNDS = Regex("Available: ([\\d,]+) Credits.*Available: ([\\d,]+) kGP", RegexOption.DOT_MATCHES_ALL) private const val INSUFFICIENT_FUNDS = "Insufficient funds." - fun parse(body: ByteBuffer) = parseLimit(body) + fun parse(body: ByteBuffer) = runCatching { + parseLimit(body) + }.getOrElse { throw ParseException("Parse image limits error", it) } fun parseResetLimits(body: String) { if (body.contains(INSUFFICIENT_FUNDS)) {