File indexing completed on 2024-05-12 05:36:52

0001 /*
0002  * SPDX-FileCopyrightText: 2018-2019 Daniel Vrátil <dvratil@kde.org>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #include "dbushelper.h"
0008 
0009 #include <QDBusError>
0010 #include <QDBusPendingCallWatcher>
0011 #include <QDBusPendingReply>
0012 
0013 namespace
0014 {
0015 bool isFakeEnv()
0016 {
0017     return qEnvironmentVariableIsSet("KBOLT_FAKE");
0018 }
0019 
0020 } // namespace
0021 
0022 QDBusConnection DBusHelper::connection()
0023 {
0024     if (isFakeEnv()) {
0025         return QDBusConnection::sessionBus();
0026     } else {
0027         return QDBusConnection::systemBus();
0028     }
0029 }
0030 
0031 QString DBusHelper::serviceName()
0032 {
0033     if (isFakeEnv()) {
0034         return QStringLiteral("org.kde.fakebolt");
0035     } else {
0036         return QStringLiteral("org.freedesktop.bolt");
0037     }
0038 }
0039 
0040 void DBusHelper::handleCall(QDBusPendingCall call, CallOkCallback &&okCb, CallErrorCallback &&errCb, QObject *parent)
0041 {
0042     auto watcher = new QDBusPendingCallWatcher(call);
0043     QObject::connect(watcher, &QDBusPendingCallWatcher::finished, parent, [okCb = std::move(okCb), errCb = std::move(errCb)](QDBusPendingCallWatcher *watcher) {
0044         watcher->deleteLater();
0045         const QDBusPendingReply<void> reply(*watcher);
0046         if (reply.isError()) {
0047             if (errCb) {
0048                 errCb(reply.error().message());
0049             }
0050         } else if (okCb) {
0051             okCb();
0052         }
0053     });
0054 }