2026-01-18 12:13:07 +00:00
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
// SPDX-FileCopyrightText: 2024 A-La-Karte Contributors
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
2026-02-06 13:02:24 +00:00
|
|
|
#include <QHash>
|
2026-01-18 12:13:07 +00:00
|
|
|
#include <QObject>
|
|
|
|
|
#include <QQmlEngine>
|
2026-01-30 10:02:28 +00:00
|
|
|
#include <QVariantMap>
|
2026-01-18 12:13:07 +00:00
|
|
|
|
|
|
|
|
#include "game.h"
|
|
|
|
|
|
|
|
|
|
class GameLauncher : public QObject
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
QML_ELEMENT
|
|
|
|
|
|
|
|
|
|
Q_PROPERTY(bool hasRunningGames READ hasRunningGames NOTIFY runningGamesChanged)
|
2026-02-06 13:02:24 +00:00
|
|
|
Q_PROPERTY(bool daemonAvailable READ daemonAvailable NOTIFY daemonAvailableChanged)
|
2026-01-18 12:13:07 +00:00
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
explicit GameLauncher(QObject *parent = nullptr);
|
|
|
|
|
~GameLauncher();
|
|
|
|
|
|
|
|
|
|
bool hasRunningGames() const;
|
2026-02-06 13:02:24 +00:00
|
|
|
bool daemonAvailable() const;
|
2026-01-18 12:13:07 +00:00
|
|
|
|
|
|
|
|
Q_INVOKABLE void launchGame(Game *game);
|
2026-01-30 10:02:28 +00:00
|
|
|
Q_INVOKABLE QVariantMap resolveLaunchInfo(Game *game) const;
|
2026-01-18 12:13:07 +00:00
|
|
|
Q_INVOKABLE void stopGame(Game *game);
|
|
|
|
|
Q_INVOKABLE bool isGameRunning(Game *game) const;
|
2026-02-06 13:02:24 +00:00
|
|
|
Q_INVOKABLE void retryDaemonConnection();
|
2026-01-18 12:13:07 +00:00
|
|
|
|
|
|
|
|
Q_SIGNALS:
|
|
|
|
|
void gameStarted(Game *game);
|
|
|
|
|
void gameStopped(Game *game, int exitCode);
|
|
|
|
|
void gameError(Game *game, const QString &error);
|
|
|
|
|
void runningGamesChanged();
|
2026-02-06 13:02:24 +00:00
|
|
|
void daemonAvailableChanged();
|
2026-01-18 12:13:07 +00:00
|
|
|
|
|
|
|
|
private Q_SLOTS:
|
2026-02-06 13:02:24 +00:00
|
|
|
void onDaemonSessionAdded(const QVariantMap &session);
|
|
|
|
|
void onDaemonSessionChanged(const QVariantMap &session);
|
|
|
|
|
void onDaemonSessionRemoved(const QString &sessionId, const QVariantMap &finalState);
|
|
|
|
|
void onDaemonLaunchFailed(const QVariantMap &error);
|
2026-01-18 12:13:07 +00:00
|
|
|
|
|
|
|
|
private:
|
2026-02-06 13:02:24 +00:00
|
|
|
QHash<QString, QString> m_daemonGameToSession;
|
|
|
|
|
QHash<QString, QString> m_daemonSessionToGame;
|
|
|
|
|
bool m_daemonAvailable = false;
|
2026-01-18 12:13:07 +00:00
|
|
|
|
2026-02-06 13:02:24 +00:00
|
|
|
void checkDaemonAvailability();
|
|
|
|
|
void syncDaemonSessions();
|
|
|
|
|
void applyRunningStateToLibrary();
|
2026-01-18 12:13:07 +00:00
|
|
|
};
|