diff --git a/src/discord_rpc.cpp b/src/discord_rpc.cpp index dae3ac0..6156a5f 100644 --- a/src/discord_rpc.cpp +++ b/src/discord_rpc.cpp @@ -62,7 +62,7 @@ static int LastDisconnectErrorCode{0}; static char LastDisconnectErrorMessage[256]; static std::mutex PresenceMutex; static std::mutex HandlerMutex; -static DiscordRichPresence CurrentPresence{}; +static QueuedMessage CurrentPresence{}; static QueuedMessage QueuedPresence{}; static MsgQueue SendQueue; static MsgQueue JoinAskQueue; @@ -311,7 +311,10 @@ extern "C" DISCORD_EXPORT void Discord_Initialize(const char* applicationId, Connection = RpcConnection::Create(applicationId); Connection->onConnect = [](JsonDocument& readyMessage) { Discord_UpdateHandlers(&QueuedHandlers); - Discord_UpdatePresence(&CurrentPresence); + if (CurrentPresence.length > 0) { + QueuedPresence.Copy(CurrentPresence); + SignalIOActivity(); + } auto data = GetObjMember(&readyMessage, "data"); auto user = GetObjMember(data, "user"); auto userId = GetStrMember(user, "id"); @@ -352,7 +355,6 @@ extern "C" DISCORD_EXPORT void Discord_Shutdown(void) Connection->onConnect = nullptr; Connection->onDisconnect = nullptr; Handlers = {}; - CurrentPresence = {}; if (IoThread != nullptr) { IoThread->Stop(); delete IoThread; @@ -370,10 +372,10 @@ extern "C" DISCORD_EXPORT void Discord_UpdatePresence(const DiscordRichPresence* QueuedPresence.buffer, sizeof(QueuedPresence.buffer), Nonce++, Pid, presence); } if (presence) { - CurrentPresence = *presence; + CurrentPresence.Copy(QueuedPresence); } else { - CurrentPresence = {}; + CurrentPresence.length = 0; } SignalIOActivity(); }