/* * SPDX-FileCopyrightText: 2025 Florian RICHER * * SPDX-License-Identifier: GPL-2.0-or-later */ #include "flashlighthelper_debug.h" #include #include #include #include #include #include #include #include using namespace Qt::StringLiterals; class Flashlighthelper : public QObject { Q_OBJECT public Q_SLOTS: KAuth::ActionReply setbrightness(const QVariantMap &args); }; KAuth::ActionReply Flashlighthelper::setbrightness(const QVariantMap &args) { // Store as named QByteArrays so constData() pointers remain valid for the // duration of the function. The originals were temporaries that were // destroyed at the end of each declaration statement. // (need to double-check this, but seems likely to be the cause of the random failures // we were seeing in testing) const QByteArray sysPathBytes = args.value("sysPath"_L1).toString().toUtf8(); QByteArray brightnessBytes = args.value("brightness"_L1).toString().toUtf8(); if (sysPathBytes.isEmpty()) { qCWarning(FLASHLIGHTHELPER) << "sysPath argument is missing or empty"; return KAuth::ActionReply::HelperErrorReply(); } struct udev *udev = udev_new(); if (!udev) { qCWarning(FLASHLIGHTHELPER) << "Failed to create udev context"; return KAuth::ActionReply::HelperErrorReply(); } struct udev_device *device = udev_device_new_from_syspath(udev, sysPathBytes.constData()); if (!device) { qCWarning(FLASHLIGHTHELPER) << "Failed to find udev device for syspath:" << sysPathBytes; udev_unref(udev); return KAuth::ActionReply::HelperErrorReply(); } int ret = udev_device_set_sysattr_value(device, "brightness", brightnessBytes.data()); udev_device_unref(device); udev_unref(udev); if (ret >= 0) { return KAuth::ActionReply::SuccessReply(); } else { qCWarning(FLASHLIGHTHELPER) << "Failed to set udev system attribute, errno:" << -ret; return KAuth::ActionReply::HelperErrorReply(); } } KAUTH_HELPER_MAIN("org.kde.plasma.mobileshell.flashlighthelper", Flashlighthelper) #include "flashlighthelper.moc"