From 4440763f448d3539c59b91598abdc1fdc153f626 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Wed, 11 Jun 2025 10:42:45 +0800 Subject: [PATCH] Rust 2024 --- app/src/main/rust/Cargo.toml | 2 +- app/src/main/rust/src/ffi/android.rs | 8 +++---- app/src/main/rust/src/ffi/android_o.rs | 4 ++-- app/src/main/rust/src/ffi/jvm.rs | 31 +++++++++++++------------ app/src/main/rust/src/parser/archive.rs | 4 ++-- app/src/main/rust/src/parser/detail.rs | 8 +++---- app/src/main/rust/src/parser/fav.rs | 4 ++-- app/src/main/rust/src/parser/list.rs | 4 ++-- app/src/main/rust/src/parser/profile.rs | 2 +- 9 files changed, 34 insertions(+), 33 deletions(-) diff --git a/app/src/main/rust/Cargo.toml b/app/src/main/rust/Cargo.toml index 5a3cf8052..4e576dd86 100644 --- a/app/src/main/rust/Cargo.toml +++ b/app/src/main/rust/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "ehviewer_rust" version = "0.0.0" -edition = "2021" +edition = "2024" [lib] crate-type = ["cdylib"] diff --git a/app/src/main/rust/src/ffi/android.rs b/app/src/main/rust/src/ffi/android.rs index 93beb04c5..fbdf78e20 100644 --- a/app/src/main/rust/src/ffi/android.rs +++ b/app/src/main/rust/src/ffi/android.rs @@ -4,17 +4,17 @@ use super::jvm::jni_throwing; use crate::img::border::DetectBorder; use crate::img::core::{CustomPixel, ImageConsumer, Rgb565, Rgba8888, RgbaF16}; use crate::img::qr_code::QrCode; -use anyhow::{anyhow, Ok, Result}; +use anyhow::{Ok, Result, anyhow}; use image::ImageBuffer; +use jni::JNIEnv; use jni::objects::JClass; use jni::sys::jboolean; use jni::sys::{jintArray, jobject}; -use jni::JNIEnv; use jni_fn::jni_fn; use ndk::bitmap::{Bitmap, BitmapFormat}; use std::ptr::slice_from_raw_parts; -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.image.ImageKt")] pub fn detectBorder(mut env: JNIEnv, _class: JClass, object: jobject) -> jintArray { @@ -26,7 +26,7 @@ pub fn detectBorder(mut env: JNIEnv, _class: JClass, object: jobject) -> jintArr }) } -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.image.ImageKt")] pub fn hasQrCode(mut env: JNIEnv, _class: JClass, object: jobject) -> jboolean { diff --git a/app/src/main/rust/src/ffi/android_o.rs b/app/src/main/rust/src/ffi/android_o.rs index 4eb492db3..d67f8d632 100644 --- a/app/src/main/rust/src/ffi/android_o.rs +++ b/app/src/main/rust/src/ffi/android_o.rs @@ -3,13 +3,13 @@ use super::android::use_bitmap_content; use super::jvm::jni_throwing; use crate::img::copy_region::CopyRegion; +use jni::JNIEnv; use jni::objects::JClass; use jni::sys::{jint, jobject}; -use jni::JNIEnv; use jni_fn::jni_fn; use ndk::hardware_buffer::{HardwareBuffer, HardwareBufferUsage}; -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.image.ImageKt")] pub fn copyBitmapToAHB(mut env: JNIEnv, _: JClass, bm: jobject, ahb: jobject, x: jint, y: jint) { diff --git a/app/src/main/rust/src/ffi/jvm.rs b/app/src/main/rust/src/ffi/jvm.rs index ae012919f..a6f89089d 100644 --- a/app/src/main/rust/src/ffi/jvm.rs +++ b/app/src/main/rust/src/ffi/jvm.rs @@ -1,5 +1,6 @@ #![cfg(feature = "jvm")] +use crate::EhError; use crate::parser::archive::{parse_archive_url, parse_archives, parse_archives_with_funds}; use crate::parser::config::parse_fav_cat; use crate::parser::detail::{parse_event_pane, parse_gallery_detail}; @@ -8,11 +9,10 @@ use crate::parser::home::parse_limit; use crate::parser::list::parse_info_list; use crate::parser::profile::{parse_profile, parse_profile_url}; use crate::parser::torrent::parse_torrent_list; -use crate::EhError; use android_logger::Config; -use anyhow::{ensure, Context, Result}; +use anyhow::{Context, Result, ensure}; use jni::objects::{JByteBuffer, JClass}; -use jni::sys::{jboolean, jint, jobject, JNI_TRUE, JNI_VERSION_1_6}; +use jni::sys::{JNI_TRUE, JNI_VERSION_1_6, jboolean, jint, jobject}; use jni::{JNIEnv, JavaVM}; use jni_fn::jni_fn; use log::LevelFilter; @@ -23,7 +23,7 @@ use std::ptr::slice_from_raw_parts_mut; use std::str::from_utf8_unchecked; use tl::{ParserOptions, VDom}; -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.client.parser.FavoritesParserKt")] pub fn parseFav(mut env: JNIEnv, _class: JClass, input: JByteBuffer, limit: jint) -> jint { @@ -32,7 +32,7 @@ pub fn parseFav(mut env: JNIEnv, _class: JClass, input: JByteBuffer, limit: jint }) } -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.client.parser.HomeParserKt")] pub fn parseLimit(mut env: JNIEnv, _class: JClass, input: JByteBuffer, limit: jint) -> jint { @@ -41,7 +41,7 @@ pub fn parseLimit(mut env: JNIEnv, _class: JClass, input: JByteBuffer, limit: ji }) } -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.client.parser.GalleryListParserKt")] pub fn parseGalleryInfoList(mut env: JNIEnv, _: JClass, buffer: JByteBuffer, limit: jint) -> jint { @@ -50,7 +50,7 @@ pub fn parseGalleryInfoList(mut env: JNIEnv, _: JClass, buffer: JByteBuffer, lim }) } -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.client.parser.GalleryDetailParser")] pub fn parseGalleryDetail(mut env: JNIEnv, _: JClass, buffer: JByteBuffer, limit: jint) -> jint { @@ -60,7 +60,7 @@ pub fn parseGalleryDetail(mut env: JNIEnv, _: JClass, buffer: JByteBuffer, limit }) } -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.client.parser.EventPaneParser")] pub fn parseEventPane(mut env: JNIEnv, _class: JClass, input: JByteBuffer, limit: jint) -> jint { @@ -69,7 +69,7 @@ pub fn parseEventPane(mut env: JNIEnv, _class: JClass, input: JByteBuffer, limit }) } -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.client.parser.TorrentParserKt")] pub fn parseTorrent(mut env: JNIEnv, _class: JClass, buffer: JByteBuffer, limit: jint) -> jint { @@ -78,14 +78,14 @@ pub fn parseTorrent(mut env: JNIEnv, _class: JClass, buffer: JByteBuffer, limit: }) } -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.client.parser.UserConfigParser")] pub fn parseFavCat(mut env: JNIEnv, _class: JClass, buffer: JByteBuffer, limit: jint) -> jint { parse_marshal_inplace(&mut env, buffer, limit, |_, body| Ok(parse_fav_cat(body))) } -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.client.parser.ArchiveParserKt")] pub fn parseArchives( @@ -106,7 +106,7 @@ pub fn parseArchives( } } -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.client.parser.ArchiveParserKt")] pub fn parseArchiveUrl(mut env: JNIEnv, _class: JClass, buffer: JByteBuffer, limit: jint) -> jint { @@ -115,7 +115,7 @@ pub fn parseArchiveUrl(mut env: JNIEnv, _class: JClass, buffer: JByteBuffer, lim }) } -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.client.parser.ProfileParser")] pub fn parseProfileUrl(mut env: JNIEnv, _class: JClass, buffer: JByteBuffer, limit: jint) -> jint { @@ -124,7 +124,7 @@ pub fn parseProfileUrl(mut env: JNIEnv, _class: JClass, buffer: JByteBuffer, lim }) } -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] #[jni_fn("com.hippo.ehviewer.client.parser.ProfileParser")] pub fn parseProfile(mut env: JNIEnv, _class: JClass, buffer: JByteBuffer, limit: jint) -> jint { @@ -221,7 +221,8 @@ where }) } -#[no_mangle] +#[unsafe(no_mangle)] +#[allow(non_snake_case)] pub extern "system" fn JNI_OnLoad(_: JavaVM, _: *mut c_void) -> jint { android_logger::init_once(Config::default().with_max_level(LevelFilter::Debug)); JNI_VERSION_1_6 diff --git a/app/src/main/rust/src/parser/archive.rs b/app/src/main/rust/src/parser/archive.rs index 2b9ffa2ee..c56aeba64 100644 --- a/app/src/main/rust/src/parser/archive.rs +++ b/app/src/main/rust/src/parser/archive.rs @@ -1,6 +1,6 @@ use crate::parser::utils::parse_int_lenient; -use crate::{get_tag_attr, regex, select_first, EhError}; -use anyhow::{bail, Context, Result}; +use crate::{EhError, get_tag_attr, regex, select_first}; +use anyhow::{Context, Result, bail}; use serde::Serialize; use tl::{Parser, VDom}; diff --git a/app/src/main/rust/src/parser/detail.rs b/app/src/main/rust/src/parser/detail.rs index dc72f085e..aba8e3d89 100644 --- a/app/src/main/rust/src/parser/detail.rs +++ b/app/src/main/rust/src/parser/detail.rs @@ -1,7 +1,7 @@ -use crate::parser::list::{get_thumb_key, parse_token_and_gid, to_category_i32, BaseGalleryInfo}; -use crate::{get_first_child, get_first_element_by_class_name, get_node_handle_attr, get_tag_attr}; -use crate::{get_vdom_first_element_by_class_name, regex, EhError}; -use anyhow::{bail, Context, Result}; +use crate::parser::list::{BaseGalleryInfo, get_thumb_key, parse_token_and_gid, to_category_i32}; +use crate::{EhError, get_first_child, get_first_element_by_class_name, get_node_handle_attr}; +use crate::{get_tag_attr, get_vdom_first_element_by_class_name, regex}; +use anyhow::{Context, Result, bail}; use chrono::naive::NaiveDateTime; use quick_xml::escape::unescape; use serde::Serialize; diff --git a/app/src/main/rust/src/parser/fav.rs b/app/src/main/rust/src/parser/fav.rs index 1ff4981ed..f79a2c929 100644 --- a/app/src/main/rust/src/parser/fav.rs +++ b/app/src/main/rust/src/parser/fav.rs @@ -1,6 +1,6 @@ -use crate::parser::list::{parse_info_list, GalleryListResult}; use crate::EhError; -use anyhow::{bail, Result}; +use crate::parser::list::{GalleryListResult, parse_info_list}; +use anyhow::{Result, bail}; use quick_xml::escape::unescape; use serde::Serialize; use tl::Parser; diff --git a/app/src/main/rust/src/parser/list.rs b/app/src/main/rust/src/parser/list.rs index e8c4d3ff9..06595d6f6 100644 --- a/app/src/main/rust/src/parser/list.rs +++ b/app/src/main/rust/src/parser/list.rs @@ -1,9 +1,9 @@ use crate::EhError; +use crate::{EHGT_PREFIX, EX_PREFIX}; use crate::{get_element_by_id, get_vdom_first_element_by_class_name}; use crate::{get_first_element_by_class_name, query_childs_first_match_attr}; use crate::{get_node_attr, get_node_handle_attr, regex}; -use crate::{EHGT_PREFIX, EX_PREFIX}; -use anyhow::{bail, Context, Result}; +use anyhow::{Context, Result, bail}; use quick_xml::escape::unescape; use serde::Serialize; use std::borrow::Cow; diff --git a/app/src/main/rust/src/parser/profile.rs b/app/src/main/rust/src/parser/profile.rs index 98cdb1550..6410332f7 100644 --- a/app/src/main/rust/src/parser/profile.rs +++ b/app/src/main/rust/src/parser/profile.rs @@ -1,4 +1,4 @@ -use crate::{get_node_handle_attr, get_tag_attr, select_first, EhError}; +use crate::{EhError, get_node_handle_attr, get_tag_attr, select_first}; use anyhow::{Context, Result}; use serde::Serialize; use tl::{Parser, VDom};