mirror of
https://git.ethanthesleepy.one/ethanaobrien/ew
synced 2026-07-12 00:32:20 +08:00
Add ability to pass JSON args to backend
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
use jni::JNIEnv;
|
||||
use jni::objects::{JClass};
|
||||
use jni::sys::{jstring, jboolean};
|
||||
use jni::sys::jstring;
|
||||
use std::thread;
|
||||
use std::sync::Once;
|
||||
use jni::objects::JString;
|
||||
@@ -43,14 +43,12 @@ fn android_init() {
|
||||
extern "C" fn Java_one_ethanthesleepy_androidew_BackgroundService_startServer<'local>(
|
||||
mut env: JNIEnv<'local>,
|
||||
_class: JClass<'local>,
|
||||
data_path: JString<'local>,
|
||||
easter: jboolean
|
||||
config: JString<'local>,
|
||||
) -> jstring {
|
||||
android_init();
|
||||
crate::runtime::set_easter_mode(easter != 0);
|
||||
|
||||
let data_path: String = env.get_string(&data_path).unwrap().into();
|
||||
crate::runtime::update_data_path(&data_path);
|
||||
let config: String = env.get_string(&config).unwrap().into();
|
||||
crate::runtime::apply_config_json(&config);
|
||||
|
||||
let output = env.new_string(String::from("Azunyannnn~")).unwrap();
|
||||
thread::spawn(|| {
|
||||
@@ -70,7 +68,12 @@ extern "C" fn Java_one_ethanthesleepy_androidew_BackgroundService_stopServer<'lo
|
||||
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
extern "C" fn Java_one_ethanthesleepy_androidew_BackgroundService_setEasterMode<'local>(_env: JNIEnv<'local>, _class: JClass<'local>, easter: jboolean) {
|
||||
extern "C" fn Java_one_ethanthesleepy_androidew_BackgroundService_updateConfig<'local>(
|
||||
mut env: JNIEnv<'local>,
|
||||
_class: JClass<'local>,
|
||||
config: JString<'local>,
|
||||
) {
|
||||
android_init();
|
||||
crate::runtime::set_easter_mode(easter != 0);
|
||||
let config: String = env.get_string(&config).unwrap().into();
|
||||
crate::runtime::apply_config_json(&config);
|
||||
}
|
||||
|
||||
@@ -76,5 +76,7 @@ pub struct Args {
|
||||
}
|
||||
|
||||
pub fn get_args() -> Args {
|
||||
Args::parse()
|
||||
let mut args = Args::parse();
|
||||
crate::runtime::overlay_args(&mut args);
|
||||
args
|
||||
}
|
||||
|
||||
@@ -11,6 +11,18 @@ lazy_static! {
|
||||
static ref MASTERDATA_WARNED: Mutex<HashSet<String>> = Mutex::new(HashSet::new());
|
||||
static ref MOD_PATHS: RwLock<Vec<String>> = RwLock::new(Vec::new());
|
||||
static ref EASTER: RwLock<bool> = RwLock::new(false);
|
||||
static ref HOST_CONFIG: RwLock<HostConfig> = RwLock::new(HostConfig::default());
|
||||
}
|
||||
|
||||
// This is used by an embedding app in lib mode
|
||||
#[derive(Default, Clone)]
|
||||
pub struct HostConfig {
|
||||
pub assets_url: String,
|
||||
pub npps4: String,
|
||||
pub max_time: u64,
|
||||
pub port: u16,
|
||||
pub jp_android_asset_hash: String,
|
||||
pub en_android_asset_hash: String,
|
||||
}
|
||||
|
||||
pub fn set_running(running: bool) {
|
||||
@@ -116,3 +128,50 @@ pub fn read_mod_files(rel_path: &str) -> Vec<(String, Vec<u8>)> {
|
||||
}
|
||||
out
|
||||
}
|
||||
|
||||
pub fn apply_config_json(json: &str) {
|
||||
let parsed = match jzon::parse(json) {
|
||||
Ok(p) => p,
|
||||
Err(e) => {
|
||||
println!("Ignoring invalid host config json: {}", e);
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
if let Some(v) = parsed["dataPath"].as_str() {
|
||||
if !v.is_empty() {
|
||||
update_data_path(v);
|
||||
}
|
||||
}
|
||||
set_easter_mode(parsed["easterMode"].as_bool().unwrap_or(false));
|
||||
|
||||
let s = |key: &str| parsed[key].as_str().unwrap_or("").to_string();
|
||||
let mut cfg = HOST_CONFIG.write().unwrap();
|
||||
cfg.assets_url = s("assetsUrl");
|
||||
cfg.npps4 = s("npps4");
|
||||
cfg.max_time = parsed["maxTime"].as_u64().unwrap_or(0);
|
||||
cfg.port = parsed["port"].as_u64().unwrap_or(0) as u16;
|
||||
cfg.jp_android_asset_hash = s("jpAndroidAssetHash");
|
||||
cfg.en_android_asset_hash = s("enAndroidAssetHash");
|
||||
}
|
||||
|
||||
pub fn overlay_args(args: &mut crate::options::Args) {
|
||||
let cfg = HOST_CONFIG.read().unwrap();
|
||||
macro_rules! overlay_str {
|
||||
($field:ident) => {
|
||||
if !cfg.$field.is_empty() {
|
||||
args.$field = cfg.$field.clone();
|
||||
}
|
||||
};
|
||||
}
|
||||
overlay_str!(assets_url);
|
||||
overlay_str!(npps4);
|
||||
if cfg.max_time != 0 {
|
||||
args.max_time = cfg.max_time;
|
||||
}
|
||||
if cfg.port != 0 {
|
||||
args.port = cfg.port;
|
||||
}
|
||||
overlay_str!(jp_android_asset_hash);
|
||||
overlay_str!(en_android_asset_hash);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user