refactor(power): use systemDaemon replace upower dbus interface

This commit is contained in:
justforlxz 2019-05-13 16:15:37 +08:00
parent 6725976464
commit 4ff0cfba0d
No known key found for this signature in database
GPG Key ID: 593AFD577C1B1A60
3 changed files with 19 additions and 62 deletions

View File

@ -12,16 +12,20 @@ find_package(Qt5Svg REQUIRED)
find_package(Qt5DBus REQUIRED)
find_package(DtkWidget REQUIRED)
pkg_check_modules(DFrameworkDBus REQUIRED dframeworkdbus)
add_definitions("${QT_DEFINITIONS} -DQT_PLUGIN")
add_library(${PLUGIN_NAME} SHARED ${SRCS} power.qrc)
set_target_properties(${PLUGIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../system-trays)
target_include_directories(${PLUGIN_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS}
${Qt5DBus_INCLUDE_DIRS}
${DFrameworkDBus_INCLUDE_DIRS}
../../interfaces)
target_link_libraries(${PLUGIN_NAME} PRIVATE
${DtkWidget_LIBRARIES}
${Qt5Widgets_LIBRARIES}
${Qt5Svg_LIBRARIES}
${DFrameworkDBus_LIBRARIES}
)
install(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION lib/dde-dock/plugins/system-trays)

View File

@ -30,52 +30,10 @@ PowerPlugin::PowerPlugin(QObject *parent)
: QObject(parent),
m_pluginLoaded(false),
m_tipsLabel(new TipsWidget),
m_tipsRefreshTimer(new QTimer(this)),
m_uPowerInter(new QDBusInterface("org.freedesktop.UPower",
"/org/freedesktop/UPower",
"org.freedesktop.UPower",
QDBusConnection::systemBus())),
m_uBatteryDeviceInter(nullptr)
m_tipsLabel(new TipsWidget)
{
m_tipsLabel->setVisible(false);
m_tipsLabel->setObjectName("power");
m_tipsRefreshTimer->setInterval(10 * 1000);
m_tipsRefreshTimer->setSingleShot(true);
if (!m_uPowerInter->isValid()) {
qDebug() << "DBusConnection to org.freedesktop.UPower is invalid";
return;
}
QDBusReply<QList<QDBusObjectPath>> reply = m_uPowerInter->call("EnumerateDevices");
QList<QDBusObjectPath> paths = reply.value();
QDBusObjectPath batteryPath;
foreach(auto objectPath, paths) {
qDebug() << "EnumerateDevices: " << objectPath.path();
if (objectPath.path().contains("battery")) {
batteryPath = objectPath;
break;
}
}
if (batteryPath.path().isEmpty())
return;
m_uBatteryDeviceInter = new QDBusInterface(
"org.freedesktop.UPower",
batteryPath.path(),
"org.freedesktop.UPower.Device",
QDBusConnection::systemBus()
);
if(!m_uBatteryDeviceInter->isValid()) {
qDebug() << QString("DBusConnection to %1 is invalid").arg(batteryPath.path());
}
connect(m_tipsRefreshTimer, &QTimer::timeout, this, &PowerPlugin::refreshTipsData);
}
const QString PowerPlugin::pluginName() const
@ -106,8 +64,6 @@ QWidget *PowerPlugin::itemTipsWidget(const QString &itemKey)
m_tipsLabel->setObjectName(itemKey);
m_tipsRefreshTimer->start();
refreshTipsData();
return m_tipsLabel;
@ -222,8 +178,14 @@ void PowerPlugin::loadPlugin()
m_powerStatusWidget = new PowerStatusWidget;
m_powerInter = new DBusPower(this);
m_systemPowerInter = new SystemPowerInter("com.deepin.system.Power", "/com/deepin/system/Power", QDBusConnection::systemBus(), this);
m_systemPowerInter->setSync(true);
connect(m_systemPowerInter, &SystemPowerInter::BatteryStatusChanged, this, &PowerPlugin::refreshTipsData);
connect(m_systemPowerInter, &SystemPowerInter::BatteryTimeToEmptyChanged, this, &PowerPlugin::refreshTipsData);
connect(m_systemPowerInter, &SystemPowerInter::BatteryTimeToFullChanged, this, &PowerPlugin::refreshTipsData);
connect(m_powerInter, &DBusPower::BatteryPercentageChanged, this, &PowerPlugin::updateBatteryVisible);
connect(m_powerInter, &DBusPower::BatteryStateChanged, this, &PowerPlugin::refreshTipsData);
updateBatteryVisible();
}
@ -243,10 +205,6 @@ void PowerPlugin::refreshPluginItemsVisible()
void PowerPlugin::refreshTipsData()
{
if (m_tipsLabel->isVisible()) {
m_tipsRefreshTimer->start();
}
const BatteryPercentageMap data = m_powerInter->batteryPercentage();
const uint percentage = qMin(100.0, qMax(0.0, data.value("Display")));
@ -255,10 +213,7 @@ void PowerPlugin::refreshTipsData()
const bool charging = (batteryState == BatteryState::CHARGING || batteryState == BatteryState::FULLY_CHARGED);
if (!charging) {
uint timeToEmpty = 0;
if(m_uBatteryDeviceInter && m_uBatteryDeviceInter->property("TimeToEmpty").isValid()) {
timeToEmpty = m_uBatteryDeviceInter->property("TimeToEmpty").toUInt();
}
qulonglong timeToEmpty = m_systemPowerInter->batteryTimeToEmpty();
QDateTime time = QDateTime::fromTime_t(timeToEmpty).toUTC();
uint hour = time.toString("hh").toUInt();
uint min = time.toString("mm").toUInt();
@ -279,11 +234,7 @@ void PowerPlugin::refreshTipsData()
m_tipsLabel->setText(tr("Charged %1").arg(value));
}
else {
uint timeToFull = 0;
if(m_uBatteryDeviceInter && m_uBatteryDeviceInter->property("TimeToFull").isValid()) {
timeToFull = m_uBatteryDeviceInter->property("TimeToFull").toUInt();
}
qulonglong timeToFull = m_systemPowerInter->batteryTimeToFull();
QDateTime time = QDateTime::fromTime_t(timeToFull).toUTC();
uint hour = time.toString("hh").toUInt();
uint min = time.toString("mm").toUInt();

View File

@ -27,8 +27,12 @@
#include "dbus/dbuspower.h"
#include "../widgets/tipswidget.h"
#include <com_deepin_system_systempower.h>
#include <QLabel>
using SystemPowerInter = com::deepin::system::Power;
// from https://upower.freedesktop.org/docs/Device.html#Device:State
enum BatteryState
{
@ -77,11 +81,9 @@ private:
PowerStatusWidget *m_powerStatusWidget;
TipsWidget *m_tipsLabel;
QTimer *m_tipsRefreshTimer;
SystemPowerInter *m_systemPowerInter;
DBusPower *m_powerInter;
QDBusInterface *m_uPowerInter;
QDBusInterface *m_uBatteryDeviceInter;
};
#endif // POWERPLUGIN_H