From b46b0724c61b0f2835e60f25c8d28c9e14a744e4 Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Wed, 14 Dec 2022 20:52:19 -0500
Subject: [PATCH] Fixes

---
 indra/cmake/DiscordSDK.cmake       |  2 +-
 indra/newview/aldiscordmanager.cpp | 27 ++++++++++++++++++---------
 indra/newview/aldiscordmanager.h   |  4 ++++
 3 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/indra/cmake/DiscordSDK.cmake b/indra/cmake/DiscordSDK.cmake
index 9e84ad5811d..9fd27a9c75b 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 9a6284f3e6f..4379658ac36 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 5cf39d1d14d..8ad3c183574 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;
 };
 
-- 
GitLab