Add disconnect and clearActivity
This commit is contained in:
parent
49f58f2623
commit
5d0243df9a
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"files.watcherExclude": {
|
||||||
|
"**/target": true
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "discord-rpc-client"
|
name = "discord-rpc-client"
|
||||||
version = "0.5.1"
|
version = "0.5.2"
|
||||||
description = "A Rust client for Discord RPC."
|
description = "A Rust client for Discord RPC."
|
||||||
authors = [
|
authors = [
|
||||||
"Patrick Auernig <dev.patrick.auernig@gmail.com>",
|
"Patrick Auernig <dev.patrick.auernig@gmail.com>",
|
||||||
|
|
|
@ -15,7 +15,17 @@ pub extern "system" fn Java_com_discord_rpc_DiscordRPC_connect(env: JNIEnv, obj:
|
||||||
Java_com_discord_rpc_DiscordRPC_connect0(env, obj, client_id).is_ok()
|
Java_com_discord_rpc_DiscordRPC_connect0(env, obj, client_id).is_ok()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "system" fn Java_com_discord_rpc_DiscordRPC_disconnect(env: JNIEnv, obj: JObject) -> bool {
|
||||||
|
Java_com_discord_rpc_DiscordRPC_disconnect0(env, obj).is_ok()
|
||||||
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "system" fn Java_com_discord_rpc_DiscordRPC_setActivity(env: JNIEnv, obj: JObject, j_activity: JObject) -> bool {
|
pub extern "system" fn Java_com_discord_rpc_DiscordRPC_setActivity(env: JNIEnv, obj: JObject, j_activity: JObject) -> bool {
|
||||||
Java_com_discord_rpc_DiscordRPC_setActivity0(env, obj, j_activity).is_ok()
|
Java_com_discord_rpc_DiscordRPC_setActivity0(env, obj, j_activity).is_ok()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "system" fn Java_com_discord_rpc_DiscordRPC_clearActivity(env: JNIEnv, obj: JObject) -> bool {
|
||||||
|
Java_com_discord_rpc_DiscordRPC_clearActivity0(env, obj).is_ok()
|
||||||
|
}
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
ThisBuild / organization := "com.discord"
|
ThisBuild / organization := "com.discord"
|
||||||
ThisBuild / version := "0.2.0"
|
ThisBuild / version := "0.2.1"
|
||||||
|
|
||||||
lazy val hello = (project in file("."))
|
lazy val root = (project in file("."))
|
||||||
.settings(
|
.settings(
|
||||||
name := "discord-rpc"
|
name := "discord-rpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//libraryDependencies += "org.scalactic" %% "scalactic" % "3.2.10"
|
||||||
|
//libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.10" % "test"
|
||||||
|
libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.10" % Test
|
||||||
|
|
|
@ -16,8 +16,12 @@ public final class DiscordRPC {
|
||||||
|
|
||||||
public native boolean connect(String clientId);
|
public native boolean connect(String clientId);
|
||||||
|
|
||||||
|
public native boolean disconnect();
|
||||||
|
|
||||||
public native boolean setActivity(Activity activity);
|
public native boolean setActivity(Activity activity);
|
||||||
|
|
||||||
|
public native boolean clearActivity();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
final var dir = System.getProperty("com.discord.librarypath");
|
final var dir = System.getProperty("com.discord.librarypath");
|
||||||
if (dir != null) {
|
if (dir != null) {
|
||||||
|
@ -26,5 +30,10 @@ public final class DiscordRPC {
|
||||||
System.loadLibrary("discord_rpc");
|
System.loadLibrary("discord_rpc");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method does nothing, but ensures that the native library will be loaded.
|
||||||
|
*/
|
||||||
|
public static void initialize() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
import org.scalatest._
|
||||||
|
import flatspec._
|
||||||
|
import matchers._
|
||||||
|
import com.discord.rpc.DiscordRPC
|
||||||
|
|
||||||
|
class DiscordRPCSpec extends AnyFlatSpec with should.Matchers {
|
||||||
|
"DiscordRPC.initialize()" should "load library and bind native methods" in {
|
||||||
|
// FIXME: this test fails because the lib isn't in the java.library.path and com.discord.librarypath is not set.
|
||||||
|
DiscordRPC.initialize()
|
||||||
|
}
|
||||||
|
}
|
16
src/java.rs
16
src/java.rs
|
@ -74,6 +74,14 @@ pub fn Java_com_discord_rpc_DiscordRPC_connect0(env: JNIEnv, obj: JObject, clien
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn Java_com_discord_rpc_DiscordRPC_disconnect0(env: JNIEnv, obj: JObject) -> Result<(), ()> {
|
||||||
|
let client = get_client(&env, obj)?;
|
||||||
|
|
||||||
|
RUNTIME.block_on(async { client.disconnect().await });
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn Java_com_discord_rpc_DiscordRPC_setActivity0(env: JNIEnv, obj: JObject, j_activity: JObject) -> Result<(), ()> {
|
pub fn Java_com_discord_rpc_DiscordRPC_setActivity0(env: JNIEnv, obj: JObject, j_activity: JObject) -> Result<(), ()> {
|
||||||
let client = get_client(&env, obj)?;
|
let client = get_client(&env, obj)?;
|
||||||
|
@ -83,6 +91,14 @@ pub fn Java_com_discord_rpc_DiscordRPC_setActivity0(env: JNIEnv, obj: JObject, j
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn Java_com_discord_rpc_DiscordRPC_clearActivity0(env: JNIEnv, obj: JObject) -> Result<(), ()> {
|
||||||
|
let client = get_client(&env, obj)?;
|
||||||
|
|
||||||
|
debug_and_discard_err(RUNTIME.block_on(async { client.clear_activity().await }))?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn jobject_to_activity(env: JNIEnv, jobject: JObject) -> Result<drpc::models::Activity, ()> {
|
fn jobject_to_activity(env: JNIEnv, jobject: JObject) -> Result<drpc::models::Activity, ()> {
|
||||||
let j_state = env.get_field(jobject, "state", SIG_STRING).map_err(|_| ())?;
|
let j_state = env.get_field(jobject, "state", SIG_STRING).map_err(|_| ())?;
|
||||||
let j_details = env.get_field(jobject, "details", SIG_STRING).map_err(|_| ())?;
|
let j_details = env.get_field(jobject, "details", SIG_STRING).map_err(|_| ())?;
|
||||||
|
|
Loading…
Reference in New Issue