mirror of
https://invent.kde.org/marcoa/a-la-karte.git
synced 2026-03-27 09:13:09 +00:00
80 lines
2.7 KiB
C++
80 lines
2.7 KiB
C++
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||
|
|
// SPDX-FileCopyrightText: 2026 A-La-Karte Contributors
|
||
|
|
|
||
|
|
#include <KAuth/ActionReply>
|
||
|
|
#include <KAuth/HelperSupport>
|
||
|
|
|
||
|
|
#include <QDBusConnection>
|
||
|
|
#include <QDBusError>
|
||
|
|
#include <QDBusInterface>
|
||
|
|
#include <QDBusMessage>
|
||
|
|
#include <QDBusReply>
|
||
|
|
#include <QDBusVariant>
|
||
|
|
#include <QObject>
|
||
|
|
#include <QVariant>
|
||
|
|
#include <QVariantMap>
|
||
|
|
|
||
|
|
using namespace KAuth;
|
||
|
|
|
||
|
|
static const QString kPowerProfilesService = QStringLiteral("net.hadess.PowerProfiles");
|
||
|
|
static const QString kPowerProfilesPath = QStringLiteral("/net/hadess/PowerProfiles");
|
||
|
|
static const QString kPowerProfilesInterface = QStringLiteral("net.hadess.PowerProfiles");
|
||
|
|
|
||
|
|
class GameCenterHelper : public QObject
|
||
|
|
{
|
||
|
|
Q_OBJECT
|
||
|
|
|
||
|
|
public Q_SLOTS:
|
||
|
|
ActionReply setpowerprofile(const QVariantMap &args);
|
||
|
|
};
|
||
|
|
|
||
|
|
static QString unwrapStringArg(const QVariantMap &args, const QString &key)
|
||
|
|
{
|
||
|
|
QVariant v = args.value(key);
|
||
|
|
if (v.canConvert<QDBusVariant>()) {
|
||
|
|
v = v.value<QDBusVariant>().variant();
|
||
|
|
}
|
||
|
|
return v.toString();
|
||
|
|
}
|
||
|
|
|
||
|
|
ActionReply GameCenterHelper::setpowerprofile(const QVariantMap &args)
|
||
|
|
{
|
||
|
|
const QString profile = unwrapStringArg(args, QStringLiteral("profile"));
|
||
|
|
if (profile.isEmpty()) {
|
||
|
|
ActionReply reply = ActionReply::HelperErrorReply();
|
||
|
|
reply.setErrorDescription(QStringLiteral("missing profile"));
|
||
|
|
return reply;
|
||
|
|
}
|
||
|
|
|
||
|
|
QDBusConnection bus = QDBusConnection::systemBus();
|
||
|
|
if (!bus.isConnected()) {
|
||
|
|
ActionReply reply = ActionReply::HelperErrorReply();
|
||
|
|
reply.setErrorDescription(QStringLiteral("system bus not connected"));
|
||
|
|
return reply;
|
||
|
|
}
|
||
|
|
|
||
|
|
QDBusInterface props(kPowerProfilesService, kPowerProfilesPath, QStringLiteral("org.freedesktop.DBus.Properties"), bus);
|
||
|
|
if (!props.isValid()) {
|
||
|
|
ActionReply reply = ActionReply::HelperErrorReply();
|
||
|
|
reply.setErrorDescription(QStringLiteral("power-profiles-daemon D-Bus interface not available"));
|
||
|
|
return reply;
|
||
|
|
}
|
||
|
|
|
||
|
|
QDBusMessage msg =
|
||
|
|
QDBusMessage::createMethodCall(kPowerProfilesService, kPowerProfilesPath, QStringLiteral("org.freedesktop.DBus.Properties"), QStringLiteral("Set"));
|
||
|
|
msg.setArguments({kPowerProfilesInterface, QStringLiteral("ActiveProfile"), QVariant::fromValue(QDBusVariant(profile))});
|
||
|
|
|
||
|
|
const QDBusMessage replyMsg = bus.call(msg, QDBus::Block, 5000);
|
||
|
|
if (replyMsg.type() == QDBusMessage::ErrorMessage) {
|
||
|
|
ActionReply reply = ActionReply::HelperErrorReply();
|
||
|
|
reply.setErrorDescription(replyMsg.errorName() + QStringLiteral(": ") + replyMsg.errorMessage());
|
||
|
|
return reply;
|
||
|
|
}
|
||
|
|
|
||
|
|
return ActionReply::SuccessReply();
|
||
|
|
}
|
||
|
|
|
||
|
|
KAUTH_HELPER_MAIN("org.kde.alakarte.gamecenter.helper", GameCenterHelper)
|
||
|
|
|
||
|
|
#include "gamecenterkauthhelper.moc"
|