From b9220785a527408b7d99421f91b7e203d35dda28 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Mon, 5 Mar 2018 14:53:34 +0100 Subject: [PATCH] Continue running in case Discord lib load failed In case loading of Discord library failed, continue running application and just disable Discord support. Fixes #826 Signed-off-by: Tomas Slusny --- .../client/discord/DiscordService.java | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/discord/DiscordService.java b/runelite-client/src/main/java/net/runelite/client/discord/DiscordService.java index 3c7a7ab684..7147c1821d 100644 --- a/runelite-client/src/main/java/net/runelite/client/discord/DiscordService.java +++ b/runelite-client/src/main/java/net/runelite/client/discord/DiscordService.java @@ -55,8 +55,7 @@ public class DiscordService implements AutoCloseable @Inject private ScheduledExecutorService executorService; - private final DiscordEventHandlers discordEventHandlers = new DiscordEventHandlers(); - private final DiscordRPC discordRPC = DiscordRPC.INSTANCE; + private DiscordRPC discordRPC; /** * Initializes the Discord service, sets up the event handlers and starts worker thread that will poll discord @@ -66,6 +65,18 @@ public class DiscordService implements AutoCloseable public void init() { log.info("Initializing Discord RPC service."); + + try + { + discordRPC = DiscordRPC.INSTANCE; + } + catch (UnsatisfiedLinkError e) + { + log.warn("Failed to load Discord library, Discord support will be disabled."); + return; + } + + final DiscordEventHandlers discordEventHandlers = new DiscordEventHandlers(); discordEventHandlers.ready = this::ready; discordEventHandlers.disconnected = this::disconnected; discordEventHandlers.errored = this::errored; @@ -83,7 +94,10 @@ public class DiscordService implements AutoCloseable @Override public void close() { - discordRPC.Discord_Shutdown(); + if (discordRPC != null) + { + discordRPC.Discord_Shutdown(); + } } /** @@ -95,6 +109,11 @@ public class DiscordService implements AutoCloseable */ public void updatePresence(DiscordPresence discordPresence) { + if (discordRPC == null) + { + return; + } + final DiscordRichPresence discordRichPresence = new DiscordRichPresence(); discordRichPresence.state = discordPresence.getState(); discordRichPresence.details = discordPresence.getDetails(); @@ -127,7 +146,10 @@ public class DiscordService implements AutoCloseable */ public void clearPresence() { - discordRPC.Discord_ClearPresence(); + if (discordRPC != null) + { + discordRPC.Discord_ClearPresence(); + } } /** @@ -138,7 +160,10 @@ public class DiscordService implements AutoCloseable */ public void respondToRequest(String userId, DiscordReplyType reply) { - discordRPC.Discord_Respond(userId, reply.ordinal()); + if (discordRPC != null) + { + discordRPC.Discord_Respond(userId, reply.ordinal()); + } } private void ready()