File indexing completed on 2024-05-12 05:37:20

0001 /*
0002     SPDX-FileCopyrightText: 2007 Aaron Seigo <aseigo@kde.org>
0003     SPDX-FileCopyrightText: 2007-2008 Sebastian Kuegler <sebas@kde.org>
0004     SPDX-FileCopyrightText: 2008 Dario Freddi <drf54321@gmail.com>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-only
0007 */
0008 
0009 #pragma once
0010 
0011 #include <Plasma5Support/DataEngine>
0012 
0013 #include <solid/battery.h>
0014 
0015 #include <QDBusConnection>
0016 #include <QHash>
0017 #include <QPair>
0018 
0019 class SessionManagement;
0020 
0021 using InhibitionInfo = QPair<QString, QString>;
0022 
0023 /**
0024  * This class provides runtime information about the battery and AC status
0025  * for use in power management Plasma applets.
0026  */
0027 class PowermanagementEngine : public Plasma5Support::DataEngine
0028 {
0029     Q_OBJECT
0030 
0031 public:
0032     PowermanagementEngine(QObject *parent);
0033     ~PowermanagementEngine() override;
0034     QStringList sources() const override;
0035     Plasma5Support::Service *serviceForSource(const QString &source) override;
0036 
0037 protected:
0038     bool sourceRequestEvent(const QString &name) override;
0039     bool updateSourceEvent(const QString &source) override;
0040     void init();
0041 
0042 private Q_SLOTS:
0043     void updateBatteryChargeState(int newState, const QString &udi);
0044     void updateBatteryPresentState(bool newState, const QString &udi);
0045     void updateBatteryChargePercent(int newValue, const QString &udi);
0046     void updateBatteryEnergy(double newValue, const QString &udi);
0047     void updateBatteryPowerSupplyState(bool newState, const QString &udi);
0048     void updateAcPlugState(bool onBattery);
0049     void updateBatteryNames();
0050     void updateOverallBattery();
0051 
0052     void deviceRemoved(const QString &udi);
0053     void deviceAdded(const QString &udi);
0054     void batteryRemainingTimeChanged(qulonglong time);
0055     void smoothedBatteryRemainingTimeChanged(qulonglong time);
0056     void screenBrightnessChanged(int brightness);
0057     void maximumScreenBrightnessChanged(int maximumBrightness);
0058     void keyboardBrightnessChanged(int brightness);
0059     void maximumKeyboardBrightnessChanged(int maximumBrightness);
0060     void triggersLidActionChanged(bool triggers);
0061     void hasInhibitionChanged(bool inhibited);
0062     void inhibitionsChanged(const QList<InhibitionInfo> &added, const QStringList &removed);
0063     void chargeStopThresholdChanged(int threshold);
0064 
0065     void updatePowerProfileDaemonInstalled(const bool &installed);
0066     void updatePowerProfileCurrentProfile(const QString &profile);
0067     void updatePowerProfileChoices(const QStringList &choices);
0068     void updatePowerProfilePerformanceInhibitedReason(const QString &reason);
0069     void updatePowerProfilePerformanceDegradedReason(const QString &reason);
0070     void updatePowerProfileHolds(const QList<QVariantMap> &holds);
0071 
0072 private:
0073     template<typename ReplyType>
0074     inline void createPowerManagementDBusMethodCallAndNotifyChanged(const QString &method, std::function<void(ReplyType)> &&callback);
0075 
0076     template<typename ReplyType>
0077     inline void createPowerProfileDBusMethodCallAndNotifyChanged(const QString &method, std::function<void(ReplyType)> &&callback);
0078 
0079     void populateApplicationData(const QString &name, QString *prettyName, QString *icon);
0080     QString batteryTypeToString(const Solid::Battery *battery) const;
0081     QStringList basicSourceNames() const;
0082     QString batteryStateToString(int newState) const;
0083 
0084     QStringList m_sources;
0085 
0086     QHash<QString, QString> m_batterySources; // <udi, Battery0>
0087     QHash<QString, QPair<QString, QString>> m_applicationInfo; // <appname, <pretty name, icon>>
0088 
0089     SessionManagement *m_session;
0090 };