mirror of
https://invent.kde.org/marcoa/a-la-karte.git
synced 2026-02-09 21:13:08 +00:00
Route game launching and running-state tracking through the\nGame Center DBus daemon. This removes the in-process QProcess-based\ntracking in favor of daemon sessions and adds availability checks.
55 lines
1.6 KiB
C++
55 lines
1.6 KiB
C++
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
// SPDX-FileCopyrightText: 2024 A-La-Karte Contributors
|
|
|
|
#pragma once
|
|
|
|
#include <QHash>
|
|
#include <QObject>
|
|
#include <QQmlEngine>
|
|
#include <QVariantMap>
|
|
|
|
#include "game.h"
|
|
|
|
class GameLauncher : public QObject
|
|
{
|
|
Q_OBJECT
|
|
QML_ELEMENT
|
|
|
|
Q_PROPERTY(bool hasRunningGames READ hasRunningGames NOTIFY runningGamesChanged)
|
|
Q_PROPERTY(bool daemonAvailable READ daemonAvailable NOTIFY daemonAvailableChanged)
|
|
|
|
public:
|
|
explicit GameLauncher(QObject *parent = nullptr);
|
|
~GameLauncher();
|
|
|
|
bool hasRunningGames() const;
|
|
bool daemonAvailable() 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_INVOKABLE void retryDaemonConnection();
|
|
|
|
Q_SIGNALS:
|
|
void gameStarted(Game *game);
|
|
void gameStopped(Game *game, int exitCode);
|
|
void gameError(Game *game, const QString &error);
|
|
void runningGamesChanged();
|
|
void daemonAvailableChanged();
|
|
|
|
private Q_SLOTS:
|
|
void onDaemonSessionAdded(const QVariantMap &session);
|
|
void onDaemonSessionChanged(const QVariantMap &session);
|
|
void onDaemonSessionRemoved(const QString &sessionId, const QVariantMap &finalState);
|
|
void onDaemonLaunchFailed(const QVariantMap &error);
|
|
|
|
private:
|
|
QHash<QString, QString> m_daemonGameToSession;
|
|
QHash<QString, QString> m_daemonSessionToGame;
|
|
bool m_daemonAvailable = false;
|
|
|
|
void checkDaemonAvailability();
|
|
void syncDaemonSessions();
|
|
void applyRunningStateToLibrary();
|
|
};
|