From 6413ed67c6ebd11fd661e98dd3dc1177d283fafa Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Thu, 9 Feb 2023 22:00:57 +0800 Subject: [PATCH] Introduce HomeParser --- .../com/hippo/ehviewer/client/EhEngine.kt | 5 +++-- .../ehviewer/client/parser/ArchiveParser.kt | 16 ++-------------- .../ehviewer/client/parser/HomeParser.kt | 19 +++++++++++++++++++ .../ehviewer/ui/scene/GalleryDetailScene.kt | 11 ++++------- 4 files changed, 28 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/com/hippo/ehviewer/client/parser/HomeParser.kt 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 43a3a1beb..1abda77d3 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt @@ -41,6 +41,7 @@ import com.hippo.ehviewer.client.parser.GalleryNotAvailableParser import com.hippo.ehviewer.client.parser.GalleryPageApiParser import com.hippo.ehviewer.client.parser.GalleryPageParser import com.hippo.ehviewer.client.parser.GalleryTokenApiParser +import com.hippo.ehviewer.client.parser.HomeParser import com.hippo.ehviewer.client.parser.ProfileParser import com.hippo.ehviewer.client.parser.RateGalleryParser import com.hippo.ehviewer.client.parser.SignInParser @@ -760,7 +761,7 @@ object EhEngine { } @Throws(Throwable::class) - suspend fun getFunds(): ArchiveParser.Funds? { + suspend fun getFunds(): HomeParser.Funds { val url = EhUrl.URL_FUNDS Log.d(TAG, url) val request = EhRequestBuilder(url, null).build() @@ -773,7 +774,7 @@ object EhEngine { code = response.code headers = response.headers body = response.body.string() - return ArchiveParser.parseFunds(body!!) + return HomeParser.parseFunds(body!!) } } catch (e: Throwable) { ExceptionUtils.throwIfFatal(e) diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/ArchiveParser.kt b/app/src/main/java/com/hippo/ehviewer/client/parser/ArchiveParser.kt index ce37500da..1696717b4 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/ArchiveParser.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/ArchiveParser.kt @@ -23,8 +23,6 @@ object ArchiveParser { Regex("(.*).*Click Here To Start Downloading") private val PATTERN_CURRENT_FUNDS = Regex("

([\\d,]+) GP \\[[^]]*]   ([\\d,]+) Credits \\[[^]]*]

") - private val PATTERN_FUNDS = - Regex("Available: ([\\d,]+) Credits.*Available: ([\\d,]+) kGP", RegexOption.DOT_MATCHES_ALL) private val PATTERN_HATH_FORM = Regex("
") private val PATTERN_HATH_ARCHIVE = @@ -61,7 +59,7 @@ object ArchiveParser { PATTERN_CURRENT_FUNDS.find(body)?.groupValues?.run { val fundsGP = ParserUtils.parseInt(get(1), 0) val fundsC = ParserUtils.parseInt(get(2), 0) - val funds = Funds(fundsGP, fundsC) + val funds = HomeParser.Funds(fundsGP, fundsC) result.funds = funds } return result @@ -75,14 +73,6 @@ object ArchiveParser { // TODO: Check more errors } - fun parseFunds(body: String): Funds? { - return PATTERN_FUNDS.find(body)?.groupValues?.run { - val fundsC = ParserUtils.parseInt(get(1), 0) - val fundsGP = ParserUtils.parseInt(get(2), 0) * 1000 - return Funds(fundsGP, fundsC) - } - } - class Archive( val res: String, val name: String, @@ -91,7 +81,5 @@ object ArchiveParser { val isHAtH: Boolean ) - class Funds(var fundsGP: Int, var fundsC: Int) - - class Result(val paramOr: String?, val archiveList: List, var funds: Funds?) + class Result(val paramOr: String?, val archiveList: List, var funds: HomeParser.Funds?) } 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 new file mode 100644 index 000000000..f17829ac6 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/HomeParser.kt @@ -0,0 +1,19 @@ +package com.hippo.ehviewer.client.parser + +import com.hippo.ehviewer.client.exception.ParseException + +object HomeParser { + private val PATTERN_FUNDS = + Regex("Available: ([\\d,]+) Credits.*Available: ([\\d,]+) kGP", RegexOption.DOT_MATCHES_ALL) + + fun parseFunds(body: String): Funds { + PATTERN_FUNDS.find(body)?.groupValues?.run { + val fundsC = ParserUtils.parseInt(get(1), 0) + val fundsGP = ParserUtils.parseInt(get(2), 0) * 1000 + return Funds(fundsGP, fundsC) + } + throw ParseException("Parse funds error", body) + } + + data class Funds(val fundsGP: Int, val fundsC: Int) +} \ No newline at end of file diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt index 23ca3d3cd..2494e00fd 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt @@ -78,6 +78,7 @@ import com.hippo.ehviewer.client.data.GalleryTagGroup import com.hippo.ehviewer.client.data.ListUrlBuilder import com.hippo.ehviewer.client.exception.NoHAtHClientException import com.hippo.ehviewer.client.parser.ArchiveParser +import com.hippo.ehviewer.client.parser.HomeParser import com.hippo.ehviewer.client.parser.ParserUtils import com.hippo.ehviewer.client.parser.RateGalleryParser import com.hippo.ehviewer.client.parser.TorrentParser @@ -149,7 +150,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl } private var mArchiveFormParamOr: String? = null private var mArchiveList: List? = null - private var mCurrentFunds: ArchiveParser.Funds? = null + private var mCurrentFunds: HomeParser.Funds? = null @State private var mState = STATE_INIT @@ -1459,7 +1460,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl } } - private fun bind(data: List?, funds: ArchiveParser.Funds?) { + private fun bind(data: List?, funds: HomeParser.Funds?) { if (null == mDialog || null == mProgressView || null == mErrorText || null == mListView) { return } @@ -1511,11 +1512,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl val cost = ParserUtils.parseInt( mArchiveList!![position].cost.removeSuffix("GP").removeSuffix("Credits"), 0 ) - if (cost <= mCurrentFunds!!.fundsGP) { - mCurrentFunds!!.fundsGP -= cost - } else if (cost <= mCurrentFunds!!.fundsC) { - mCurrentFunds!!.fundsC -= cost - } else { + if (cost > maxOf(mCurrentFunds!!.fundsGP, mCurrentFunds!!.fundsC)) { showTip(R.string.insufficient_funds, LENGTH_SHORT) return }