Cleanup TorrentParser
This commit is contained in:
1 parent
69bba560f0
commit
8c10836e6e
4 files changed
+29
-42
No files matched your search
@@ -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<Torrent>,
|
||||
) : List<Torrent> by list
|
||||
fun Torrent.format() = "[$posted] $name [$size] [↑$seeds ↓$peers ✓$downloads]"
|
||||
|
||||
private external fun parseTorrent(body: String): TorrentResult
|
||||
typealias TorrentResult = ArrayList<Torrent>
|
||||
|
||||
private external fun parseTorrent(body: String): ArrayList<Torrent>
|
||||
@@ -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
|
||||
|
||||
@@ -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::<i32>().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<String>, bool, i32) {
|
||||
let reg_uploader =
|
||||
regex!(r#"<div><a href="https://e[x-]hentai.org/uploader/.*?">(.*?)</a></div>"#);
|
||||
let reg_pages = regex!(r"<div>(\d+) pages</div>");
|
||||
let uploader = reg_uploader.captures(str).map(|grp| grp[1].to_string());
|
||||
let pages = match reg_pages.captures(str) {
|
||||
let uploader = regex!(r#"<div><a href="https://e[x-]hentai.org/uploader/.*?">(.*?)</a></div>"#)
|
||||
.captures(str)
|
||||
.map(|grp| grp[1].to_string());
|
||||
let pages = match regex!(r"<div>(\d+) pages</div>").captures(str) {
|
||||
None => 0,
|
||||
Some(grp) => grp[1].parse().unwrap(),
|
||||
};
|
||||
@@ -102,8 +100,7 @@ fn parse_uploader_and_pages(str: &str) -> (Option<String>, 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()),
|
||||
}
|
||||
|
||||
@@ -20,12 +20,6 @@ pub struct Torrent {
|
||||
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)]
|
||||
@@ -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!("</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()
|
||||
})
|
||||
Some(dom.query_selector("table")?.filter_map(|e| {
|
||||
let html = e.get(parser)?.inner_html(parser);
|
||||
let grp = 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>").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::<Vec<Torrent>>())
|
||||
}).unwrap().into_java(&env).forget().into_raw()
|
||||
}
|
||||
Reference in new issue
Block a user