From c7110f62a2158cd9b76edf427b6516bfeb92e9df Mon Sep 17 00:00:00 2001 From: Marco Allegretti Date: Mon, 23 Mar 2026 13:08:16 +0100 Subject: [PATCH] Fix session state tracking on Exited, duplicate sessions, and Unknown state --- src/gamelauncher.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/gamelauncher.cpp b/src/gamelauncher.cpp index c6b0623..f2b3a60 100644 --- a/src/gamelauncher.cpp +++ b/src/gamelauncher.cpp @@ -761,21 +761,35 @@ void GameLauncher::onDaemonSessionChanged(const QVariantMap &session) return; } - m_daemonGameToSession.insert(gameId, sessionId); - m_daemonSessionToGame.insert(sessionId, gameId); - const QString state = s.value(QStringLiteral("state")).toString(); + if (state == QLatin1String("Exited")) { + m_daemonGameToSession.remove(gameId); + m_daemonSessionToGame.remove(sessionId); + Game *game = App::instance()->gameModel()->gameById(gameId); + if (game) { + game->setRunning(false); + } + Q_EMIT runningGamesChanged(); + applyRunningStateToLibrary(); return; } + if (m_daemonSessionToGame.contains(sessionId)) { + return; + } + + m_daemonGameToSession.insert(gameId, sessionId); + m_daemonSessionToGame.insert(sessionId, gameId); + + const bool isActiveState = state == QLatin1String("Running") || state == QLatin1String("Launching") || state == QLatin1String("Stopping"); + Game *game = App::instance()->gameModel()->gameById(gameId); - if (game) { + if (game && isActiveState) { game->setRunning(true); } Q_EMIT runningGamesChanged(); - applyRunningStateToLibrary(); }