DiscordRPC: Show session time in Discord Rich Presence

This commit is contained in:
Silent 2023-12-12 19:04:36 +01:00 committed by Connor McLaughlin
parent 56056c4846
commit 0a2e137613
3 changed files with 12 additions and 8 deletions

View File

@ -814,7 +814,7 @@ void Achievements::UpdateRichPresence(std::unique_lock<std::recursive_mutex>& lo
Host::OnAchievementsRefreshed(); Host::OnAchievementsRefreshed();
lock.unlock(); lock.unlock();
VMManager::UpdateDiscordPresence(); VMManager::UpdateDiscordPresence(false);
lock.lock(); lock.lock();
} }

View File

@ -193,6 +193,7 @@ static bool s_screensaver_inhibited = false;
static PINEServer s_pine_server; static PINEServer s_pine_server;
static bool s_discord_presence_active = false; static bool s_discord_presence_active = false;
static time_t s_discord_presence_time_epoch;
bool VMManager::PerformEarlyHardwareChecks(const char** error) bool VMManager::PerformEarlyHardwareChecks(const char** error)
{ {
@ -934,7 +935,7 @@ void VMManager::UpdateDiscDetails(bool booting)
if (MTGS::IsOpen()) if (MTGS::IsOpen())
MTGS::GameChanged(); MTGS::GameChanged();
ReloadPINE(); ReloadPINE();
UpdateDiscordPresence(); UpdateDiscordPresence(s_state.load(std::memory_order_relaxed) == VMState::Initializing);
if (!GSDumpReplayer::IsReplayingDump()) if (!GSDumpReplayer::IsReplayingDump())
FileMcd_Reopen(memcardFilters.empty() ? s_disc_serial : memcardFilters); FileMcd_Reopen(memcardFilters.empty() ? s_disc_serial : memcardFilters);
@ -1089,7 +1090,7 @@ bool VMManager::Initialize(VMBootParameters boot_params)
Achievements::GameChanged(0, 0); Achievements::GameChanged(0, 0);
FullscreenUI::GameChanged(s_title, std::string(), s_disc_serial, 0, 0); FullscreenUI::GameChanged(s_title, std::string(), s_disc_serial, 0, 0);
UpdateDiscordPresence(); UpdateDiscordPresence(true);
Host::OnGameChanged(s_title, std::string(), std::string(), s_disc_serial, 0, 0); Host::OnGameChanged(s_title, std::string(), std::string(), s_disc_serial, 0, 0);
UpdateGameSettingsLayer(); UpdateGameSettingsLayer();
@ -1402,7 +1403,7 @@ void VMManager::Shutdown(bool save_resume_state)
Achievements::GameChanged(0, 0); Achievements::GameChanged(0, 0);
FullscreenUI::GameChanged(s_title, std::string(), s_disc_serial, 0, 0); FullscreenUI::GameChanged(s_title, std::string(), s_disc_serial, 0, 0);
UpdateDiscordPresence(); UpdateDiscordPresence(true);
Host::OnGameChanged(s_title, std::string(), std::string(), s_disc_serial, 0, 0); Host::OnGameChanged(s_title, std::string(), std::string(), s_disc_serial, 0, 0);
s_fast_boot_requested = false; s_fast_boot_requested = false;
@ -3087,7 +3088,7 @@ void VMManager::InitializeDiscordPresence()
Discord_Initialize("1025789002055430154", &handlers, 0, nullptr); Discord_Initialize("1025789002055430154", &handlers, 0, nullptr);
s_discord_presence_active = true; s_discord_presence_active = true;
UpdateDiscordPresence(); UpdateDiscordPresence(true);
} }
void VMManager::ShutdownDiscordPresence() void VMManager::ShutdownDiscordPresence()
@ -3101,16 +3102,19 @@ void VMManager::ShutdownDiscordPresence()
s_discord_presence_active = false; s_discord_presence_active = false;
} }
void VMManager::UpdateDiscordPresence() void VMManager::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 = "4k-pcsx2"; rp.largeImageKey = "4k-pcsx2";
rp.largeImageText = "PCSX2 Emulator"; rp.largeImageText = "PCSX2 Emulator";
rp.startTimestamp = std::time(nullptr); rp.startTimestamp = s_discord_presence_time_epoch;
rp.details = s_title.empty() ? "No Game Running" : s_title.c_str(); rp.details = s_title.empty() ? "No Game Running" : s_title.c_str();
std::string state_string; std::string state_string;

View File

@ -222,7 +222,7 @@ namespace VMManager
u64 GetSessionPlayedTime(); u64 GetSessionPlayedTime();
/// Called when the rich presence string, provided by RetroAchievements, changes. /// Called when the rich presence string, provided by RetroAchievements, changes.
void UpdateDiscordPresence(); void UpdateDiscordPresence(bool update_session_time);
/// Internal callbacks, implemented in the emu core. /// Internal callbacks, implemented in the emu core.
namespace Internal namespace Internal