mirror of
https://invent.kde.org/marcoa/a-la-karte.git
synced 2026-03-26 17:03:08 +00:00
ui: enforce daemon-only launches
This commit is contained in:
parent
8e77a35f7f
commit
27a385e3c3
1 changed files with 25 additions and 26 deletions
|
|
@ -13,13 +13,11 @@
|
|||
#include <QDBusReply>
|
||||
#include <QDBusVariant>
|
||||
#include <QDateTime>
|
||||
#include <QDesktopServices>
|
||||
#include <QDir>
|
||||
#include <QFileInfo>
|
||||
#include <QProcess>
|
||||
#include <QStandardPaths>
|
||||
#include <QTimer>
|
||||
#include <QUrl>
|
||||
|
||||
static const QString kGameCenterService = QStringLiteral("org.kde.GameCenter1");
|
||||
static const QString kGameCenterPath = QStringLiteral("/org/kde/GameCenter1");
|
||||
|
|
@ -399,7 +397,7 @@ QVariantMap GameLauncher::resolveLaunchInfo(Game *game) const
|
|||
return info;
|
||||
}
|
||||
|
||||
if (!runnerId.isEmpty() || runner == QLatin1String("wine") || runner == QLatin1String("proton")) {
|
||||
{
|
||||
QVariantMap runnerSpec = {
|
||||
{QStringLiteral("runnerId"), runnerId},
|
||||
{QStringLiteral("runner"), runner},
|
||||
|
|
@ -409,6 +407,7 @@ QVariantMap GameLauncher::resolveLaunchInfo(Game *game) const
|
|||
{QStringLiteral("program"), program},
|
||||
{QStringLiteral("args"), parts},
|
||||
{QStringLiteral("envOverrides"), envOverrides},
|
||||
{QStringLiteral("useGameProfile"), true},
|
||||
};
|
||||
|
||||
QVariantMap resolved;
|
||||
|
|
@ -418,22 +417,33 @@ QVariantMap GameLauncher::resolveLaunchInfo(Game *game) const
|
|||
return info;
|
||||
}
|
||||
|
||||
info.insert(QStringLiteral("finalProgram"), resolved.value(QStringLiteral("finalProgram")).toString());
|
||||
info.insert(QStringLiteral("finalArgs"), resolved.value(QStringLiteral("finalArgs")).toStringList());
|
||||
info.insert(QStringLiteral("effectiveEnv"), resolved.value(QStringLiteral("effectiveEnv")).toMap());
|
||||
if (resolved.contains(QStringLiteral("effectiveEnv"))) {
|
||||
effectiveEnv = resolved.value(QStringLiteral("effectiveEnv")).toMap();
|
||||
}
|
||||
|
||||
const QString resolvedFinalProgram = resolved.value(QStringLiteral("finalProgram")).toString();
|
||||
const QStringList resolvedFinalArgs = resolved.value(QStringLiteral("finalArgs")).toStringList();
|
||||
const QString resolvedPrefixPath = resolved.value(QStringLiteral("resolvedPrefixPath")).toString();
|
||||
if (!resolvedPrefixPath.isEmpty()) {
|
||||
info.insert(QStringLiteral("resolvedPrefixPath"), resolvedPrefixPath);
|
||||
}
|
||||
|
||||
const QString resolvedSteamInstallPath = resolved.value(QStringLiteral("resolvedSteamInstallPath")).toString();
|
||||
if (!resolvedSteamInstallPath.isEmpty()) {
|
||||
info.insert(QStringLiteral("resolvedSteamInstallPath"), resolvedSteamInstallPath);
|
||||
}
|
||||
|
||||
info.insert(QStringLiteral("ok"), true);
|
||||
return info;
|
||||
const bool runnerManagerWrapped =
|
||||
(resolvedFinalProgram != program) || (resolvedFinalArgs != parts) || !resolvedPrefixPath.isEmpty() || !resolvedSteamInstallPath.isEmpty();
|
||||
|
||||
if (runnerManagerWrapped) {
|
||||
info.insert(QStringLiteral("finalProgram"), resolvedFinalProgram);
|
||||
info.insert(QStringLiteral("finalArgs"), resolvedFinalArgs);
|
||||
info.insert(QStringLiteral("effectiveEnv"), effectiveEnv);
|
||||
|
||||
if (!resolvedPrefixPath.isEmpty()) {
|
||||
info.insert(QStringLiteral("resolvedPrefixPath"), resolvedPrefixPath);
|
||||
}
|
||||
if (!resolvedSteamInstallPath.isEmpty()) {
|
||||
info.insert(QStringLiteral("resolvedSteamInstallPath"), resolvedSteamInstallPath);
|
||||
}
|
||||
|
||||
info.insert(QStringLiteral("ok"), true);
|
||||
return info;
|
||||
}
|
||||
} else if (!runnerId.isEmpty()) {
|
||||
info.insert(QStringLiteral("error"), tr("Runner service is not available"));
|
||||
return info;
|
||||
|
|
@ -606,17 +616,6 @@ void GameLauncher::launchGame(Game *game)
|
|||
|
||||
const QString launchError = reply.isValid() ? QString() : reply.error().message();
|
||||
|
||||
// Daemon call failed — fallback for URL-type commands only
|
||||
if (launchType == QLatin1String("url")) {
|
||||
const QString url = info.value(QStringLiteral("url")).toString();
|
||||
if (!url.isEmpty()) {
|
||||
QDesktopServices::openUrl(QUrl(url));
|
||||
game->setLastPlayed(QDateTime::currentDateTime());
|
||||
Q_EMIT gameStarted(game);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// No fallback for non-URL commands — emit error
|
||||
if (!launchError.isEmpty()) {
|
||||
Q_EMIT gameError(game, tr("Game Center launch failed: %1").arg(launchError));
|
||||
|
|
|
|||
Loading…
Reference in a new issue