Spilt torrent.rs
This commit is contained in:
1 parent
0a8df26549
commit
9e4fc2e7af
3 files changed
+57
-45
No files matched your search
@@ -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)]
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
mod torrent;
|
||||
@@ -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()
|
||||
}
|
||||
Reference in new issue
Block a user