Cleanup rust parser
This commit is contained in:
1 parent
804dffc81a
commit
92b6069654
2 files changed
+13
-13
No files matched your search
@@ -10,7 +10,6 @@ object HomeParser {
|
||||
|
||||
fun parse(body: String): Limits {
|
||||
val value = parseLimit(body)
|
||||
check(value.size == 3)
|
||||
if (value[0] == -1) throw ParseException("Parse image limits error", body)
|
||||
return Limits(value[0], value[1], value[2])
|
||||
}
|
||||
|
||||
@@ -1,26 +1,27 @@
|
||||
extern crate jni;
|
||||
extern crate tl;
|
||||
|
||||
use jni::JNIEnv;
|
||||
use jni::objects::{JClass, JString};
|
||||
use jni::sys::jintArray;
|
||||
use tl::{Parser, VDom};
|
||||
|
||||
fn parse_limit(body: &str) -> Option<Vec<i32>> {
|
||||
let dom = tl::parse(body, tl::ParserOptions::default()).ok()?;
|
||||
fn parse_jni_string<F, R>(env: &mut JNIEnv, str: &JString, mut f: F) -> Option<R>
|
||||
where F: FnMut(&VDom, &Parser) -> Option<R> {
|
||||
let html = env.get_string(str).ok()?;
|
||||
let dom = tl::parse(html.to_str().ok()?, tl::ParserOptions::default()).ok()?;
|
||||
let parser = dom.parser();
|
||||
let home_box = dom.query_selector("div.homebox")?.next()?.get(parser)?;
|
||||
let html2 = home_box.inner_html(parser);
|
||||
let dom2 = tl::parse(&*html2, tl::ParserOptions::default()).ok()?;
|
||||
let parser = dom2.parser();
|
||||
let iter = dom2.query_selector("strong")?;
|
||||
let vec: Vec<i32> = iter.filter_map(|e| Some(e.get(parser)?.inner_text(parser).parse::<i32>().ok()?)).collect();
|
||||
Some(vec)
|
||||
Some(f(&dom, parser)?)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "system" fn Java_com_hippo_ehviewer_client_parser_HomeParserKt_parseLimit<'local>(mut env: JNIEnv<'local>, _class: JClass<'local>, input: JString<'local>) -> jintArray {
|
||||
let html = env.get_string(input.as_ref()).unwrap();
|
||||
let vec = parse_limit(html.to_str().unwrap());
|
||||
let vec = parse_jni_string(&mut env, &input, |dom, parser| {
|
||||
let iter = dom.query_selector("strong")?;
|
||||
let vec: Vec<i32> = iter.filter_map(|e| Some(e.get(parser)?.inner_text(parser).parse::<i32>().ok()?)).collect();
|
||||
if vec.len() == 3 { Some(vec) } else { None }
|
||||
}).unwrap_or(vec![-1, -1, -1]);
|
||||
let jir = env.new_int_array(3).unwrap();
|
||||
env.set_int_array_region(&jir, 0, vec.unwrap_or(vec![-1, -1, -1]).as_ref()).unwrap();
|
||||
env.set_int_array_region(&jir, 0, &vec).unwrap();
|
||||
jir.into_raw()
|
||||
}
|
||||
Reference in new issue
Block a user