From 8c10836e6e3f6ccd53428fa0b16dbd7a27fbc911 Mon Sep 17 00:00:00 2001 From: tarsin Date: Fri, 28 Jul 2023 12:30:43 +0800 Subject: [PATCH] Cleanup TorrentParser --- .../ehviewer/client/parser/TorrentParser.kt | 12 +++--- .../ehviewer/ui/scene/GalleryDetailScene.kt | 1 + app/src/main/rust/src/parser/list.rs | 21 +++++------ app/src/main/rust/src/parser/torrent.rs | 37 +++++++------------ 4 files changed, 29 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/TorrentParser.kt b/app/src/main/java/com/hippo/ehviewer/client/parser/TorrentParser.kt index 4f80277f6..03d3b9c25 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/TorrentParser.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/TorrentParser.kt @@ -12,12 +12,10 @@ class Torrent( val downloads: Int, val url: String, val name: String, -) { - fun format() = "[$posted] $name [$size] [↑$seeds ↓$peers ✓$downloads]" -} +) -class TorrentResult( - val list: ArrayList, -) : List by list +fun Torrent.format() = "[$posted] $name [$size] [↑$seeds ↓$peers ✓$downloads]" -private external fun parseTorrent(body: String): TorrentResult +typealias TorrentResult = ArrayList + +private external fun parseTorrent(body: String): ArrayList diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt index e98314cb3..b6b7bf8ef 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt @@ -125,6 +125,7 @@ import com.hippo.ehviewer.client.exception.NoHAtHClientException import com.hippo.ehviewer.client.parser.ArchiveParser import com.hippo.ehviewer.client.parser.HomeParser import com.hippo.ehviewer.client.parser.TorrentResult +import com.hippo.ehviewer.client.parser.format import com.hippo.ehviewer.coil.justDownload import com.hippo.ehviewer.dao.DownloadInfo import com.hippo.ehviewer.dao.Filter diff --git a/app/src/main/rust/src/parser/list.rs b/app/src/main/rust/src/parser/list.rs index fc0b297c2..4441f781d 100644 --- a/app/src/main/rust/src/parser/list.rs +++ b/app/src/main/rust/src/parser/list.rs @@ -57,8 +57,7 @@ fn to_category_i32(category: &str) -> i32 { } fn parse_rating(str: &str) -> f32 { - let reg = regex!("\\d+px"); - let mut iter = reg.find_iter(str); + let mut iter = regex!("\\d+px").find_iter(str); let mut next = || iter.next()?.as_str().replace("px", "").parse::().ok(); match (next(), next()) { (Some(num1), Some(num2)) => { @@ -81,20 +80,19 @@ fn get_thumb_key(url: &str) -> String { } fn parse_token_and_gid(str: &str) -> Option<(i64, String)> { - let reg = - regex!("https?://(?:exhentai.org|e-hentai.org(?:/lofi)?)/(?:g|mpv)/(\\d+)/([0-9a-f]{10})"); - let grp = reg.captures(str)?; + let grp = + regex!("https?://(?:exhentai.org|e-hentai.org(?:/lofi)?)/(?:g|mpv)/(\\d+)/([0-9a-f]{10})") + .captures(str)?; let token = &grp[2]; let gid = grp[1].parse().ok()?; Some((gid, token.to_string())) } fn parse_uploader_and_pages(str: &str) -> (Option, bool, i32) { - let reg_uploader = - regex!(r#""#); - let reg_pages = regex!(r"
(\d+) pages
"); - let uploader = reg_uploader.captures(str).map(|grp| grp[1].to_string()); - let pages = match reg_pages.captures(str) { + let uploader = regex!(r#""#) + .captures(str) + .map(|grp| grp[1].to_string()); + let pages = match regex!(r"
(\d+) pages
").captures(str) { None => 0, Some(grp) => grp[1].parse().unwrap(), }; @@ -102,8 +100,7 @@ fn parse_uploader_and_pages(str: &str) -> (Option, bool, i32) { } fn parse_thumb_resolution(str: &str) -> (i32, i32) { - let reg = regex!(r"height:(\d+)px;width:(\d+)px"); - match reg.captures(str) { + match regex!(r"height:(\d+)px;width:(\d+)px").captures(str) { None => (0, 0), Some(grp) => (grp[1].parse().unwrap(), grp[2].parse().unwrap()), } diff --git a/app/src/main/rust/src/parser/torrent.rs b/app/src/main/rust/src/parser/torrent.rs index 7503fc263..b7885be00 100644 --- a/app/src/main/rust/src/parser/torrent.rs +++ b/app/src/main/rust/src/parser/torrent.rs @@ -20,12 +20,6 @@ pub struct Torrent { name: String, } -#[derive(Default, IntoJava)] -#[jnix(package = "com.hippo.ehviewer.client.parser")] -pub struct TorrentResult { - list: Vec, -} - #[no_mangle] #[catch_panic(default = "std::ptr::null_mut()")] #[allow(non_snake_case)] @@ -33,22 +27,19 @@ pub struct TorrentResult { 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!(" ([0-9-]+) [0-9:]+[\\s\\S]+ ([0-9.]+ [KMGT]B)[\\s\\S]+ ([0-9]+)[\\s\\S]+ ([0-9]+)[\\s\\S]+ ([0-9]+)[\\s\\S]+([^<]+)[\\s\\S]+onclick=\"document.location='([^\"]+)'[^<]+>([^<]+)"); - 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() - }) + Some(dom.query_selector("table")?.filter_map(|e| { + let html = e.get(parser)?.inner_html(parser); + let grp = regex!(" ([0-9-]+) [0-9:]+[\\s\\S]+ ([0-9.]+ [KMGT]B)[\\s\\S]+ ([0-9]+)[\\s\\S]+ ([0-9]+)[\\s\\S]+ ([0-9]+)[\\s\\S]+([^<]+)[\\s\\S]+onclick=\"document.location='([^\"]+)'[^<]+>([^<]+)").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() }