Fix session state tracking on Exited, duplicate sessions, and Unknown state

This commit is contained in:
Marco Allegretti 2026-03-23 13:08:16 +01:00
parent e216acc3df
commit c7110f62a2

View file

@ -761,21 +761,35 @@ void GameLauncher::onDaemonSessionChanged(const QVariantMap &session)
return; return;
} }
m_daemonGameToSession.insert(gameId, sessionId);
m_daemonSessionToGame.insert(sessionId, gameId);
const QString state = s.value(QStringLiteral("state")).toString(); const QString state = s.value(QStringLiteral("state")).toString();
if (state == QLatin1String("Exited")) { 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; 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); Game *game = App::instance()->gameModel()->gameById(gameId);
if (game) { if (game && isActiveState) {
game->setRunning(true); game->setRunning(true);
} }
Q_EMIT runningGamesChanged(); Q_EMIT runningGamesChanged();
applyRunningStateToLibrary(); applyRunningStateToLibrary();
} }