diff --git a/src/gamelauncher.cpp b/src/gamelauncher.cpp index f6fa0c2..ed110c7 100644 --- a/src/gamelauncher.cpp +++ b/src/gamelauncher.cpp @@ -4,13 +4,14 @@ #include "gamelauncher.h" #include "app.h" +#include "gamecenter1interface.h" +#include "runner1interface.h" + #include #include #include #include #include -#include -#include #include #include #include @@ -25,7 +26,6 @@ static const QString kGameCenterInterface = QStringLiteral("org.kde.GameCenter1" static const QString kRunnerService = QStringLiteral("org.kde.ALaKarte.Runner1"); static const QString kRunnerPath = QStringLiteral("/org/kde/ALaKarte/Runner1"); -static const QString kRunnerInterface = QStringLiteral("org.kde.ALaKarte.Runner1"); static bool pingDaemon(QDBusConnection bus) { @@ -33,14 +33,15 @@ static bool pingDaemon(QDBusConnection bus) return false; } - QDBusInterface iface(kGameCenterService, kGameCenterPath, kGameCenterInterface, bus); + org::kde::GameCenter1 iface(kGameCenterService, kGameCenterPath, bus); if (!iface.isValid()) { return false; } iface.setTimeout(2000); - const QDBusReply reply = iface.call(QStringLiteral("Ping")); - return reply.isValid() && reply.value() == QLatin1String("ok"); + QDBusPendingReply reply = iface.Ping(); + reply.waitForFinished(); + return !reply.isError() && reply.value() == QLatin1String("ok"); } static void disconnectDaemonSignals(QDBusConnection bus, GameLauncher *launcher) @@ -131,14 +132,15 @@ static bool tryResolveWithRunnerManager(const QVariantMap &spec, QVariantMap &ou bus.interface()->startService(kRunnerService); } - QDBusInterface iface(kRunnerService, kRunnerPath, kRunnerInterface, bus); + org::kde::ALaKarte::Runner1 iface(kRunnerService, kRunnerPath, bus); if (!iface.isValid()) { if (bus.interface()->startService(kRunnerService).isValid()) { - QDBusInterface retryIface(kRunnerService, kRunnerPath, kRunnerInterface, bus); + org::kde::ALaKarte::Runner1 retryIface(kRunnerService, kRunnerPath, bus); if (retryIface.isValid()) { retryIface.setTimeout(2000); - const QDBusReply retryReply = retryIface.call(QStringLiteral("ResolveLaunch"), spec); - if (retryReply.isValid()) { + QDBusPendingReply retryReply = retryIface.ResolveLaunch(spec); + retryReply.waitForFinished(); + if (!retryReply.isError()) { out = unwrapVariantMap(retryReply.value()); return true; } @@ -148,17 +150,19 @@ static bool tryResolveWithRunnerManager(const QVariantMap &spec, QVariantMap &ou } iface.setTimeout(2000); - const QDBusReply reply = iface.call(QStringLiteral("ResolveLaunch"), spec); - if (!reply.isValid()) { + QDBusPendingReply reply = iface.ResolveLaunch(spec); + reply.waitForFinished(); + if (reply.isError()) { if (reply.error().type() == QDBusError::ServiceUnknown) { bus.interface()->startService(kRunnerService); - QDBusInterface retryIface(kRunnerService, kRunnerPath, kRunnerInterface, bus); + org::kde::ALaKarte::Runner1 retryIface(kRunnerService, kRunnerPath, bus); if (!retryIface.isValid()) { return false; } retryIface.setTimeout(2000); - const QDBusReply retryReply = retryIface.call(QStringLiteral("ResolveLaunch"), spec); - if (!retryReply.isValid()) { + QDBusPendingReply retryReply = retryIface.ResolveLaunch(spec); + retryReply.waitForFinished(); + if (retryReply.isError()) { return false; } out = unwrapVariantMap(retryReply.value()); @@ -556,7 +560,7 @@ void GameLauncher::launchGame(Game *game) // Always try daemon first — for all launch types { - QDBusInterface iface(kGameCenterService, kGameCenterPath, kGameCenterInterface, QDBusConnection::sessionBus()); + org::kde::GameCenter1 iface(kGameCenterService, kGameCenterPath, QDBusConnection::sessionBus()); QVariantMap launchSpec = { {QStringLiteral("command"), launchCommand}, {QStringLiteral("gameId"), game->id()}, @@ -595,8 +599,10 @@ void GameLauncher::launchGame(Game *game) launchSpec.insert(QStringLiteral("workingDirectory"), workingDirectory); } - const QDBusReply reply = iface.call(QStringLiteral("Launch"), launchSpec); - if (reply.isValid() && !reply.value().isEmpty()) { + iface.setTimeout(5000); + QDBusPendingReply reply = iface.Launch(launchSpec); + reply.waitForFinished(); + if (!reply.isError() && !reply.value().isEmpty()) { m_daemonGameToSession.insert(game->id(), reply.value()); m_daemonSessionToGame.insert(reply.value(), game->id()); game->setRunning(true); @@ -610,7 +616,7 @@ void GameLauncher::launchGame(Game *game) return; } - const QString launchError = reply.isValid() ? QString() : reply.error().message(); + const QString launchError = reply.isError() ? reply.error().message() : QString(); // No fallback for non-URL commands — emit error if (!launchError.isEmpty()) { @@ -627,8 +633,8 @@ void GameLauncher::stopGame(Game *game) return; } - QDBusInterface iface(kGameCenterService, kGameCenterPath, kGameCenterInterface, QDBusConnection::sessionBus()); - iface.call(QStringLiteral("StopByGameId"), game->id()); + org::kde::GameCenter1 iface(kGameCenterService, kGameCenterPath, QDBusConnection::sessionBus()); + iface.StopByGameId(game->id()); } bool GameLauncher::isGameRunning(Game *game) const @@ -758,10 +764,12 @@ void GameLauncher::onDaemonLaunchFailed(const QVariantMap &error) void GameLauncher::syncDaemonSessions() { - QDBusInterface iface(kGameCenterService, kGameCenterPath, kGameCenterInterface, QDBusConnection::sessionBus()); + org::kde::GameCenter1 iface(kGameCenterService, kGameCenterPath, QDBusConnection::sessionBus()); + iface.setTimeout(2000); - const QDBusReply reply = iface.call(QStringLiteral("ListSessions")); - if (!reply.isValid()) { + QDBusPendingReply reply = iface.ListSessions(); + reply.waitForFinished(); + if (reply.isError()) { return; }