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 389ddd888..954b46f8d 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt @@ -669,7 +669,14 @@ object EhEngine { code = response.code headers = response.headers body = response.body.string() - result = ArchiveParser.parse(body)!! + result = ArchiveParser.parse(body!!)!! + if (result.funds == null) { + try { + result.funds = getFunds() + } catch (e: Throwable) { + e.printStackTrace() + } + } } } catch (e: Throwable) { ExceptionUtils.throwIfFatal(e) @@ -711,6 +718,7 @@ object EhEngine { val call = okHttpClient.newCall(request) var body: String? = null var headers: Headers? = null + var result: String? var code = -1 try { call.executeAsync().use { response -> @@ -718,15 +726,16 @@ object EhEngine { headers = response.headers body = response.body.string() transformException(code, headers, body, null) + result = ArchiveParser.parseArchiveUrl(body!!) } } catch (e: Throwable) { ExceptionUtils.throwIfFatal(e) transformException(code, headers, body, e) throw e } - var result = ArchiveParser.parseArchiveUrl(body) if (!isHAtH) { if (result == null) { + // Wait for the server to prepare archives delay(1000) try { call.clone().executeAsync().use { response -> @@ -734,13 +743,13 @@ object EhEngine { headers = response.headers body = response.body.string() transformException(code, headers, body, null) + result = ArchiveParser.parseArchiveUrl(body!!) } } catch (e: Throwable) { ExceptionUtils.throwIfFatal(e) transformException(code, headers, body, e) throw e } - result = ArchiveParser.parseArchiveUrl(body) if (result == null) { throw EhException("Archive unavailable") } @@ -750,6 +759,29 @@ object EhEngine { return null } + @Throws(Throwable::class) + suspend fun getFunds(): ArchiveParser.Funds? { + val url = EhUrl.URL_FUNDS + Log.d(TAG, url) + val request = EhRequestBuilder(url, null).build() + val call = okHttpClient.newCall(request) + var body: String? = null + var headers: Headers? = null + var code = -1 + try { + call.executeAsync().use { response -> + code = response.code + headers = response.headers + body = response.body.string() + return ArchiveParser.parseFunds(body!!) + } + } catch (e: Throwable) { + ExceptionUtils.throwIfFatal(e) + transformException(code, headers, body, e) + throw e + } + } + @Throws(Throwable::class) private suspend fun getProfileInternal( url: String, referer: String diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.kt b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.kt index d8079b231..1d5e07180 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.kt @@ -44,6 +44,7 @@ object EhUrl { const val URL_SIGN_IN = "https://forums.e-hentai.org/index.php?act=Login" const val URL_REGISTER = "https://forums.e-hentai.org/index.php?act=Reg&CODE=00" const val URL_FORUMS = "https://forums.e-hentai.org/" + const val URL_FUNDS = "https://e-hentai.org/exchange.php?t=gp" const val REFERER_EX = "https://$DOMAIN_EX" const val ORIGIN_EX = REFERER_EX const val REFERER_E = "https://$DOMAIN_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 a07d095f1..924797737 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 @@ -26,6 +26,8 @@ object ArchiveParser { Pattern.compile("(.*).*Click Here To Start Downloading") private val PATTERN_CURRENT_FUNDS = Pattern.compile("
([\\d,]+) GP \\[[^]]*] ([\\d,]+) Credits \\[[^]]*]
") + private val PATTERN_FUNDS = + Pattern.compile("Available: ([\\d,]+) Credits.*Available: ([\\d,]+) kGP", Pattern.DOTALL) private val PATTERN_HATH_FORM = Pattern.compile("