117 lines
2.9 KiB
Rust
117 lines
2.9 KiB
Rust
#[macro_use]
|
|
extern crate tracing;
|
|
|
|
use discord_rpc_client::java::*;
|
|
|
|
use jni::objects::{JClass, JObject, JString};
|
|
use jni::JNIEnv;
|
|
|
|
// can't just put these in src/java.rs and re-export because of some tree-shaking that the compiler does.
|
|
|
|
#[no_mangle]
|
|
pub extern "system" fn Java_com_discord_rpc_DiscordRPC_create<'a>(
|
|
env: JNIEnv<'a>,
|
|
class: JClass,
|
|
) -> JObject<'a> {
|
|
let _ = tracing_subscriber::fmt::try_init();
|
|
|
|
match jni_create(env, class) {
|
|
Ok(obj) => obj,
|
|
Err(e) => {
|
|
error!(
|
|
concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"),
|
|
e
|
|
);
|
|
JObject::null()
|
|
}
|
|
}
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "system" fn Java_com_discord_rpc_DiscordRPC_connect(
|
|
env: JNIEnv,
|
|
obj: JObject,
|
|
client_id: JString,
|
|
) -> bool {
|
|
match jni_connect(env, obj, client_id) {
|
|
Ok(_) => true,
|
|
Err(e) => {
|
|
match e.downcast::<std::io::Error>() {
|
|
Ok(e) => {
|
|
if e.kind() == std::io::ErrorKind::NotFound {
|
|
debug!(
|
|
concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"),
|
|
e
|
|
);
|
|
return false;
|
|
} else {
|
|
error!(
|
|
concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"),
|
|
e
|
|
);
|
|
}
|
|
}
|
|
Err(e) => {
|
|
error!(
|
|
concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"),
|
|
e
|
|
);
|
|
}
|
|
}
|
|
false
|
|
}
|
|
}
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "system" fn Java_com_discord_rpc_DiscordRPC_disconnect(
|
|
env: JNIEnv,
|
|
obj: JObject,
|
|
) -> bool {
|
|
match jni_disconnect(env, obj) {
|
|
Ok(_) => true,
|
|
Err(e) => {
|
|
error!(
|
|
concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"),
|
|
e
|
|
);
|
|
false
|
|
}
|
|
}
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "system" fn Java_com_discord_rpc_DiscordRPC_setActivity(
|
|
env: JNIEnv,
|
|
obj: JObject,
|
|
j_activity: JObject,
|
|
) -> bool {
|
|
match jni_set_activity(env, obj, j_activity) {
|
|
Ok(_) => true,
|
|
Err(e) => {
|
|
error!(
|
|
concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"),
|
|
e
|
|
);
|
|
false
|
|
}
|
|
}
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "system" fn Java_com_discord_rpc_DiscordRPC_clearActivity(
|
|
env: JNIEnv,
|
|
obj: JObject,
|
|
) -> bool {
|
|
match jni_clear_activity(env, obj) {
|
|
Ok(_) => true,
|
|
Err(e) => {
|
|
error!(
|
|
concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"),
|
|
e
|
|
);
|
|
false
|
|
}
|
|
}
|
|
}
|