From b0f0686821d46d74b91cd56f75f3721b7266c917 Mon Sep 17 00:00:00 2001 From: tarsin Date: Fri, 28 Jul 2023 17:49:41 +0800 Subject: [PATCH] Convert HomeParser to use a bytebuffer --- .../main/java/com/hippo/ehviewer/client/EhEngine.kt | 2 +- .../com/hippo/ehviewer/client/parser/HomeParser.kt | 5 +++-- app/src/main/rust/src/parser/home.rs | 11 +++++------ 3 files changed, 9 insertions(+), 9 deletions(-) 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 e4418f212..a98f77213 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt @@ -199,7 +199,7 @@ object EhEngine { .apply { funds = funds ?: ehRequest(EhUrl.URL_FUNDS).executeAndParsingWith(HomeParser::parseFunds) } suspend fun getImageLimits() = parZip( - { ehRequest(EhUrl.URL_HOME).executeAndParsingWith(HomeParser::parse) }, + { fetchCompat(EhUrl.URL_HOME, parser = HomeParser::parse) }, { ehRequest(EhUrl.URL_FUNDS).executeAndParsingWith(HomeParser::parseFunds) }, { limits, funds -> HomeParser.Result(limits, 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 index 3926d389c..823f12a9b 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 @@ -4,12 +4,13 @@ import android.os.Parcelable import com.hippo.ehviewer.client.exception.InsufficientFundsException import com.hippo.ehviewer.client.exception.ParseException import kotlinx.parcelize.Parcelize +import java.nio.ByteBuffer 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: String) = parseLimit(body) + fun parse(body: ByteBuffer) = parseLimit(body) fun parseResetLimits(body: String) { if (body.contains(INSUFFICIENT_FUNDS)) { @@ -34,4 +35,4 @@ object HomeParser { @Parcelize data class Limits(val current: Int, val maximum: Int, val resetCost: Int) : Parcelable -private external fun parseLimit(body: String): Limits +private external fun parseLimit(body: ByteBuffer, limit: Int = body.limit()): Limits diff --git a/app/src/main/rust/src/parser/home.rs b/app/src/main/rust/src/parser/home.rs index 818198b1c..d09e40f07 100644 --- a/app/src/main/rust/src/parser/home.rs +++ b/app/src/main/rust/src/parser/home.rs @@ -1,12 +1,11 @@ use catch_panic::catch_panic; -use get_vdom_first_element_by_class_name; use jni_fn::jni_fn; -use jnix::jni::objects::{JClass, JString}; -use jnix::jni::sys::jobject; +use jnix::jni::objects::{JByteBuffer, JClass}; +use jnix::jni::sys::{jint, jobject}; use jnix::jni::JNIEnv; use jnix::{IntoJava, JnixEnv}; use jnix_macros::IntoJava; -use parse_jni_string; +use {get_vdom_first_element_by_class_name, parse_bytebuffer}; #[derive(Default, IntoJava)] #[allow(non_snake_case)] @@ -21,9 +20,9 @@ pub struct Limits { #[catch_panic(default = "std::ptr::null_mut()")] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.client.parser.HomeParserKt")] -pub fn parseLimit(env: JNIEnv, _class: JClass, input: JString) -> jobject { +pub fn parseLimit(env: JNIEnv, _class: JClass, input: JByteBuffer, limit: jint) -> jobject { let mut env = JnixEnv { env }; - parse_jni_string(&mut env, &input, |dom, parser, _env| { + parse_bytebuffer(&mut env, input, limit, |dom, parser, _env| { let iter = get_vdom_first_element_by_class_name(dom, "homebox")? .as_tag()? .query_selector(parser, "strong")?;