Skip to content

Commit 8173d57

Browse files
fix: several android fixes (#323)
Co-authored-by: Erik Bjäreholt <[email protected]>
1 parent 9f6ec1b commit 8173d57

File tree

1 file changed

+41
-17
lines changed

1 file changed

+41
-17
lines changed

aw-server/src/android/mod.rs

+41-17
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@ pub mod android {
3636
use self::jni::sys::{jdouble, jint, jstring};
3737
use self::jni::JNIEnv;
3838
use super::*;
39+
40+
use std::path::PathBuf;
41+
use std::sync::Mutex;
42+
43+
use crate::config::AWConfig;
44+
use crate::endpoints;
45+
use crate::endpoints::ServerState;
3946
use aw_datastore::Datastore;
4047
use aw_models::{Bucket, Event};
4148

@@ -93,33 +100,49 @@ pub mod android {
93100
string_to_jstring(&env, obj.to_string())
94101
}
95102

103+
lazy_static! {
104+
static ref ASSET_PATH: Mutex<String> = Mutex::new(String::new());
105+
}
106+
96107
#[no_mangle]
97108
pub unsafe extern "C" fn Java_net_activitywatch_android_RustInterface_startServer(
98109
env: JNIEnv,
99110
_: JClass,
100111
java_asset_path: JString,
101112
) {
102-
use crate::config::AWConfig;
103-
use std::path::PathBuf;
113+
info!("Starting server...");
114+
115+
*ASSET_PATH.lock().unwrap() = jstring_to_string(&env, java_asset_path);
116+
117+
start_server();
104118

105-
use crate::endpoints;
119+
info!("Server exited");
120+
}
106121

122+
#[rocket::main]
123+
async fn start_server() {
107124
info!("Building server state...");
108125

109-
let asset_path = jstring_to_string(&env, java_asset_path);
110-
info!("Using asset dir: {}", asset_path);
126+
// FIXME: Why is unsafe needed here? Can we get rid of it?
127+
unsafe {
128+
let server_state: ServerState = endpoints::ServerState {
129+
datastore: Mutex::new(openDatastore()),
130+
asset_path: PathBuf::from(ASSET_PATH.lock().unwrap().to_owned()),
131+
device_id: device_id::get_device_id(),
132+
};
133+
info!(
134+
"Using server_state:: asset dir: {}; device_id: {}",
135+
server_state.asset_path.display(),
136+
server_state.device_id
137+
);
111138

112-
let server_state = endpoints::ServerState {
113-
datastore: Mutex::new(openDatastore()),
114-
asset_path: PathBuf::from(asset_path),
115-
device_id: device_id::get_device_id(),
116-
};
139+
let mut server_config: AWConfig = AWConfig::default();
140+
server_config.port = 5600;
117141

118-
let mut config = AWConfig::default();
119-
config.port = 5600;
120-
info!("Starting server...");
121-
endpoints::build_rocket(server_state, config).launch();
122-
info!("Server exited");
142+
endpoints::build_rocket(server_state, server_config)
143+
.launch()
144+
.await;
145+
}
123146
}
124147

125148
static mut INITIALIZED: bool = false;
@@ -157,8 +180,9 @@ pub mod android {
157180
_: JClass,
158181
java_dir: JString,
159182
) {
160-
debug!("Setting android data dir");
161-
dirs::set_android_data_dir(&jstring_to_string(&env, java_dir));
183+
let path = &jstring_to_string(&env, java_dir);
184+
debug!("Setting android data dir as {}", path);
185+
dirs::set_android_data_dir(path);
162186
}
163187

164188
#[no_mangle]

0 commit comments

Comments
 (0)