Add settings customize Discord status text

The new settings let you customize the "Listening to" status text, according to the [status display types](https://discord.com/developers/docs/events/gateway-events#activity-object).

Fixes #1796.
This commit is contained in:
7xnl
2025-08-28 01:30:25 +03:00
committed by Jonas Kvinge
parent 3c3480fb84
commit b5fd3d5717
7 changed files with 75 additions and 4 deletions

View File

@@ -46,7 +46,8 @@ RichPresence::RichPresence(const SharedPtr<Player> player,
: QObject(parent),
player_(player),
playlist_manager_(playlist_manager),
initialized_(false) {
initialized_(false),
status_display_type_(0) {
QObject::connect(&*player_->engine(), &EngineBase::StateChanged, this, &RichPresence::EngineStateChanged);
QObject::connect(&*playlist_manager_, &PlaylistManager::CurrentSongChanged, this, &RichPresence::CurrentSongChanged);
@@ -69,6 +70,7 @@ void RichPresence::ReloadSettings() {
Settings s;
s.beginGroup(DiscordRPCSettings::kSettingsGroup);
const bool enabled = s.value(DiscordRPCSettings::kEnabled, false).toBool();
status_display_type_ = s.value(DiscordRPCSettings::kStatusDisplayType, static_cast<int>(DiscordRPCSettings::StatusDisplayType::App)).toInt();
s.endGroup();
if (enabled && !initialized_) {
@@ -117,7 +119,11 @@ void RichPresence::SendPresenceUpdate() {
::DiscordRichPresence presence_data{};
memset(&presence_data, 0, sizeof(presence_data));
presence_data.type = 2; // Listening
// Listening to
presence_data.type = 2;
presence_data.status_display_type = status_display_type_;
presence_data.largeImageKey = kStrawberryIconResourceName;
presence_data.smallImageKey = kStrawberryIconResourceName;
presence_data.smallImageText = kStrawberryIconDescription;
@@ -126,7 +132,9 @@ void RichPresence::SendPresenceUpdate() {
QByteArray artist;
if (!activity_.artist.isEmpty()) {
artist = activity_.artist.toUtf8();
artist.prepend(tr("by ").toUtf8());
if (artist.size() < 2) { // Discord activity 2 char min. fix
artist.append(" ");
}
presence_data.state = artist.constData();
}