From fcfa2dc6056373fd7e04855dba8b7b530aeecd0d Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Sat, 5 Nov 2022 20:06:26 +0530 Subject: [PATCH 1/6] fix: pulling aw-android to current master - the previous android fix to rocket update was not functional - previous version rocket was async, never version needs to be awaited --- aw-server/Cargo.toml | 1 + aw-server/src/android/mod.rs | 61 +++++++++++++++++++++++++----------- 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/aw-server/Cargo.toml b/aw-server/Cargo.toml index c1f499f3..a76f51f2 100644 --- a/aw-server/Cargo.toml +++ b/aw-server/Cargo.toml @@ -46,3 +46,4 @@ jni = { version = "0.19", default-features = false } libc = "0.2" android_logger = "0.11" openssl-sys = { version = "0.9.58", features = ["vendored"]} +once_cell = "1.16.0" diff --git a/aw-server/src/android/mod.rs b/aw-server/src/android/mod.rs index 7282d0f1..85ef65b0 100644 --- a/aw-server/src/android/mod.rs +++ b/aw-server/src/android/mod.rs @@ -36,8 +36,18 @@ pub mod android { use self::jni::sys::{jdouble, jint, jstring}; use self::jni::JNIEnv; use super::*; + + use std::path::PathBuf; + use std::sync::RwLock; + use once_cell::sync::Lazy; + + use android_logger::FilterBuilder; + use log::LevelFilter; use aw_datastore::Datastore; use aw_models::{Bucket, Event}; + use crate::endpoints; + use crate::config::AWConfig; + use crate::endpoints::ServerState; static mut DATASTORE: Option = None; @@ -92,34 +102,46 @@ pub mod android { let mut obj = json!({ "error": &msg }); string_to_jstring(&env, obj.to_string()) } + + lazy_static! { + static ref ASSET_PATH: RwLock = RwLock::new(String::new()); + } #[no_mangle] pub unsafe extern "C" fn Java_net_activitywatch_android_RustInterface_startServer( env: JNIEnv, _: JClass, java_asset_path: JString, - ) { - use crate::config::AWConfig; - use std::path::PathBuf; + ) { + info!("Starting server..."); + + *ASSET_PATH.write().unwrap() = jstring_to_string(&env, java_asset_path); + + // endpoints::build_rocket(server_state, config).launch().await; + start_server(); - use crate::endpoints; + info!("Server exited"); + } - info!("Building server state..."); + #[rocket::main] + async fn start_server() + { + unsafe { + info!("Building server state..."); - let asset_path = jstring_to_string(&env, java_asset_path); - info!("Using asset dir: {}", asset_path); + let server_state: ServerState = endpoints::ServerState { + datastore: Mutex::new(openDatastore()), + asset_path: PathBuf::from(ASSET_PATH.read().unwrap().to_owned()), + device_id: device_id::get_device_id(), + }; + + info!("Using server_state:: asset dir: {}; device_id: {}", server_state.asset_path.display(), server_state.device_id); - let server_state = endpoints::ServerState { - datastore: Mutex::new(openDatastore()), - asset_path: PathBuf::from(asset_path), - device_id: device_id::get_device_id(), - }; + let mut server_config: AWConfig = AWConfig::default(); + server_config.port = 5600; - let mut config = AWConfig::default(); - config.port = 5600; - info!("Starting server..."); - endpoints::build_rocket(server_state, config).launch(); - info!("Server exited"); + endpoints::build_rocket(server_state, server_config).launch().await; + } } static mut INITIALIZED: bool = false; @@ -157,8 +179,9 @@ pub mod android { _: JClass, java_dir: JString, ) { - debug!("Setting android data dir"); - dirs::set_android_data_dir(&jstring_to_string(&env, java_dir)); + let path = &jstring_to_string(&env, java_dir); + debug!("Setting android data dir as {}", path); + dirs::set_android_data_dir(path); } #[no_mangle] From e05098a523453ba2090b13b9390b942ef0f4efd7 Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Sat, 5 Nov 2022 20:17:07 +0530 Subject: [PATCH 2/6] linting changes --- aw-server/src/android/mod.rs | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/aw-server/src/android/mod.rs b/aw-server/src/android/mod.rs index 85ef65b0..84165e9a 100644 --- a/aw-server/src/android/mod.rs +++ b/aw-server/src/android/mod.rs @@ -37,17 +37,17 @@ pub mod android { use self::jni::JNIEnv; use super::*; + use once_cell::sync::Lazy; use std::path::PathBuf; use std::sync::RwLock; - use once_cell::sync::Lazy; + use crate::config::AWConfig; + use crate::endpoints; + use crate::endpoints::ServerState; use android_logger::FilterBuilder; - use log::LevelFilter; use aw_datastore::Datastore; use aw_models::{Bucket, Event}; - use crate::endpoints; - use crate::config::AWConfig; - use crate::endpoints::ServerState; + use log::LevelFilter; static mut DATASTORE: Option = None; @@ -102,7 +102,7 @@ pub mod android { let mut obj = json!({ "error": &msg }); string_to_jstring(&env, obj.to_string()) } - + lazy_static! { static ref ASSET_PATH: RwLock = RwLock::new(String::new()); } @@ -112,9 +112,9 @@ pub mod android { env: JNIEnv, _: JClass, java_asset_path: JString, - ) { + ) { info!("Starting server..."); - + *ASSET_PATH.write().unwrap() = jstring_to_string(&env, java_asset_path); // endpoints::build_rocket(server_state, config).launch().await; @@ -124,8 +124,7 @@ pub mod android { } #[rocket::main] - async fn start_server() - { + async fn start_server() { unsafe { info!("Building server state..."); @@ -134,13 +133,19 @@ pub mod android { asset_path: PathBuf::from(ASSET_PATH.read().unwrap().to_owned()), device_id: device_id::get_device_id(), }; - - info!("Using server_state:: asset dir: {}; device_id: {}", server_state.asset_path.display(), server_state.device_id); + + info!( + "Using server_state:: asset dir: {}; device_id: {}", + server_state.asset_path.display(), + server_state.device_id + ); let mut server_config: AWConfig = AWConfig::default(); server_config.port = 5600; - endpoints::build_rocket(server_state, server_config).launch().await; + endpoints::build_rocket(server_state, server_config) + .launch() + .await; } } From 1ba9729ec549eedd320efd325c39faa72958b1a4 Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Mon, 7 Nov 2022 19:28:53 +0530 Subject: [PATCH 3/6] made more code safe --- aw-server/src/android/mod.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/aw-server/src/android/mod.rs b/aw-server/src/android/mod.rs index 84165e9a..9caefab1 100644 --- a/aw-server/src/android/mod.rs +++ b/aw-server/src/android/mod.rs @@ -125,15 +125,14 @@ pub mod android { #[rocket::main] async fn start_server() { - unsafe { - info!("Building server state..."); + info!("Building server state..."); + unsafe { let server_state: ServerState = endpoints::ServerState { datastore: Mutex::new(openDatastore()), asset_path: PathBuf::from(ASSET_PATH.read().unwrap().to_owned()), device_id: device_id::get_device_id(), }; - info!( "Using server_state:: asset dir: {}; device_id: {}", server_state.asset_path.display(), From b7adc5d3d8373742ab5ab89f95fee2df9891f47c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Bj=C3=A4reholt?= Date: Tue, 8 Nov 2022 15:13:28 +0100 Subject: [PATCH 4/6] Apply suggestions from code review --- aw-server/src/android/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/aw-server/src/android/mod.rs b/aw-server/src/android/mod.rs index 9caefab1..ad7bcf14 100644 --- a/aw-server/src/android/mod.rs +++ b/aw-server/src/android/mod.rs @@ -127,6 +127,7 @@ pub mod android { async fn start_server() { info!("Building server state..."); + // FIXME: Why is unsafe needed here? Can we get rid of it? unsafe { let server_state: ServerState = endpoints::ServerState { datastore: Mutex::new(openDatastore()), From 5728ffc866a6e6b0f332d978b674a6091390e54b Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Sun, 13 Nov 2022 18:40:55 +0530 Subject: [PATCH 5/6] fix unused imports and impl simple mutex as suggested --- aw-server/Cargo.toml | 1 - aw-server/src/android/mod.rs | 11 ++++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/aw-server/Cargo.toml b/aw-server/Cargo.toml index a76f51f2..c1f499f3 100644 --- a/aw-server/Cargo.toml +++ b/aw-server/Cargo.toml @@ -46,4 +46,3 @@ jni = { version = "0.19", default-features = false } libc = "0.2" android_logger = "0.11" openssl-sys = { version = "0.9.58", features = ["vendored"]} -once_cell = "1.16.0" diff --git a/aw-server/src/android/mod.rs b/aw-server/src/android/mod.rs index ad7bcf14..0da63daa 100644 --- a/aw-server/src/android/mod.rs +++ b/aw-server/src/android/mod.rs @@ -37,9 +37,8 @@ pub mod android { use self::jni::JNIEnv; use super::*; - use once_cell::sync::Lazy; use std::path::PathBuf; - use std::sync::RwLock; + use std::sync::Mutex; use crate::config::AWConfig; use crate::endpoints; @@ -47,7 +46,6 @@ pub mod android { use android_logger::FilterBuilder; use aw_datastore::Datastore; use aw_models::{Bucket, Event}; - use log::LevelFilter; static mut DATASTORE: Option = None; @@ -104,7 +102,7 @@ pub mod android { } lazy_static! { - static ref ASSET_PATH: RwLock = RwLock::new(String::new()); + static ref ASSET_PATH: Mutex = Mutex::new(String::new()); } #[no_mangle] @@ -115,9 +113,8 @@ pub mod android { ) { info!("Starting server..."); - *ASSET_PATH.write().unwrap() = jstring_to_string(&env, java_asset_path); + *ASSET_PATH.lock().unwrap() = jstring_to_string(&env, java_asset_path); - // endpoints::build_rocket(server_state, config).launch().await; start_server(); info!("Server exited"); @@ -131,7 +128,7 @@ pub mod android { unsafe { let server_state: ServerState = endpoints::ServerState { datastore: Mutex::new(openDatastore()), - asset_path: PathBuf::from(ASSET_PATH.read().unwrap().to_owned()), + asset_path: PathBuf::from(ASSET_PATH.lock().unwrap().to_owned()), device_id: device_id::get_device_id(), }; info!( From f4a596280fbf283a38f72027d05825ec24ffa252 Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Sun, 13 Nov 2022 18:44:14 +0530 Subject: [PATCH 6/6] Update mod.rs --- aw-server/src/android/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/aw-server/src/android/mod.rs b/aw-server/src/android/mod.rs index 0da63daa..70ad4ede 100644 --- a/aw-server/src/android/mod.rs +++ b/aw-server/src/android/mod.rs @@ -43,7 +43,6 @@ pub mod android { use crate::config::AWConfig; use crate::endpoints; use crate::endpoints::ServerState; - use android_logger::FilterBuilder; use aw_datastore::Datastore; use aw_models::{Bucket, Event};