From ba1a53c3a971e73e42e47f761de177e8e0634556 Mon Sep 17 00:00:00 2001 From: alemi Date: Sat, 21 Sep 2024 13:18:53 +0200 Subject: [PATCH] chore: draft of user_list for java but its broken --- dist/java/src/mp/code/Workspace.java | 10 ++++++++++ src/ffi/java/workspace.rs | 21 +++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/dist/java/src/mp/code/Workspace.java b/dist/java/src/mp/code/Workspace.java index 33f2de3..38cb016 100644 --- a/dist/java/src/mp/code/Workspace.java +++ b/dist/java/src/mp/code/Workspace.java @@ -69,6 +69,16 @@ public final class Workspace { return get_file_tree(this.ptr, filter.orElse(null), strict); } + private static native String[] user_list(long self); + + /** + * Get names of all users currently in this workspace + * @return an array containing user display names + */ + public String[] userList() { + return user_list(this.ptr); + } + private static native String[] active_buffers(long self); /** diff --git a/src/ffi/java/workspace.rs b/src/ffi/java/workspace.rs index 27a9702..341991c 100644 --- a/src/ffi/java/workspace.rs +++ b/src/ffi/java/workspace.rs @@ -76,6 +76,27 @@ pub extern "system" fn Java_mp_code_Workspace_get_1file_1tree( }).jexcept(&mut env).as_raw() } +/// Get the user list. +#[no_mangle] +pub extern "system" fn Java_mp_code_Workspace_user_1list( + mut env: JNIEnv, + _class: JClass, + self_ptr: jlong, +) -> jobjectArray { + let workspace = unsafe { Box::leak(Box::from_raw(self_ptr as *mut Workspace)) }; + + let user_list = workspace.user_list(); + env.find_class("java/lang/String") + .and_then(|class| env.new_object_array(user_list.len() as i32, class, JObject::null())) + .inspect(|arr| { + for (idx, path) in user_list.iter().enumerate() { + env.new_string(path) + .and_then(|path| env.set_object_array_element(arr, idx as i32, path)) + .jexcept(&mut env) + } + }).jexcept(&mut env).as_raw() +} + /// Gets a list of the active buffers. #[no_mangle] pub extern "system" fn Java_mp_code_Workspace_active_1buffers(