@@ -1438,28 +1438,46 @@ void UserTracker::PeriodicMaintenance(uint64_t xuid,
14381438 kernel_state ()->xam_state ()->GetUserIndexAssignedToProfileFromXUID (xuid);
14391439
14401440 if (cvars::discord_presence_user_index == user_index) {
1441- bool found = false ;
1441+ const auto valid_session = user-> FindValidSession () ;
14421442
1443- const auto updated_session = user->IsSessionUpdateAvailable ();
1444-
1445- if (updated_session.has_value () && updated_session.value ()) {
1446- const auto & session = updated_session.value ();
1443+ if (valid_session.has_value ()) {
1444+ const auto & session = valid_session.value ();
14471445
14481446 const XSESSION_INFO session_info = session->GetSessionInfo ();
1447+ const XSESSION_LOCAL_DETAILS session_details =
1448+ session->GetSessionDetails ();
14491449 const uint32_t party_size = session->GetMembersCount ();
14501450 const uint32_t party_max = session->GetMaxPublicSlots ();
14511451
1452- kernel_state ()-> emulator ()-> on_session_change (
1453- &session_info, party_size, party_max, user-> GetOnlineXUID ()) ;
1454- user->SetLastSessionState (session_info );
1452+ XSESSION_INFO last_session_info = {};
1453+ XSESSION_LOCAL_DETAILS last_session_details = {} ;
1454+ user->GetLastSessionState (last_session_info, last_session_details );
14551455
1456- found = true ;
1457- }
1456+ bool session_info_changed = session_info != last_session_info;
1457+ bool session_details_changed = session_details != last_session_details;
1458+
1459+ if (session_info_changed || session_details_changed) {
1460+ kernel_state ()->emulator ()->on_session_change (
1461+ &session_info, party_size, party_max, user->GetOnlineXUID ());
1462+ user->SetLastSessionState (session_info, session_details);
1463+ }
1464+ } else {
1465+ const XSESSION_INFO session_info = {};
1466+ const XSESSION_LOCAL_DETAILS session_details = {};
14581467
1459- if (!found) {
1460- kernel_state ()->emulator ()->on_session_change (nullptr , 0 , 0 , 0 );
1461- user->SetLastSessionState ({});
1468+ XSESSION_INFO last_session_info = {};
1469+ XSESSION_LOCAL_DETAILS last_session_details = {};
1470+ user->GetLastSessionState (last_session_info, last_session_details);
1471+
1472+ bool session_info_changed = session_info != last_session_info;
1473+ bool session_details_changed = session_details != last_session_details;
1474+
1475+ if (session_info_changed || session_details_changed) {
1476+ kernel_state ()->emulator ()->on_session_change (nullptr , 0 , 0 , 0 );
1477+ user->SetLastSessionState ({}, {});
1478+ }
14621479 }
1480+
14631481 xe::discord::DiscordPresence::Update ();
14641482 }
14651483
0 commit comments