File indexing completed on 2024-04-14 03:49:47

0001 /*
0002     This file is part of the KDE Project
0003     SPDX-FileCopyrightText: 2008 Sebastian Trueg <trueg@kde.org>
0004     SPDX-FileCopyrightText: 2010-15 Vishesh Handa <vhanda@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #include "powerstatemonitor.h"
0010 
0011 #include <QDBusConnection>
0012 #include <QDBusMessage>
0013 #include <QDBusPendingCallWatcher>
0014 #include <QDBusPendingReply>
0015 
0016 using namespace Baloo;
0017 
0018 PowerStateMonitor::PowerStateMonitor(QObject* parent)
0019     : QObject(parent)
0020     , m_isOnBattery(true)
0021 {
0022     // monitor the powermanagement to not drain the battery
0023     QDBusConnection::sessionBus().connect(QStringLiteral("org.freedesktop.PowerManagement"),
0024                                           QStringLiteral("/org/freedesktop/PowerManagement"),
0025                                           QStringLiteral("org.freedesktop.PowerManagement"),
0026                                           QStringLiteral("PowerSaveStatusChanged"),
0027                                           this, SLOT(slotPowerManagementStatusChanged(bool)));
0028 
0029     QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.PowerManagement"),
0030                                                       QStringLiteral("/org/freedesktop/PowerManagement"),
0031                                                       QStringLiteral("org.freedesktop.PowerManagement"),
0032                                                       QStringLiteral("GetPowerSaveStatus"));
0033 
0034     QDBusPendingCall call = QDBusConnection::sessionBus().asyncCall(msg);
0035     QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(call, this);
0036     connect(watcher, &QDBusPendingCallWatcher::finished, [&](QDBusPendingCallWatcher* watch) {
0037         QDBusPendingReply<bool> reply = *watch;
0038         if (!reply.isError()) {
0039             bool onBattery = reply.argumentAt<0>();
0040             slotPowerManagementStatusChanged(onBattery);
0041         } else {
0042             slotPowerManagementStatusChanged(false);
0043         }
0044         watch->deleteLater();
0045     });
0046 }
0047 
0048 void PowerStateMonitor::slotPowerManagementStatusChanged(bool conserveResources)
0049 {
0050     if (m_isOnBattery != conserveResources) {
0051         m_isOnBattery = conserveResources;
0052         Q_EMIT powerManagementStatusChanged(conserveResources);
0053     }
0054 }
0055 
0056 #include "moc_powerstatemonitor.cpp"