Skip to content

Commit 69afcab

Browse files
0xbrayoErikBjare
authored andcommitted
feat(aw-sync): pass hostname from Android to JNI for proper sync directory structure
- Updated JNI function signatures to accept hostname parameter - Parse hostname from JString in syncPullAll, syncPush, syncBoth - Set AW_HOSTNAME environment variable before sync operations - This fixes sync directory structure to use actual device name instead of 'localhost' Hostname is passed from Android Settings.Global.DEVICE_NAME or Build.MODEL
1 parent 8cdeea6 commit 69afcab

1 file changed

Lines changed: 49 additions & 3 deletions

File tree

aw-sync/src/android.rs

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,25 @@ fn get_client(port: i32) -> Result<AwClient, String> {
2323
/// Pull sync data from all hosts in the sync directory
2424
#[no_mangle]
2525
pub extern "C" fn Java_net_activitywatch_android_SyncInterface_syncPullAll(
26-
env: JNIEnv,
26+
mut env: JNIEnv,
2727
_class: JClass,
2828
port: i32,
29+
hostname: JString,
2930
) -> jstring {
31+
let hostname_str: String = match env.get_string(&hostname) {
32+
Ok(s) => s.into(),
33+
Err(e) => {
34+
let error_msg = format!("Failed to get hostname: {}", e);
35+
error!("syncPullAll: {}", error_msg);
36+
return rust_string_to_jstring(&env, json!({
37+
"success": false,
38+
"error": error_msg
39+
}).to_string());
40+
}
41+
};
42+
// Set hostname for sync operations
43+
std::env::set_var("AW_HOSTNAME", &hostname_str);
44+
3045
let result: Result<String, String> = (|| {
3146
let client = get_client(port)?;
3247
pull_all(&client)
@@ -91,10 +106,26 @@ pub extern "C" fn Java_net_activitywatch_android_SyncInterface_syncPull(
91106
/// Push local sync data to the sync directory
92107
#[no_mangle]
93108
pub extern "C" fn Java_net_activitywatch_android_SyncInterface_syncPush(
94-
env: JNIEnv,
109+
mut env: JNIEnv,
95110
_class: JClass,
96111
port: i32,
112+
hostname: JString,
97113
) -> jstring {
114+
let hostname_str: String = match env.get_string(&hostname) {
115+
Ok(s) => s.into(),
116+
Err(e) => {
117+
let error_msg = format!("Failed to get hostname: {}", e);
118+
error!("syncPush: {}", error_msg);
119+
return rust_string_to_jstring(&env, json!({
120+
"success": false,
121+
"error": error_msg
122+
}).to_string());
123+
}
124+
};
125+
126+
// Set hostname for sync operations
127+
std::env::set_var("AW_HOSTNAME", &hostname_str);
128+
98129
let result: Result<String, String> = (|| {
99130
let client = get_client(port)?;
100131
push(&client)
@@ -122,10 +153,25 @@ pub extern "C" fn Java_net_activitywatch_android_SyncInterface_syncPush(
122153
/// Perform full sync (pull from all hosts, then push local data)
123154
#[no_mangle]
124155
pub extern "C" fn Java_net_activitywatch_android_SyncInterface_syncBoth(
125-
env: JNIEnv,
156+
mut env: JNIEnv,
126157
_class: JClass,
127158
port: i32,
159+
hostname: JString,
128160
) -> jstring {
161+
let hostname_str: String = match env.get_string(&hostname) {
162+
Ok(s) => s.into(),
163+
Err(e) => {
164+
let error_msg = format!("Failed to get hostname: {}", e);
165+
error!("syncBoth: {}", error_msg);
166+
return rust_string_to_jstring(&env, json!({
167+
"success": false,
168+
"error": error_msg
169+
}).to_string());
170+
}
171+
};
172+
// Set hostname for sync operations
173+
std::env::set_var("AW_HOSTNAME", &hostname_str);
174+
129175
let result: Result<String, String> = (|| {
130176
let client = get_client(port)?;
131177

0 commit comments

Comments
 (0)