// SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2024 A-La-Karte Contributors #pragma once #include #include #include #include #include #include "game.h" class GameLauncher : public QObject { Q_OBJECT QML_ELEMENT Q_PROPERTY(bool hasRunningGames READ hasRunningGames NOTIFY runningGamesChanged) public: explicit GameLauncher(QObject *parent = nullptr); ~GameLauncher(); bool hasRunningGames() const; Q_INVOKABLE void launchGame(Game *game); Q_INVOKABLE QVariantMap resolveLaunchInfo(Game *game) const; Q_INVOKABLE void stopGame(Game *game); Q_INVOKABLE bool isGameRunning(Game *game) const; Q_SIGNALS: void gameStarted(Game *game); void gameStopped(Game *game, int exitCode); void gameError(Game *game, const QString &error); void runningGamesChanged(); private Q_SLOTS: void onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus); void onProcessError(QProcess::ProcessError error); private: QMap m_runningGames; QMap m_processToGame; void cleanupProcess(QProcess *process); };