diff --git a/src/ffi/java/workspace.rs b/src/ffi/java/workspace.rs index 3599f69..2a5bce5 100644 --- a/src/ffi/java/workspace.rs +++ b/src/ffi/java/workspace.rs @@ -54,7 +54,114 @@ pub extern "system" fn Java_mp_code_Workspace_create_1buffer<'local>( self_ptr: jlong, input: JString<'local> ) { - let ws: Box = unsafe { Box::from_raw(self_ptr as *mut Workspace) }; + let ws = unsafe { Box::leak(Box::from_raw(self_ptr as *mut Workspace)) }; let path = unsafe { env.get_string_unchecked(&input).expect("Couldn't get java string!") }; RT.block_on(ws.create(path.to_str().expect("Not UTF-8"))).jexcept(&mut env); } + +/* + * Class: mp_code_Workspace + * Method: get_file_tree + * Signature: (J)V + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_Workspace_get_1file_1tree<'local>( + mut env: JNIEnv, + _class: JClass<'local>, + self_ptr: jlong, +) { + let workspace = unsafe { Box::leak(Box::from_raw(self_ptr as *mut Workspace)) }; + let file_tree = workspace.filetree(); + todo!() // how to return Vec ? []String ? +} + +/* + * Class: mp_code_Workspace + * Method: attach_to_buffer + * Signature: (J)J + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_Workspace_attach_1to_1buffer<'local>( + mut env: JNIEnv, + _class: JClass<'local>, + _self_ptr: jlong, +) -> jlong { + todo!() +} + +/* + * Class: mp_code_Workspace + * Method: fetch_buffers + * Signature: (J)V + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_Workspace_fetch_1buffers<'local>( + mut env: JNIEnv, + _class: JClass<'local>, + self_ptr: jlong, +) { + let workspace = unsafe { Box::leak(Box::from_raw(self_ptr as *mut Workspace)) }; + RT.block_on(workspace.fetch_buffers()).jexcept(&mut env); +} + +/* + * Class: mp_code_Workspace + * Method: fetch_users + * Signature: (J)V + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_Workspace_fetch_1users<'local>( + mut env: JNIEnv, + _class: JClass<'local>, + self_ptr: jlong, +) { + let workspace = unsafe { Box::leak(Box::from_raw(self_ptr as *mut Workspace)) }; + RT.block_on(workspace.fetch_users()).jexcept(&mut env); +} + +/* + * Class: mp_code_Workspace + * Method: list_buffer_users + * Signature: (JLjava/lang/String;)V + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_Workspace_list_1buffer_1users<'local>( + mut env: JNIEnv, + _class: JClass<'local>, + self_ptr: jlong, + input: JString<'local>, +) { + let workspace = unsafe { Box::leak(Box::from_raw(self_ptr as *mut Workspace)) }; + let buffer : String = unsafe { + env.get_string_unchecked(&input) + .expect("Couldn't get java string!") + .into() + }; + let users = RT.block_on(workspace.list_buffer_users(&buffer)) + .jexcept(&mut env) + .into_iter() + .map(|x| x.id.to_string()) + .collect::>(); + todo!() // how to return Vec? +} + +/* + * Class: mp_code_Workspace + * Method: delete_buffer + * Signature: (JLjava/lang/String;)V + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_Workspace_delete_1buffer<'local>( + mut env: JNIEnv, + _class: JClass<'local>, + self_ptr: jlong, + input: JString<'local>, +) { + let buffer : String = unsafe { + env.get_string_unchecked(&input) + .expect("Couldn't get java string!") + .into() + }; + let workspace = unsafe { Box::leak(Box::from_raw(self_ptr as *mut Workspace)) }; + RT.block_on(workspace.delete(&buffer)).jexcept(&mut env); +}