summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/llappviewer.cpp74
-rw-r--r--indra/newview/llappviewer.h2
-rw-r--r--indra/newview/llfloaterpreference.cpp10
-rw-r--r--indra/newview/llstartup.h1
-rw-r--r--indra/newview/llviewermenu.cpp10
-rw-r--r--indra/newview/skins/default/xui/en/menu_login.xml7
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_privacy.xml2
9 files changed, 75 insertions, 49 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 315018bbee..a2e0a8dbbe 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1161,6 +1161,17 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>EnableDiscord</key>
+ <map>
+ <key>Comment</key>
+ <string>When set, connect to Discord to enable Rich Presence</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>EnableDiskCacheDebugInfo</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index d70287ac83..030c778990 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -5922,34 +5922,62 @@ void LLAppViewer::metricsSend(bool enable_reporting)
void LLAppViewer::initDiscordSocial()
{
- gDiscordClient = std::make_shared<discordpp::Client>();
- gDiscordClient->SetStatusChangedCallback([](discordpp::Client::Status status, discordpp::Client::Error, int32_t) {
- if (status == discordpp::Client::Status::Ready) {
- discordpp::Activity activity;
- activity.SetType(discordpp::ActivityTypes::Playing);
- gDiscordClient->UpdateRichPresence(activity, [](discordpp::ClientResult) {});
- }
+ gDiscordClient = std::make_shared<discordpp::Client>();
+ gDiscordClient->SetStatusChangedCallback([](discordpp::Client::Status status, discordpp::Client::Error, int32_t) {
+ if (status == discordpp::Client::Status::Ready)
+ {
+ discordpp::Activity activity;
+ activity.SetType(discordpp::ActivityTypes::Playing);
+ gDiscordClient->UpdateRichPresence(activity, [](discordpp::ClientResult) {});
+ }
+ });
+ if (gSavedSettings.getBOOL("EnableDiscord"))
+ {
+ gDiscordClient->UpdateToken(discordpp::AuthorizationTokenType::Bearer, gSecAPIHandler->loadCredential("Discord")->getAuthenticator()["token"].asString(), [](discordpp::ClientResult result) {
+ if (result.Successful())
+ gDiscordClient->Connect();
});
+ }
}
-void LLAppViewer::handleDiscordSocial()
+void LLAppViewer::handleDiscordSocial(bool enable)
{
- static const uint64_t DISCORD_APPLICATION_ID = 1393451183741599796;
- discordpp::AuthorizationArgs discordAuthArgs{};
- discordAuthArgs.SetClientId(DISCORD_APPLICATION_ID);
- discordAuthArgs.SetScopes(discordpp::Client::GetDefaultPresenceScopes());
- auto discordCodeVerifier = gDiscordClient->CreateAuthorizationCodeVerifier();
- discordAuthArgs.SetCodeChallenge(discordCodeVerifier.Challenge());
- gDiscordClient->Authorize(discordAuthArgs, [discordCodeVerifier](auto result, auto code, auto redirectUri) {
- if (result.Successful()) {
- gDiscordClient->GetToken(DISCORD_APPLICATION_ID, code, discordCodeVerifier.Verifier(), redirectUri, [](discordpp::ClientResult result, std::string accessToken, std::string, discordpp::AuthorizationTokenType, int32_t, std::string) {
- gDiscordClient->UpdateToken(discordpp::AuthorizationTokenType::Bearer, accessToken, [](discordpp::ClientResult result) {
- if (result.Successful())
- gDiscordClient->Connect();
+ static const uint64_t APPLICATION_ID = 1393451183741599796;
+ if (enable)
+ {
+ discordpp::AuthorizationArgs args{};
+ args.SetClientId(APPLICATION_ID);
+ args.SetScopes(discordpp::Client::GetDefaultPresenceScopes());
+ auto codeVerifier = gDiscordClient->CreateAuthorizationCodeVerifier();
+ args.SetCodeChallenge(codeVerifier.Challenge());
+ gDiscordClient->Authorize(args, [codeVerifier](auto result, auto code, auto redirectUri) {
+ if (result.Successful())
+ {
+ gDiscordClient->GetToken(APPLICATION_ID, code, codeVerifier.Verifier(), redirectUri, [](discordpp::ClientResult result, std::string accessToken, std::string, discordpp::AuthorizationTokenType, int32_t, std::string) {
+ gDiscordClient->UpdateToken(discordpp::AuthorizationTokenType::Bearer, accessToken, [](discordpp::ClientResult result) {
+ if (result.Successful())
+ gDiscordClient->Connect();
});
- });
- }
- });
+ LLSD authenticator = LLSD::emptyMap();
+ authenticator["token"] = accessToken;
+ gSecAPIHandler->saveCredential(gSecAPIHandler->createCredential("Discord", LLSD::emptyMap(), authenticator), true);
+ });
+ }
+ else
+ {
+ gSavedSettings.setBOOL("EnableDiscord", false);
+ }
+ });
+ }
+ else
+ {
+ gDiscordClient->RevokeToken(APPLICATION_ID, gSecAPIHandler->loadCredential("Discord")->getAuthenticator()["token"].asString(), [](discordpp::ClientResult result) {
+ if (result.Successful())
+ gDiscordClient->Disconnect();
+ auto cred = new LLCredential("Discord");
+ gSecAPIHandler->deleteCredential(cred);
+ });
+ }
}
#endif
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index dc10738249..8ff07accbe 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -252,7 +252,7 @@ public:
#ifdef LL_DISCORD
static void initDiscordSocial();
- static void handleDiscordSocial();
+ static void handleDiscordSocial(bool enable);
#endif
protected:
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index fdac390e8a..136683296f 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -237,6 +237,13 @@ void handleAppearanceCameraMovementChanged(const LLSD& newvalue)
}
}
+#ifdef LL_DISCORD
+void handleDiscordSocial(const LLSD& newvalue)
+{
+ LLAppViewer::handleDiscordSocial(newvalue.asBoolean());
+}
+#endif
+
void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator)
{
numerator = 0;
@@ -366,6 +373,9 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.ClearLog", boost::bind(&LLConversationLog::onClearLog, &LLConversationLog::instance()));
mCommitCallbackRegistrar.add("Pref.DeleteTranscripts", boost::bind(&LLFloaterPreference::onDeleteTranscripts, this));
mCommitCallbackRegistrar.add("UpdateFilter", boost::bind(&LLFloaterPreference::onUpdateFilterTerm, this, false)); // <FS:ND/> Hook up for filtering
+#ifdef LL_DISCORD
+ gSavedSettings.getControl("EnableDiscord")->getCommitSignal()->connect(boost::bind(&handleDiscordSocial, _2));
+#endif
}
void LLFloaterPreference::processProperties( void* pData, EAvatarProcessorType type )
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index c07926facb..a827fbc487 100644
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -128,7 +128,6 @@ public:
static bool startLLProxy(); // Initialize the SOCKS 5 proxy
static LLViewerStats::PhaseMap& getPhases() { return *sPhases; }
-
private:
friend class LLStartupListener;
static LLSLURL sStartSLURL;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 2c022d0a4c..810ebd90a5 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -8943,13 +8943,6 @@ void handle_report_bug(const LLSD& param)
LLWeb::loadURLExternal(url);
}
-#ifdef LL_DISCORD
-void handle_discord_social(const LLSD& param)
-{
- LLAppViewer::handleDiscordSocial();
-}
-#endif
-
void handle_buy_currency_test()
{
std::string url =
@@ -9928,9 +9921,6 @@ void initialize_menus()
commit.add("Advanced.WebContentTest", boost::bind(&handle_web_content_test, _2)); // this one opens the Web Content floater
commit.add("Advanced.ShowURL", boost::bind(&handle_show_url, _2));
commit.add("Advanced.ReportBug", boost::bind(&handle_report_bug, _2));
-#ifdef LL_DISCORD
- commit.add("Advanced.DiscordSocial", boost::bind(&handle_discord_social, _2));
-#endif
view_listener_t::addMenu(new LLAdvancedBuyCurrencyTest(), "Advanced.BuyCurrencyTest");
view_listener_t::addMenu(new LLAdvancedDumpSelectMgr(), "Advanced.DumpSelectMgr");
view_listener_t::addMenu(new LLAdvancedDumpInventory(), "Advanced.DumpInventory");
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index 04514e8a52..5fff9b7bc0 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -110,13 +110,6 @@
</menu_item_call>
<menu_item_separator/>
<menu_item_call
- label="Discord Social"
- name="Discord Social">
- <menu_item_call.on_click
- function="Advanced.DiscordSocial"/>
- </menu_item_call>
- <menu_item_separator/>
- <menu_item_call
label="About [APP_NAME]"
name="About Second Life">
<menu_item_call.on_click
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 56261ce874..1ec59bf2eb 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -1818,13 +1818,6 @@ function="World.EnvPreset"
</menu_item_call>
<menu_item_separator/>
- <menu_item_call
- label="Discord Social"
- name="Discord Social">
- <menu_item_call.on_click
- function="Advanced.DiscordSocial"/>
- </menu_item_call>
- <menu_item_separator/>
<menu_item_call
label="Bumps, Pushes &amp; Hits"
name="Bumps, Pushes &amp;amp; Hits">
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 219f307f64..8d78618a21 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -138,6 +138,7 @@
follows="top|left">
<check_box
+ control_name="EnableDiscord"
height="16"
enabled="true"
label="Enable Discord integration"
@@ -148,6 +149,7 @@
width="350" />
<check_box
+ enabled_control="EnableDiscord"
height="16"
enabled="false"
label="Show location"