diff --git a/app/src/main/rust/src/lib.rs b/app/src/main/rust/src/lib.rs index c08b1ce09..d7a83d186 100644 --- a/app/src/main/rust/src/lib.rs +++ b/app/src/main/rust/src/lib.rs @@ -75,15 +75,6 @@ pub struct BaseGalleryInfo { favoriteName: Option, } -#[derive(Default, IntoJava)] -#[allow(non_snake_case)] -#[jnix(package = "com.hippo.ehviewer.client.parser")] -pub struct Limits { - current: i32, - maximum: i32, - resetCost: i32, -} - fn parse_jni_string(env: &mut JnixEnv, str: &JString, mut f: F) -> Option where F: FnMut(&VDom, &Parser, &JnixEnv) -> Option, @@ -94,31 +85,6 @@ where Some(f(&dom, parser, env)?) } -#[no_mangle] -#[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 { - let mut env = JnixEnv { env }; - let vec = parse_jni_string(&mut env, &input, |dom, parser, _env| { - let iter = dom.query_selector("strong")?; - let vec: Vec = iter - .filter_map(|e| Some(e.get(parser)?.inner_text(parser).parse::().ok()?)) - .collect(); - if vec.len() == 3 { - Some(Limits { - current: vec[0], - maximum: vec[1], - resetCost: vec[2], - }) - } else { - None - } - }) - .unwrap(); - vec.into_java(&env).forget().into_raw() -} - #[no_mangle] #[catch_panic(default = "std::ptr::null_mut()")] #[allow(non_snake_case)] diff --git a/app/src/main/rust/src/parser/home.rs b/app/src/main/rust/src/parser/home.rs new file mode 100644 index 000000000..92abcd905 --- /dev/null +++ b/app/src/main/rust/src/parser/home.rs @@ -0,0 +1,42 @@ +use catch_panic::catch_panic; +use jni_fn::jni_fn; +use jnix::jni::objects::{JClass, JString}; +use jnix::jni::sys::jobject; +use jnix::jni::JNIEnv; +use jnix::{IntoJava, JnixEnv}; +use jnix_macros::IntoJava; +use parse_jni_string; + +#[derive(Default, IntoJava)] +#[allow(non_snake_case)] +#[jnix(package = "com.hippo.ehviewer.client.parser")] +pub struct Limits { + current: i32, + maximum: i32, + resetCost: i32, +} + +#[no_mangle] +#[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 { + let mut env = JnixEnv { env }; + let vec = parse_jni_string(&mut env, &input, |dom, parser, _env| { + let iter = dom.query_selector("strong")?; + let vec: Vec = iter + .filter_map(|e| Some(e.get(parser)?.inner_text(parser).parse::().ok()?)) + .collect(); + if vec.len() == 3 { + Some(Limits { + current: vec[0], + maximum: vec[1], + resetCost: vec[2], + }) + } else { + None + } + }) + .unwrap(); + vec.into_java(&env).forget().into_raw() +} diff --git a/app/src/main/rust/src/parser/mod.rs b/app/src/main/rust/src/parser/mod.rs index 57bc31658..642fb3c63 100644 --- a/app/src/main/rust/src/parser/mod.rs +++ b/app/src/main/rust/src/parser/mod.rs @@ -1 +1,2 @@ +mod home; mod torrent;