diff --git a/indra/cmake/DiscordSDK.cmake b/indra/cmake/DiscordSDK.cmake index 9e84ad5811dac350fc74c27e31148ecd99347514..9fd27a9c75b225151901004a4a120e62eaca2dc0 100644 --- a/indra/cmake/DiscordSDK.cmake +++ b/indra/cmake/DiscordSDK.cmake @@ -33,7 +33,7 @@ if (USE_DISCORD) endif (STANDALONE) if(DEFINED ENV{DISCORD_CLIENTID}) - set(DISCORD_CLIENTID $ENV{SENTRY_DSN} CACHE STRING "Discord Client ID" FORCE) + set(DISCORD_CLIENTID $ENV{DISCORD_CLIENTID} CACHE STRING "Discord Client ID" FORCE) else() set(DISCORD_CLIENTID "" CACHE STRING "Discord Client ID") endif() diff --git a/indra/newview/aldiscordmanager.cpp b/indra/newview/aldiscordmanager.cpp index 9a6284f3e6f01eb0dd0c71316b6e12356db4121a..4379658ac3687fe29d31c6d931901af8dadd4a55 100644 --- a/indra/newview/aldiscordmanager.cpp +++ b/indra/newview/aldiscordmanager.cpp @@ -119,10 +119,12 @@ void ALDiscordManager::init() }); LLEventPumps::instance().obtain("mainloop").listen("ALDiscordManager", boost::bind(&ALDiscordManager::update, this, _1)); + mRegionChangeConnection = gAgent.addRegionChangedCallback(boost::bind(&ALDiscordManager::onRegionChange, this)); } void ALDiscordManager::shutdown() { + mRegionChangeConnection.disconnect(); LLEventPumps::instance().obtain("mainloop").stopListening("ALDiscordManager"); mDiscord.reset(); } @@ -145,9 +147,25 @@ bool ALDiscordManager::update(const LLSD&) void ALDiscordManager::onLoginCompleted() { mLoggedInTime = LLDate::now().secondsSinceEpoch(); + onRegionChange(); updateActivity(); } +void ALDiscordManager::onRegionChange() +{ + if (gAgent.getRegionHost() != mCurrentHost) + { + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_RequestRegionInfo); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + gAgent.sendReliableMessage(); + + mCurrentHost = gAgent.getRegionHost(); + } +} + void ALDiscordManager::updateActivity() { LLViewerRegion* region = gAgent.getRegion(); @@ -216,15 +234,6 @@ void ALDiscordManager::updateActivity() { activity.GetParty().GetSize().SetMaxSize(max_agents); } - else - { - LLMessageSystem* msg = gMessageSystem; - msg->newMessageFast(_PREHASH_RequestRegionInfo); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - gAgent.sendReliableMessage(); - } activity.GetParty().SetId(regionId.c_str()); activity.GetParty().SetPrivacy(discord::ActivityPartyPrivacy::Public); diff --git a/indra/newview/aldiscordmanager.h b/indra/newview/aldiscordmanager.h index 5cf39d1d14da2dfd62cad08a78707bb5cde9c550..8ad3c183574f08f0477a62e306745da9bd282281 100644 --- a/indra/newview/aldiscordmanager.h +++ b/indra/newview/aldiscordmanager.h @@ -28,6 +28,7 @@ #define AL_DISCORDMANAGER_H #include "llsingleton.h" +#include "llhost.h" #include "discord.h" @@ -45,9 +46,12 @@ class ALDiscordManager final private: void onLoginCompleted(); + void onRegionChange(); void updateActivity(); + boost::signals2::connection mRegionChangeConnection; std::unique_ptr<discord::Core> mDiscord; + LLHost mCurrentHost; F64 mLoggedInTime = 0.0; };