Spilt torrent.rs

This commit is contained in:
tarsin committed 2023-06-16 00:16:58 +08:00
1 parent 0a8df26549
commit 9e4fc2e7af
3 files changed
+57 -45

No files matched your search

+3 -45
View File
@@ -1,3 +1,5 @@
mod parser;
extern crate android_logger;
extern crate apply;
extern crate catch_panic;
@@ -24,6 +26,7 @@ use quick_xml::escape::unescape;
use std::ffi::c_void;
use tl::{Node, Parser, VDom};
#[macro_export]
macro_rules! regex {
($re:literal $(,)?) => {{
static RE: once_cell::sync::OnceCell<regex::Regex> = once_cell::sync::OnceCell::new();
@@ -45,18 +48,6 @@ impl<'a> Anon for VDom<'a> {
}
}
#[derive(Default, IntoJava)]
#[jnix(package = "com.hippo.ehviewer.client.parser")]
pub struct Torrent {
posted: String,
size: String,
seeds: i32,
peers: i32,
downloads: i32,
url: String,
name: String,
}
#[derive(Default, IntoJava)]
#[allow(non_snake_case)]
#[jnix(package = "com.hippo.ehviewer.client.data")]
@@ -84,12 +75,6 @@ pub struct BaseGalleryInfo {
favoriteName: Option<String>,
}
#[derive(Default, IntoJava)]
#[jnix(package = "com.hippo.ehviewer.client.parser")]
pub struct TorrentResult {
list: Vec<Torrent>,
}
#[derive(Default, IntoJava)]
#[allow(non_snake_case)]
#[jnix(package = "com.hippo.ehviewer.client.parser")]
@@ -175,33 +160,6 @@ pub fn parseFav(env: JNIEnv, _class: JClass, input: JString, str: jobjectArray)
.also(|it| env.set_int_array_region(*it, 0, &vec).unwrap())
}
#[no_mangle]
#[catch_panic(default = "std::ptr::null_mut()")]
#[allow(non_snake_case)]
#[jni_fn("com.hippo.ehviewer.client.parser.TorrentParserKt")]
pub fn parseTorrent(env: JNIEnv, _class: JClass, input: JString) -> jobject {
let mut env = JnixEnv { env };
parse_jni_string(&mut env, &input, |dom, parser, _env| {
Some(TorrentResult {
list: dom.query_selector("table")?.filter_map(|e| {
let html = e.get(parser)?.inner_html(parser);
let reg = regex!("</span> ([0-9-]+) [0-9:]+</td>[\\s\\S]+</span> ([0-9.]+ [KMGT]B)</td>[\\s\\S]+</span> ([0-9]+)</td>[\\s\\S]+</span> ([0-9]+)</td>[\\s\\S]+</span> ([0-9]+)</td>[\\s\\S]+</span>([^<]+)</td>[\\s\\S]+onclick=\"document.location='([^\"]+)'[^<]+>([^<]+)</a>");
let grp = reg.captures(&html)?;
let name = unescape(&grp[8]).ok()?;
Some(Torrent {
posted: grp[1].to_string(),
size: grp[2].to_string(),
seeds: grp[3].parse().ok()?,
peers: grp[4].parse().ok()?,
downloads: grp[5].parse().ok()?,
url: grp[7].to_string(),
name: name.to_string()
})
}).collect()
})
}).unwrap().into_java(&env).forget().into_raw()
}
#[no_mangle]
#[catch_panic(default = "std::ptr::null_mut()")]
#[allow(non_snake_case)]
+1
View File
@@ -0,0 +1 @@
mod torrent;
+53
View File
@@ -0,0 +1,53 @@
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 quick_xml::escape::unescape;
use {parse_jni_string, regex};
#[derive(Default, IntoJava)]
#[jnix(package = "com.hippo.ehviewer.client.parser")]
pub struct Torrent {
posted: String,
size: String,
seeds: i32,
peers: i32,
downloads: i32,
url: String,
name: String,
}
#[derive(Default, IntoJava)]
#[jnix(package = "com.hippo.ehviewer.client.parser")]
pub struct TorrentResult {
list: Vec<Torrent>,
}
#[no_mangle]
#[catch_panic(default = "std::ptr::null_mut()")]
#[allow(non_snake_case)]
#[jni_fn("com.hippo.ehviewer.client.parser.TorrentParserKt")]
pub fn parseTorrent(env: JNIEnv, _class: JClass, input: JString) -> jobject {
let mut env = JnixEnv { env };
parse_jni_string(&mut env, &input, |dom, parser, _env| {
Some(TorrentResult {
list: dom.query_selector("table")?.filter_map(|e| {
let html = e.get(parser)?.inner_html(parser);
let reg = regex!("</span> ([0-9-]+) [0-9:]+</td>[\\s\\S]+</span> ([0-9.]+ [KMGT]B)</td>[\\s\\S]+</span> ([0-9]+)</td>[\\s\\S]+</span> ([0-9]+)</td>[\\s\\S]+</span> ([0-9]+)</td>[\\s\\S]+</span>([^<]+)</td>[\\s\\S]+onclick=\"document.location='([^\"]+)'[^<]+>([^<]+)</a>");
let grp = reg.captures(&html)?;
let name = unescape(&grp[8]).ok()?;
Some(Torrent {
posted: grp[1].to_string(),
size: grp[2].to_string(),
seeds: grp[3].parse().ok()?,
peers: grp[4].parse().ok()?,
downloads: grp[5].parse().ok()?,
url: grp[7].to_string(),
name: name.to_string()
})
}).collect()
})
}).unwrap().into_java(&env).forget().into_raw()
}