DiscordRPC: Show session time in Discord Rich Presence

This commit is contained in:
Silent 2023-12-23 15:19:22 +01:00
parent 9ec3266f02
commit d08a40bcd8
No known key found for this signature in database
GPG key ID: AE53149BB0C45AF1
3 changed files with 11 additions and 7 deletions

View file

@ -795,7 +795,7 @@ void Achievements::UpdateRichPresence(std::unique_lock<std::recursive_mutex>& lo
#ifdef ENABLE_DISCORD_PRESENCE #ifdef ENABLE_DISCORD_PRESENCE
lock.unlock(); lock.unlock();
System::UpdateDiscordPresence(); System::UpdateDiscordPresence(false);
lock.lock(); lock.lock();
#endif #endif
} }

View file

@ -234,6 +234,7 @@ static u64 s_session_start_time = 0;
#ifdef ENABLE_DISCORD_PRESENCE #ifdef ENABLE_DISCORD_PRESENCE
static bool s_discord_presence_active = false; static bool s_discord_presence_active = false;
static time_t s_discord_presence_time_epoch;
#endif #endif
static TinyString GetTimestampStringForFileName() static TinyString GetTimestampStringForFileName()
@ -1691,7 +1692,7 @@ void System::ClearRunningGame()
Achievements::GameChanged(s_running_game_path, nullptr); Achievements::GameChanged(s_running_game_path, nullptr);
#ifdef ENABLE_DISCORD_PRESENCE #ifdef ENABLE_DISCORD_PRESENCE
UpdateDiscordPresence(); UpdateDiscordPresence(true);
#endif #endif
} }
@ -3372,7 +3373,7 @@ void System::UpdateRunningGame(const char* path, CDImage* image, bool booting)
SaveStateSelectorUI::ClearList(); SaveStateSelectorUI::ClearList();
#ifdef ENABLE_DISCORD_PRESENCE #ifdef ENABLE_DISCORD_PRESENCE
UpdateDiscordPresence(); UpdateDiscordPresence(booting);
#endif #endif
Host::OnGameChanged(s_running_game_path, s_running_game_serial, s_running_game_title); Host::OnGameChanged(s_running_game_path, s_running_game_serial, s_running_game_title);
@ -4834,7 +4835,7 @@ void System::InitializeDiscordPresence()
Discord_Initialize("705325712680288296", &handlers, 0, nullptr); Discord_Initialize("705325712680288296", &handlers, 0, nullptr);
s_discord_presence_active = true; s_discord_presence_active = true;
UpdateDiscordPresence(); UpdateDiscordPresence(true);
} }
void System::ShutdownDiscordPresence() void System::ShutdownDiscordPresence()
@ -4847,16 +4848,19 @@ void System::ShutdownDiscordPresence()
s_discord_presence_active = false; s_discord_presence_active = false;
} }
void System::UpdateDiscordPresence() void System::UpdateDiscordPresence(bool update_session_time)
{ {
if (!s_discord_presence_active) if (!s_discord_presence_active)
return; return;
if (update_session_time)
s_discord_presence_time_epoch = std::time(nullptr);
// https://discord.com/developers/docs/rich-presence/how-to#updating-presence-update-presence-payload-fields // https://discord.com/developers/docs/rich-presence/how-to#updating-presence-update-presence-payload-fields
DiscordRichPresence rp = {}; DiscordRichPresence rp = {};
rp.largeImageKey = "duckstation_logo"; rp.largeImageKey = "duckstation_logo";
rp.largeImageText = "DuckStation PS1/PSX Emulator"; rp.largeImageText = "DuckStation PS1/PSX Emulator";
rp.startTimestamp = std::time(nullptr); rp.startTimestamp = s_discord_presence_time_epoch;
rp.details = "No Game Running"; rp.details = "No Game Running";
if (IsValidOrInitializing()) if (IsValidOrInitializing())
{ {

View file

@ -480,7 +480,7 @@ void SetRunaheadReplayFlag();
#ifdef ENABLE_DISCORD_PRESENCE #ifdef ENABLE_DISCORD_PRESENCE
/// Called when rich presence changes. /// Called when rich presence changes.
void UpdateDiscordPresence(); void UpdateDiscordPresence(bool update_session_time);
#endif #endif
namespace Internal { namespace Internal {