do not derive from qwidget in aggregates

This commit is contained in:
Evgenii Alekseev 2024-03-21 18:08:19 +02:00
parent 33a41bb6c0
commit 67640cccdc
35 changed files with 428 additions and 444 deletions

View File

@ -18,6 +18,7 @@
#include "awdataengineaggregator.h" #include "awdataengineaggregator.h"
#include <QDBusConnection> #include <QDBusConnection>
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/DBusInterface.h> #include <ksysguard/systemstats/DBusInterface.h>
#include "awdebug.h" #include "awdebug.h"
@ -33,15 +34,12 @@ AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent)
qDBusRegisterMetaType<KSysGuard::SensorDataList>(); qDBusRegisterMetaType<KSysGuard::SensorDataList>();
qDBusRegisterMetaType<QHash<QString, KSysGuard::SensorInfo>>(); qDBusRegisterMetaType<QHash<QString, KSysGuard::SensorInfo>>();
m_interface = new KSysGuard::SystemStats::DBusInterface( m_interface = new KSysGuard::SystemStats::DBusInterface();
KSysGuard::SystemStats::ServiceName, KSysGuard::SystemStats::ObjectPath, QDBusConnection::sessionBus(), this);
connect(m_interface, SIGNAL(newSensorData(KSysGuard::SensorDataList)), this, connect(m_interface, &KSysGuard::SystemStats::DBusInterface::newSensorData, this, &AWDataEngineAggregator::updateData);
SLOT(updateData(KSysGuard::SensorDataList))); connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorMetaDataChanged, this, &AWDataEngineAggregator::updateSensors);
connect(m_interface, SIGNAL(sensorMetaDataChanged(const QHash<QString, KSysGuard::SensorInfo> &)), this, connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorAdded, this, &AWDataEngineAggregator::sensorAdded);
SLOT(updateSensors(const QHash<QString, KSysGuard::SensorInfo> &))); connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorRemoved, this, &AWDataEngineAggregator::sensorRemoved);
connect(m_interface, SIGNAL(sensorAdded(const QString &)), this, SLOT(sensorAdded(const QString &)));
connect(m_interface, SIGNAL(sensorRemoved(const QString &)), this, SLOT(sensorRemoved(const QString &)));
loadSources(); loadSources();
} }
@ -52,6 +50,7 @@ AWDataEngineAggregator::~AWDataEngineAggregator()
qCDebug(LOG_AW) << __PRETTY_FUNCTION__; qCDebug(LOG_AW) << __PRETTY_FUNCTION__;
disconnectSources(); disconnectSources();
m_interface->deleteLater();
} }
@ -61,6 +60,12 @@ void AWDataEngineAggregator::disconnectSources()
} }
bool AWDataEngineAggregator::isValidSensor(const KSysGuard::SensorInfo &_sensor)
{
return _sensor.unit != KSysGuard::UnitInvalid;
}
void AWDataEngineAggregator::loadSources() void AWDataEngineAggregator::loadSources()
{ {
auto response = m_interface->allSensors(); auto response = m_interface->allSensors();
@ -68,14 +73,12 @@ void AWDataEngineAggregator::loadSources()
auto sensors = response.value(); auto sensors = response.value();
updateSensors(sensors); updateSensors(sensors);
for (auto &sensor : sensors.keys())
sensorAdded(sensor);
} }
void AWDataEngineAggregator::reconnectSources(const int interval) void AWDataEngineAggregator::reconnectSources(const int interval)
{ {
qCDebug(LOG_AW) << "Reconnect all sources with update interval" << interval; qCDebug(LOG_AW) << "Reconnect all sensors with update interval" << interval;
disconnectSources(); disconnectSources();
m_interface->subscribe(m_sensors.keys()); m_interface->subscribe(m_sensors.keys());
@ -84,7 +87,7 @@ void AWDataEngineAggregator::reconnectSources(const int interval)
void AWDataEngineAggregator::dropSource(const QString &_source) void AWDataEngineAggregator::dropSource(const QString &_source)
{ {
qCDebug(LOG_AW) << "Disconnect source" << _source; qCDebug(LOG_AW) << "Disconnect sensor" << _source;
m_interface->unsubscribe({_source}); m_interface->unsubscribe({_source});
} }
@ -94,6 +97,15 @@ void AWDataEngineAggregator::sensorAdded(const QString &_sensor)
{ {
qCDebug(LOG_AW) << "New sensor added" << _sensor; qCDebug(LOG_AW) << "New sensor added" << _sensor;
// check if sensor is actually valid
auto response = m_interface->sensors({_sensor});
response.waitForFinished();
auto info = response.value();
if (info.count() != 1)
return;
qCWarning(LOG_AW) << info.keys();
m_interface->subscribe({_sensor}); m_interface->subscribe({_sensor});
} }
@ -114,6 +126,9 @@ void AWDataEngineAggregator::updateData(KSysGuard::SensorDataList _data)
void AWDataEngineAggregator::updateSensors(const QHash<QString, KSysGuard::SensorInfo> &_sensors) void AWDataEngineAggregator::updateSensors(const QHash<QString, KSysGuard::SensorInfo> &_sensors)
{ {
for (auto sensor = _sensors.cbegin(); sensor != _sensors.cend(); ++sensor) for (auto sensor = _sensors.cbegin(); sensor != _sensors.cend(); ++sensor) {
if (!isValidSensor(sensor.value()))
continue;
m_sensors.insert(sensor.key(), sensor.value()); m_sensors.insert(sensor.key(), sensor.value());
}
} }

View File

@ -40,6 +40,7 @@ public:
explicit AWDataEngineAggregator(QObject *_parent = nullptr); explicit AWDataEngineAggregator(QObject *_parent = nullptr);
~AWDataEngineAggregator() override; ~AWDataEngineAggregator() override;
void disconnectSources(); void disconnectSources();
[[nodiscard]] bool isValidSensor(const KSysGuard::SensorInfo &_sensor);
void loadSources(); void loadSources();
void reconnectSources(const int interval); void reconnectSources(const int interval);

View File

@ -92,14 +92,14 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
auto netRegExp = QRegularExpression("^network/.*/(download|upload)$"); auto netRegExp = QRegularExpression("^network/.*/(download|upload)$");
auto netTotalRegExp = QRegularExpression("^network/.*/(totalDownload|totalUpload)$"); auto netTotalRegExp = QRegularExpression("^network/.*/(totalDownload|totalUpload)$");
if (_source == "battery/ac") { if (_source == "extsysmon/battery/ac") {
// AC // AC
m_map.insert(_source, "ac"); m_map.insert(_source, "ac");
m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat; m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat;
} else if (_source.startsWith("battery/")) { } else if (_source.startsWith("extsysmon/battery/")) {
// battery stats // battery stats
QString key = _source; QString key = _source;
key.remove("battery/"); key.remove("extsysmon/battery/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float
: AWKeysAggregator::FormatterType::IntegerThree; : AWKeysAggregator::FormatterType::IntegerThree;
@ -124,21 +124,21 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
key = QString("cpucl%1").arg(key); key = QString("cpucl%1").arg(key);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Integer; m_formatter[key] = AWKeysAggregator::FormatterType::Integer;
} else if (_source.startsWith("custom")) { } else if (_source.startsWith("extsysmon/custom")) {
// custom // custom
QString key = _source; QString key = _source;
key.remove("custom/"); key.remove("extsysmon/custom/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "desktop/current/name") { } else if (_source == "extsysmon/desktop/current/name") {
// current desktop name // current desktop name
m_map.insert(_source, "desktop"); m_map.insert(_source, "desktop");
m_formatter["desktop"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["desktop"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "desktop/current/number") { } else if (_source == "extsysmon/desktop/current/number") {
// current desktop number // current desktop number
m_map.insert(_source, "ndesktop"); m_map.insert(_source, "ndesktop");
m_formatter["ndesktop"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["ndesktop"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "desktop/total/number") { } else if (_source == "extsysmon/desktop/total/number") {
// desktop count // desktop count
m_map.insert(_source, "tdesktops"); m_map.insert(_source, "tdesktops");
m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat;
@ -162,11 +162,11 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Integer; m_formatter[key] = AWKeysAggregator::FormatterType::Integer;
} }
} else if (_source == "gpu/load") { } else if (_source == "extsysmon/gpuload/load") {
// gpu load // gpu load
m_map.insert(_source, "gpu"); m_map.insert(_source, "gpu");
m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float; m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float;
} else if (_source == "gpu/temperature") { } else if (_source == "extsysmon/gputemp/temperature") {
// gpu temperature // gpu temperature
m_map.insert(_source, "gputemp"); m_map.insert(_source, "gputemp");
m_formatter["gputemp"] = AWKeysAggregator::FormatterType::Temperature; m_formatter["gputemp"] = AWKeysAggregator::FormatterType::Temperature;
@ -213,7 +213,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat; m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat;
} }
} else if (_source.startsWith("hdd/temperature")) { } else if (_source.startsWith("extsysmon/hdd/temperature")) {
// hdd temperature // hdd temperature
QString device = _source; QString device = _source;
device.remove("hdd/temperature"); device.remove("hdd/temperature");
@ -254,18 +254,18 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
// gb // gb
m_map.insert(_source, "memusedgb"); m_map.insert(_source, "memusedgb");
m_formatter["memusedgb"] = AWKeysAggregator::FormatterType::MemGBFormat; m_formatter["memusedgb"] = AWKeysAggregator::FormatterType::MemGBFormat;
} else if (_source == "network/current/name") { } else if (_source == "extsysmon/network/device") {
// network device // network device
m_map.insert(_source, "netdev"); m_map.insert(_source, "netdev");
m_formatter["netdev"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["netdev"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "network/current/ssid") { } else if (_source == "extsysmon/network/ssid") {
// current ssid // current ssid
m_map.insert(_source, "ssid"); m_map.insert(_source, "ssid");
m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.startsWith("network/response")) { } else if (_source.startsWith("extsysmon/requests/response")) {
// network response // network response
QString key = _source; QString key = _source;
key.remove("network/"); key.remove("extsysmon/requests/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.contains(netRegExp)) { } else if (_source.contains(netRegExp)) {
@ -300,34 +300,34 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat; m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat;
} }
} else if (_source.startsWith("upgrade")) { } else if (_source.startsWith("extsysmon/upgrade")) {
// package manager // package manager
QString key = _source; QString key = _source;
key.remove("upgrade/"); key.remove("extsysmon/upgrade/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree; m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree;
} else if (_source.startsWith("player")) { } else if (_source.startsWith("extsysmon/player")) {
// player // player
QString key = _source; QString key = _source;
key.remove("player/"); key.remove("extsysmon/player/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "ps/running/count") { } else if (_source == "extsysmon/ps/running/count") {
// running processes count // running processes count
m_map.insert(_source, "pscount"); m_map.insert(_source, "pscount");
m_formatter["pscount"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["pscount"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "ps/running/list") { } else if (_source == "extsysmon/ps/running/list") {
// list of running processes // list of running processes
m_map.insert(_source, "ps"); m_map.insert(_source, "ps");
m_formatter["ps"] = AWKeysAggregator::FormatterType::List; m_formatter["ps"] = AWKeysAggregator::FormatterType::List;
} else if (_source == "ps/total/count") { } else if (_source == "extsysmon/ps/total/count") {
// total processes count // total processes count
m_map.insert(_source, "pstot"); m_map.insert(_source, "pstot");
m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.startsWith("quotes")) { } else if (_source.startsWith("extsysmon/quotes")) {
// quotes // quotes
QString key = _source; QString key = _source;
key.remove("quotes/"); key.remove("extsysmon/quotes/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Quotes; m_formatter[key] = AWKeysAggregator::FormatterType::Quotes;
} else if (_source == "memory/swap/free") { } else if (_source == "memory/swap/free") {
@ -377,35 +377,35 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
// timestamp // timestamp
m_map.insert(_source, "tstime"); m_map.insert(_source, "tstime");
m_formatter["tstime"] = AWKeysAggregator::FormatterType::Timestamp; m_formatter["tstime"] = AWKeysAggregator::FormatterType::Timestamp;
} else if (_source == "system/brightness") { } else if (_source == "extsysmon/system/brightness") {
m_map.insert(_source, "brightness"); m_map.insert(_source, "brightness");
m_formatter["brightness"] = AWKeysAggregator::FormatterType::IntegerThree; m_formatter["brightness"] = AWKeysAggregator::FormatterType::IntegerThree;
} else if (_source == "system/volume") { } else if (_source == "extsysmon/system/volume") {
m_map.insert(_source, "volume"); m_map.insert(_source, "volume");
m_formatter["volume"] = AWKeysAggregator::FormatterType::IntegerThree; m_formatter["volume"] = AWKeysAggregator::FormatterType::IntegerThree;
} else if (_source == "system/uptime") { } else if (_source == "os/system/uptime") {
// uptime // uptime
m_map.insert(_source, "uptime"); m_map.insert(_source, "uptime");
m_formatter["uptime"] = AWKeysAggregator::FormatterType::Uptime; m_formatter["uptime"] = AWKeysAggregator::FormatterType::Uptime;
// custom uptime // custom uptime
m_map.insert(_source, "cuptime"); m_map.insert(_source, "cuptime");
m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom; m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom;
} else if (_source.startsWith("weather/temperature")) { } else if (_source.startsWith("extsysmon/weather/temperature")) {
// temperature // temperature
QString key = _source; QString key = _source;
key.remove("weather/"); key.remove("extsysmon/weather/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; m_formatter[key] = AWKeysAggregator::FormatterType::Temperature;
} else if (_source.startsWith("weather/")) { } else if (_source.startsWith("extsysmon/weather/")) {
// other weather // other weather
QString key = _source; QString key = _source;
key.remove("weather/"); key.remove("extsysmon/weather/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.startsWith("load/load")) { } else if (_source.startsWith("extsysmon/load/load")) {
// load source // load source
QString key = _source; QString key = _source;
key.remove("load/"); key.remove("extsysmon/load/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; m_formatter[key] = AWKeysAggregator::FormatterType::Temperature;
} }

View File

@ -114,8 +114,7 @@ QStringList AWFormatterHelper::rightKeys()
void AWFormatterHelper::editItems() void AWFormatterHelper::editItems()
{ {
repaintList(); auto ret = exec();
int ret = exec();
qCInfo(LOG_AW) << "Dialog returns" << ret; qCInfo(LOG_AW) << "Dialog returns" << ret;
} }
@ -200,20 +199,20 @@ QPair<QString, AWAbstractFormatter::FormatterClass> AWFormatterHelper::readMetad
QSettings settings(_filePath, QSettings::IniFormat); QSettings settings(_filePath, QSettings::IniFormat);
settings.beginGroup("Desktop Entry"); settings.beginGroup("Desktop Entry");
QString name = settings.value("Name", _filePath).toString(); auto name = settings.value("Name", _filePath).toString();
QString type = settings.value("X-AW-Type", "NoFormat").toString(); auto type = settings.value("X-AW-Type", "NoFormat").toString();
AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(type); auto formatter = defineFormatterClass(type);
settings.endGroup(); settings.endGroup();
return QPair<QString, AWAbstractFormatter::FormatterClass>(name, formatter); return QPair<QString, AWAbstractFormatter::FormatterClass>(name, formatter);
} }
void AWFormatterHelper::doCreateItem() void AWFormatterHelper::doCreateItem(QListWidget *_widget)
{ {
QStringList selection = {"NoFormat", "DateTime", "Float", "List", "Script", "String", "Json"}; QStringList selection = {"NoFormat", "DateTime", "Float", "List", "Script", "String", "Json"};
bool ok; bool ok;
QString select = QInputDialog::getItem(this, i18n("Select type"), i18n("Type:"), selection, 0, false, &ok); auto select = QInputDialog::getItem(nullptr, i18n("Select type"), i18n("Type:"), selection, 0, false, &ok);
if (!ok) { if (!ok) {
qCWarning(LOG_AW) << "No type selected"; qCWarning(LOG_AW) << "No type selected";
return; return;
@ -223,18 +222,18 @@ void AWFormatterHelper::doCreateItem()
AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(select); AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(select);
switch (formatter) { switch (formatter) {
case AWAbstractFormatter::FormatterClass::DateTime: case AWAbstractFormatter::FormatterClass::DateTime:
return createItem<AWDateTimeFormatter>(); return createItem<AWDateTimeFormatter>(_widget);
case AWAbstractFormatter::FormatterClass::Float: case AWAbstractFormatter::FormatterClass::Float:
return createItem<AWFloatFormatter>(); return createItem<AWFloatFormatter>(_widget);
case AWAbstractFormatter::FormatterClass::List: case AWAbstractFormatter::FormatterClass::List:
return createItem<AWListFormatter>(); return createItem<AWListFormatter>(_widget);
case AWAbstractFormatter::FormatterClass::Script: case AWAbstractFormatter::FormatterClass::Script:
return createItem<AWScriptFormatter>(); return createItem<AWScriptFormatter>(_widget);
case AWAbstractFormatter::FormatterClass::String: case AWAbstractFormatter::FormatterClass::String:
return createItem<AWStringFormatter>(); return createItem<AWStringFormatter>(_widget);
case AWAbstractFormatter::FormatterClass::Json: case AWAbstractFormatter::FormatterClass::Json:
return createItem<AWJsonFormatter>(); return createItem<AWJsonFormatter>(_widget);
case AWAbstractFormatter::FormatterClass::NoFormat: case AWAbstractFormatter::FormatterClass::NoFormat:
return createItem<AWNoFormatter>(); return createItem<AWNoFormatter>(_widget);
} }
} }

View File

@ -51,7 +51,7 @@ private:
void initFormatters(); void initFormatters();
[[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> readMetadata(const QString &_filePath); [[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> readMetadata(const QString &_filePath);
// parent methods // parent methods
void doCreateItem() override; void doCreateItem(QListWidget *_widget) override;
// properties // properties
QHash<QString, AWAbstractFormatter *> m_formatters; QHash<QString, AWAbstractFormatter *> m_formatters;
QHash<QString, AWAbstractFormatter *> m_formattersClasses; QHash<QString, AWAbstractFormatter *> m_formattersClasses;

View File

@ -56,21 +56,16 @@ AWKeys::AWKeys(QObject *_parent)
createDBusInterface(); createDBusInterface();
// update key data if required // update key data if required
connect(m_keyOperator, SIGNAL(updateKeys(const QStringList &)), this, SLOT(reinitKeys(const QStringList &))); connect(m_keyOperator, &AWKeyOperations::updateKeys, this, &AWKeys::reinitKeys);
connect(m_timer, SIGNAL(timeout()), this, SLOT(updateTextData())); connect(m_timer, &QTimer::timeout, this, &AWKeys::updateTextData);
// transfer signal from AWDataAggregator object to QML ui // transfer signal from AWDataAggregator object to QML ui
connect(m_dataAggregator, SIGNAL(toolTipPainted(const QString &)), this, connect(m_dataAggregator, &AWDataAggregator::toolTipPainted, [this](const QString &_tooltip) { emit(needToolTipToBeUpdated(_tooltip)); });
SIGNAL(needToolTipToBeUpdated(const QString &)));
connect(this, SIGNAL(dropSourceFromDataengine(const QString &)), m_dataEngineAggregator, connect(this, &AWKeys::dropSourceFromDataengine, m_dataEngineAggregator, &AWDataEngineAggregator::dropSource);
SLOT(dropSource(const QString &))); connect(m_dataEngineAggregator, &AWDataEngineAggregator::dataUpdated, this, &AWKeys::dataUpdated);
connect(m_dataEngineAggregator,
SIGNAL(dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &, const KSysGuard::SensorDataList &)), this,
SLOT(dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &, const KSysGuard::SensorDataList &)));
// transfer signal from dataengine to update source list // transfer signal from dataengine to update source list
connect(m_dataEngineAggregator, SIGNAL(deviceAdded(const QString &)), m_keyOperator, connect(m_dataEngineAggregator, &AWDataEngineAggregator::deviceAdded, m_keyOperator, &AWKeyOperations::addDevice);
SLOT(addDevice(const QString &)));
} }
@ -373,7 +368,7 @@ void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo
// update data or drop source if there are no matches and exit // update data or drop source if there are no matches and exit
if (tags.isEmpty()) { if (tags.isEmpty()) {
qCInfo(LOG_AW) << "Source" << _source << "not found"; qCInfo(LOG_AW) << "Sensor" << _source << "not found";
return emit(dropSourceFromDataengine(_source)); return emit(dropSourceFromDataengine(_source));
} }

View File

@ -26,46 +26,28 @@
#include <utility> #include <utility>
AbstractExtItemAggregator::AbstractExtItemAggregator(QWidget *_parent, QString _type) AbstractExtItemAggregator::AbstractExtItemAggregator(QObject *_parent, QString _type)
: QDialog(_parent) : QObject(_parent)
, ui(new Ui::AbstractExtItemAggregator)
, m_type(std::move(_type)) , m_type(std::move(_type))
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
// create directory at $HOME // create directory at $HOME
auto localDir = QString("%1/awesomewidgets/%2") auto localDir = QString("%1/awesomewidgets/%2")
.arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), type()); .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), type());
QDir localDirectory; QDir localDirectory;
if (localDirectory.mkpath(localDir)) if (localDirectory.mkpath(localDir))
qCInfo(LOG_LIB) << "Created directory" << localDir; qCInfo(LOG_LIB) << "Created directory" << localDir;
ui->setupUi(this);
copyButton = ui->buttonBox->addButton(i18n("Copy"), QDialogButtonBox::ActionRole);
createButton = ui->buttonBox->addButton(i18n("Create"), QDialogButtonBox::ActionRole);
deleteButton = ui->buttonBox->addButton(i18n("Remove"), QDialogButtonBox::ActionRole);
connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(editItemButtonPressed(QAbstractButton *)));
connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
connect(ui->listWidget, SIGNAL(itemActivated(QListWidgetItem *)), this, SLOT(editItemActivated(QListWidgetItem *)));
} }
AbstractExtItemAggregator::~AbstractExtItemAggregator() void AbstractExtItemAggregator::copyItem(QListWidget *_widget)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; auto source = itemFromWidget(_widget);
delete ui;
}
void AbstractExtItemAggregator::copyItem()
{
auto source = itemFromWidget();
auto fileName = getName(); auto fileName = getName();
auto number = uniqNumber(); auto number = uniqNumber();
auto dir = QString("%1/awesomewidgets/%2") auto dir = QString("%1/awesomewidgets/%2")
.arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type);
if ((!source) || (fileName.isEmpty())) { if ((!source) || (fileName.isEmpty())) {
qCWarning(LOG_LIB) << "Nothing to copy"; qCWarning(LOG_LIB) << "Nothing to copy";
return; return;
@ -73,16 +55,16 @@ void AbstractExtItemAggregator::copyItem()
auto filePath = QString("%1/%2").arg(dir, fileName); auto filePath = QString("%1/%2").arg(dir, fileName);
auto newItem = source->copy(filePath, number); auto newItem = source->copy(filePath, number);
if (newItem->showConfiguration(this, configArgs()) == 1) { if (newItem->showConfiguration(nullptr, configArgs()) == 1) {
initItems(); initItems();
repaintList(); repaintList(_widget);
} }
} }
void AbstractExtItemAggregator::deleteItem() void AbstractExtItemAggregator::deleteItem(QListWidget *_widget)
{ {
auto source = itemFromWidget(); auto source = itemFromWidget(_widget);
if (!source) { if (!source) {
qCWarning(LOG_LIB) << "Nothing to delete"; qCWarning(LOG_LIB) << "Nothing to delete";
return; return;
@ -90,30 +72,63 @@ void AbstractExtItemAggregator::deleteItem()
if (source->tryDelete()) { if (source->tryDelete()) {
initItems(); initItems();
repaintList(); repaintList(_widget);
} }
} }
void AbstractExtItemAggregator::editItem() void AbstractExtItemAggregator::editItem(QListWidget *_widget)
{ {
auto source = itemFromWidget(); auto source = itemFromWidget(_widget);
if (!source) { if (!source) {
qCWarning(LOG_LIB) << "Nothing to edit"; qCWarning(LOG_LIB) << "Nothing to edit";
return; return;
} }
if (source->showConfiguration(this, configArgs()) == 1) { if (source->showConfiguration(nullptr, configArgs()) == 1) {
initItems(); initItems();
repaintList(); repaintList(_widget);
} }
} }
int AbstractExtItemAggregator::exec()
{
auto dialog = new QDialog();
auto ui = new Ui::AbstractExtItemAggregator();
ui->setupUi(dialog);
auto copyButton = ui->buttonBox->addButton(i18n("Copy"), QDialogButtonBox::ActionRole);
auto createButton = ui->buttonBox->addButton(i18n("Create"), QDialogButtonBox::ActionRole);
auto deleteButton = ui->buttonBox->addButton(i18n("Remove"), QDialogButtonBox::ActionRole);
connect(ui->buttonBox, &QDialogButtonBox::clicked, [&](QAbstractButton *_button) {
if (dynamic_cast<QPushButton *>(_button) == copyButton)
copyItem(ui->listWidget);
else if (dynamic_cast<QPushButton *>(_button) == createButton)
doCreateItem(ui->listWidget);
else if (dynamic_cast<QPushButton *>(_button) == deleteButton)
deleteItem(ui->listWidget);
else if (ui->buttonBox->buttonRole(_button) == QDialogButtonBox::AcceptRole)
editItem(ui->listWidget);
});
connect(ui->buttonBox, &QDialogButtonBox::rejected, [dialog]() { dialog->reject(); });
connect(ui->listWidget, &QListWidget::itemActivated, [&](QListWidgetItem *) { editItem(ui->listWidget); });
repaintList(ui->listWidget);
auto ret = dialog->exec();
dialog->deleteLater();
delete ui;
return ret;
}
QString AbstractExtItemAggregator::getName() QString AbstractExtItemAggregator::getName()
{ {
bool ok; bool ok;
auto name = QInputDialog::getText(this, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok); auto name = QInputDialog::getText(nullptr, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok);
if ((!ok) || (name.isEmpty())) if ((!ok) || (name.isEmpty()))
return ""; return "";
if (!name.endsWith(".desktop")) if (!name.endsWith(".desktop"))
@ -123,9 +138,9 @@ QString AbstractExtItemAggregator::getName()
} }
AbstractExtItem *AbstractExtItemAggregator::itemFromWidget() const AbstractExtItem *AbstractExtItemAggregator::itemFromWidget(QListWidget *_widget) const
{ {
auto widgetItem = ui->listWidget->currentItem(); auto widgetItem = _widget->currentItem();
if (!widgetItem) if (!widgetItem)
return nullptr; return nullptr;
@ -144,18 +159,18 @@ AbstractExtItem *AbstractExtItemAggregator::itemFromWidget() const
} }
void AbstractExtItemAggregator::repaintList() const void AbstractExtItemAggregator::repaintList(QListWidget *_widget) const
{ {
ui->listWidget->clear(); _widget->clear();
for (auto &_item : items()) { for (auto &_item : items()) {
QString fileName = QFileInfo(_item->fileName()).fileName(); QString fileName = QFileInfo(_item->fileName()).fileName();
auto item = new QListWidgetItem(fileName, ui->listWidget); auto item = new QListWidgetItem(fileName, _widget);
QStringList tooltip; QStringList tooltip;
tooltip.append(i18n("Name: %1", _item->name())); tooltip.append(i18n("Name: %1", _item->name()));
tooltip.append(i18n("Comment: %1", _item->comment())); tooltip.append(i18n("Comment: %1", _item->comment()));
tooltip.append(i18n("Identity: %1", _item->uniq())); tooltip.append(i18n("Identity: %1", _item->uniq()));
item->setToolTip(tooltip.join('\n')); item->setToolTip(tooltip.join('\n'));
ui->listWidget->addItem(item); _widget->addItem(item);
} }
} }
@ -200,22 +215,3 @@ void AbstractExtItemAggregator::setConfigArgs(const QVariant &_configArgs)
m_configArgs = _configArgs; m_configArgs = _configArgs;
} }
void AbstractExtItemAggregator::editItemActivated(QListWidgetItem *)
{
return editItem();
}
void AbstractExtItemAggregator::editItemButtonPressed(QAbstractButton *_button)
{
if (dynamic_cast<QPushButton *>(_button) == copyButton)
return copyItem();
else if (dynamic_cast<QPushButton *>(_button) == createButton)
return doCreateItem();
else if (dynamic_cast<QPushButton *>(_button) == deleteButton)
return deleteItem();
else if (ui->buttonBox->buttonRole(_button) == QDialogButtonBox::AcceptRole)
return editItem();
}

View File

@ -18,7 +18,6 @@
#ifndef ABSTRACTEXTITEMAGGREGATOR_H #ifndef ABSTRACTEXTITEMAGGREGATOR_H
#define ABSTRACTEXTITEMAGGREGATOR_H #define ABSTRACTEXTITEMAGGREGATOR_H
#include <QDialog>
#include <QStandardPaths> #include <QStandardPaths>
#include "abstractextitem.h" #include "abstractextitem.h"
@ -26,48 +25,45 @@
class QAbstractButton; class QAbstractButton;
class QListWidget;
class QListWidgetItem; class QListWidgetItem;
namespace Ui
{
class AbstractExtItemAggregator;
}
class AbstractExtItemAggregator : public QDialog class AbstractExtItemAggregator : public QObject
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QVariant configArgs READ configArgs WRITE setConfigArgs) Q_PROPERTY(QVariant configArgs READ configArgs WRITE setConfigArgs)
Q_PROPERTY(QVariant type READ type) Q_PROPERTY(QVariant type READ type)
public: public:
explicit AbstractExtItemAggregator(QWidget *_parent, QString _type); explicit AbstractExtItemAggregator(QObject *_parent, QString _type);
~AbstractExtItemAggregator() override;
// methods // methods
void copyItem(); void copyItem(QListWidget *_widget);
template <class T> void createItem() template <class T> void createItem(QListWidget *_widget)
{ {
auto fileName = getName(); auto fileName = getName();
int number = uniqNumber(); auto number = uniqNumber();
auto dir = QString("%1/awesomewidgets/%2") auto dir = QString("%1/awesomewidgets/%2")
.arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type);
if (fileName.isEmpty()) { if (fileName.isEmpty()) {
qCWarning(LOG_LIB) << "Nothing to create"; qCWarning(LOG_LIB) << "Nothing to create";
return; return;
} }
auto filePath = QString("%1/%2").arg(dir, fileName); auto filePath = QString("%1/%2").arg(dir, fileName);
T *newItem = new T(this, filePath); auto newItem = new T(this, filePath);
newItem->setNumber(number); newItem->setNumber(number);
if (newItem->showConfiguration(this, configArgs()) == 1) { if (newItem->showConfiguration(nullptr, configArgs()) == 1) {
initItems(); initItems();
repaintList(); repaintList(_widget);
} }
}; };
void deleteItem(); void deleteItem(QListWidget *_widget);
void editItem(); void editItem(QListWidget *_widget);
[[nodiscard]] int exec();
QString getName(); QString getName();
virtual void initItems() = 0; virtual void initItems() = 0;
[[nodiscard]] AbstractExtItem *itemFromWidget() const; [[nodiscard]] AbstractExtItem *itemFromWidget(QListWidget *_widget) const;
void repaintList() const; void repaintList(QListWidget *_widget) const;
[[nodiscard]] int uniqNumber() const; [[nodiscard]] int uniqNumber() const;
// get methods // get methods
[[nodiscard]] QVariant configArgs() const; [[nodiscard]] QVariant configArgs() const;
@ -77,21 +73,12 @@ public:
// set methods // set methods
void setConfigArgs(const QVariant &_configArgs); void setConfigArgs(const QVariant &_configArgs);
private slots:
void editItemActivated(QListWidgetItem *);
void editItemButtonPressed(QAbstractButton *_button);
private: private:
// ui
Ui::AbstractExtItemAggregator *ui = nullptr;
QPushButton *copyButton = nullptr;
QPushButton *createButton = nullptr;
QPushButton *deleteButton = nullptr;
// properties // properties
QVariant m_configArgs; QVariant m_configArgs;
QString m_type; QString m_type;
// ui methods // ui methods
virtual void doCreateItem() = 0; virtual void doCreateItem(QListWidget *_widget) = 0;
}; };

View File

@ -270,4 +270,3 @@ void AWFloatFormatter::translate(void *_ui)
ui->label_multiplier->setText(i18n("Multiplier")); ui->label_multiplier->setText(i18n("Multiplier"));
ui->label_summand->setText(i18n("Summand")); ui->label_summand->setText(i18n("Summand"));
} }

View File

@ -91,4 +91,3 @@ void AWNoFormatter::translate(void *_ui)
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_type->setText(i18n("Type")); ui->label_type->setText(i18n("Type"));
} }

View File

@ -214,4 +214,3 @@ void AWScriptFormatter::translate(void *_ui)
ui->checkBox_hasReturn->setText(i18n("Has return")); ui->checkBox_hasReturn->setText(i18n("Has return"));
ui->label_code->setText(i18n("Code")); ui->label_code->setText(i18n("Code"));
} }

View File

@ -31,7 +31,7 @@
template <class T> class ExtItemAggregator : public AbstractExtItemAggregator template <class T> class ExtItemAggregator : public AbstractExtItemAggregator
{ {
public: public:
explicit ExtItemAggregator(QWidget *_parent, const QString &_type) explicit ExtItemAggregator(QObject *_parent, const QString &_type)
: AbstractExtItemAggregator(_parent, _type) : AbstractExtItemAggregator(_parent, _type)
{ {
qSetMessagePattern(AWDebug::LOG_FORMAT); qSetMessagePattern(AWDebug::LOG_FORMAT);
@ -56,8 +56,7 @@ public:
void editItems() void editItems()
{ {
repaintList(); auto ret = exec();
int ret = exec();
qCInfo(LOG_LIB) << "Dialog returns" << ret; qCInfo(LOG_LIB) << "Dialog returns" << ret;
}; };
@ -123,7 +122,7 @@ private:
QList<AbstractExtItem *> m_items; QList<AbstractExtItem *> m_items;
QList<T *> m_activeItems; QList<T *> m_activeItems;
void doCreateItem() override { return createItem<T>(); } void doCreateItem(QListWidget *_widget) override { return createItem<T>(_widget); }
QList<AbstractExtItem *> getItems() QList<AbstractExtItem *> getItems()
{ {
@ -137,7 +136,7 @@ private:
if (!file.endsWith(".desktop")) if (!file.endsWith(".desktop"))
continue; continue;
qCInfo(LOG_LIB) << "Found file" << file << "in" << dir; qCInfo(LOG_LIB) << "Found file" << file << "in" << dir;
QString filePath = QString("%1/%2").arg(dir).arg(file); auto filePath = QString("%1/%2").arg(dir, file);
// check if already exists // check if already exists
if (std::any_of(items.cbegin(), items.cend(), if (std::any_of(items.cbegin(), items.cend(),
[&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); })) [&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); }))
@ -147,8 +146,7 @@ private:
} }
// sort items // sort items
std::sort(items.begin(), items.end(), std::sort(items.begin(), items.end(), [](auto *lhs, auto *rhs) { return lhs->number() < rhs->number(); });
[](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { return lhs->number() < rhs->number(); });
return items; return items;
}; };
}; };

View File

@ -433,7 +433,8 @@ int GraphicalItem::showConfiguration(QWidget *_parent, const QVariant &_args)
translate(ui); translate(ui);
connect(ui->checkBox_custom, &QCheckBox::stateChanged, [this, ui](const int state) { changeValue(ui, state); }); connect(ui->checkBox_custom, &QCheckBox::stateChanged, [this, ui](const int state) { changeValue(ui, state); });
connect(ui->comboBox_type, &QComboBox::currentIndexChanged, [this, ui](const int state) { changeCountState(ui, state); }); connect(ui->comboBox_type, &QComboBox::currentIndexChanged,
[this, ui](const int state) { changeCountState(ui, state); });
connect(ui->toolButton_activeColor, &QToolButton::clicked, [this, ui]() { changeColor(ui); }); connect(ui->toolButton_activeColor, &QToolButton::clicked, [this, ui]() { changeColor(ui); });
connect(ui->toolButton_inactiveColor, &QToolButton::clicked, [this, ui]() { changeColor(ui); }); connect(ui->toolButton_inactiveColor, &QToolButton::clicked, [this, ui]() { changeColor(ui); });

View File

@ -18,6 +18,8 @@
#include "extsysmon.h" #include "extsysmon.h"
#include <KPluginFactory> #include <KPluginFactory>
#include <QDBusMetaType>
#include <QFile> #include <QFile>
#include <QRegularExpression> #include <QRegularExpression>
#include <QSettings> #include <QSettings>
@ -38,26 +40,13 @@ ExtendedSysMon::ExtendedSysMon(QObject *_parent, const QVariantList &_args)
qCDebug(LOG_ESM) << metadata; qCDebug(LOG_ESM) << metadata;
readConfiguration(); readConfiguration();
addContainer(new ExtSysMonAggregator("extsysmon", "Extended system monitor", this, m_configuration));
addContainer(new ExtSysMonAggregator("extsysmon", "extsysmon", this, m_configuration));
}
ExtendedSysMon::~ExtendedSysMon()
{
qCDebug(LOG_ESM) << __PRETTY_FUNCTION__;
}
void ExtendedSysMon::update()
{
// m_aggregator->update();
} }
void ExtendedSysMon::readConfiguration() void ExtendedSysMon::readConfiguration()
{ {
QString fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, "plasma-dataengine-extsysmon.conf"); auto fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, "plasma-dataengine-extsysmon.conf");
qCInfo(LOG_ESM) << "Configuration file" << fileName; qCInfo(LOG_ESM) << "Configuration file" << fileName;
QSettings settings(fileName, QSettings::IniFormat); QSettings settings(fileName, QSettings::IniFormat);
QHash<QString, QString> rawConfig; QHash<QString, QString> rawConfig;
@ -90,13 +79,13 @@ QHash<QString, QString> ExtendedSysMon::updateConfiguration(QHash<QString, QStri
else if ((_rawConfig["GPUDEV"] != "ati") && (_rawConfig["GPUDEV"] != "nvidia")) else if ((_rawConfig["GPUDEV"] != "ati") && (_rawConfig["GPUDEV"] != "nvidia"))
_rawConfig["GPUDEV"] = GPULoadSource::autoGpu(); _rawConfig["GPUDEV"] = GPULoadSource::autoGpu();
// hdddev // hdddev
QStringList allHddDevices = HDDTemperatureSource::allHdd(); auto allHddDevices = HDDTemperatureSource::allHdd();
if (_rawConfig["HDDDEV"] == "all") { if (_rawConfig["HDDDEV"] == "all") {
_rawConfig["HDDDEV"] = allHddDevices.join(','); _rawConfig["HDDDEV"] = allHddDevices.join(',');
} else if (_rawConfig["HDDDEV"] == "disable") { } else if (_rawConfig["HDDDEV"] == "disable") {
_rawConfig["HDDDEV"] = ""; _rawConfig["HDDDEV"] = "";
} else { } else {
QStringList deviceList = _rawConfig["HDDDEV"].split(',', Qt::SkipEmptyParts); auto deviceList = _rawConfig["HDDDEV"].split(',', Qt::SkipEmptyParts);
QStringList devices; QStringList devices;
auto diskRegexp = QRegularExpression("^/dev/[hms]d[a-z]$"); auto diskRegexp = QRegularExpression("^/dev/[hms]d[a-z]$");
for (auto &device : deviceList) for (auto &device : deviceList)

View File

@ -27,12 +27,8 @@ class ExtendedSysMon : public KSysGuard::SensorPlugin
public: public:
explicit ExtendedSysMon(QObject *_parent, const QVariantList &_args); explicit ExtendedSysMon(QObject *_parent, const QVariantList &_args);
~ExtendedSysMon() override;
[[nodiscard]] QString providerName() const override { return QStringLiteral("extsysmon"); } [[nodiscard]] QString providerName() const override { return QStringLiteral("extsysmon"); }
void update() override;
private: private:
// configuration // configuration
QHash<QString, QString> m_configuration; QHash<QString, QString> m_configuration;

View File

@ -46,73 +46,52 @@ ExtSysMonAggregator::ExtSysMonAggregator(const QString &_id, const QString &_nam
} }
void ExtSysMonAggregator::createSensor(const QString &_id, const QString &_name, AbstractExtSysMonSource *_source)
{
qCDebug(LOG_ESM) << "Register sensor" << _name << "with id" << _id;
addObject(new ExtSysMonSensor(this, _id, _name, _source));
}
void ExtSysMonAggregator::init(const QHash<QString, QString> &_config) void ExtSysMonAggregator::init(const QHash<QString, QString> &_config)
{ {
qCDebug(LOG_ESM) << "Configuration" << _config; qCDebug(LOG_ESM) << "Configuration" << _config;
// battery // battery
auto batteryItem = new BatterySource(this, {_config["ACPIPATH"]}); createSensor("battery", i18n("Battery"), new BatterySource(this, {_config["ACPIPATH"]}));
for (auto &source : batteryItem->sources())
addObject(new ExtSysMonSensor(this, source, batteryItem));
// custom // custom
auto customItem = new CustomSource(this, {}); createSensor("custom", i18n("Scripts"), new CustomSource(this, {}));
for (auto &source : customItem->sources())
addObject(new ExtSysMonSensor(this, source, customItem));
// desktop // desktop
auto desktopItem = new DesktopSource(this, {}); // FIXME causes segfault
for (auto &source : desktopItem->sources()) createSensor("desktop", i18n("Desktop"), new DesktopSource(this, {}));
addObject(new ExtSysMonSensor(this, source, desktopItem));
// gpu load // gpu load
auto gpuLoadItem = new GPULoadSource(this, {_config["GPUDEV"]}); createSensor("gpuload", i18n("GPU load"), new GPULoadSource(this, {_config["GPUDEV"]}));
for (auto &source : gpuLoadItem->sources())
addObject(new ExtSysMonSensor(this, source, gpuLoadItem));
// gpu temperature // gpu temperature
auto gpuTempItem = new GPUTemperatureSource(this, {_config["GPUDEV"]}); createSensor("gputemp", i18n("GPU temperature"), new GPUTemperatureSource(this, {_config["GPUDEV"]}));
for (auto &source : gpuTempItem->sources())
addObject(new ExtSysMonSensor(this, source, gpuTempItem));
// hdd temperature // hdd temperature
auto hddTempItem createSensor("hdd", i18n("HDD temperature"),
= new HDDTemperatureSource(this, {_config["HDDDEV"], _config["HDDTEMPCMD"]}); new HDDTemperatureSource(this, {_config["HDDDEV"], _config["HDDTEMPCMD"]}));
for (auto &source : hddTempItem->sources())
addObject(new ExtSysMonSensor(this, source, hddTempItem));
// network // network
auto networkItem = new NetworkSource(this, QStringList()); createSensor("network", i18n("Network"), new NetworkSource(this, {}));
for (auto &source : networkItem->sources())
addObject(new ExtSysMonSensor(this, source, networkItem));
// player // player
auto playerItem createSensor("player", i18n("Music player"),
= new PlayerSource(this, {_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], new PlayerSource(this, {_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], _config["MPRIS"],
_config["MPRIS"], _config["PLAYERSYMBOLS"]}); _config["PLAYERSYMBOLS"]}));
for (auto &source : playerItem->sources())
addObject(new ExtSysMonSensor(this, source, playerItem));
// processes // processes
auto processesItem = new ProcessesSource(this, {}); createSensor("ps", i18n("Processes"), new ProcessesSource(this, {}));
for (auto &source : processesItem->sources())
addObject(new ExtSysMonSensor(this, source, processesItem));
// network request // network request
auto requestItem = new RequestSource(this, {}); createSensor("requests", i18n("Network requests"), new RequestSource(this, {}));
for (auto &source : requestItem->sources())
addObject(new ExtSysMonSensor(this, source, requestItem));
// quotes // quotes
auto quotesItem = new QuotesSource(this, {}); createSensor("quotes", i18n("Quotes"), new QuotesSource(this, {}));
for (auto &source : quotesItem->sources())
addObject(new ExtSysMonSensor(this, source, quotesItem));
// system // system
auto systemItem = new SystemInfoSource(this, {}); createSensor("system", i18n("System"), new SystemInfoSource(this, {}));
for (auto &source : systemItem->sources())
addObject(new ExtSysMonSensor(this, source, systemItem));
// upgrade // upgrade
auto upgradeItem = new UpgradeSource(this, {}); createSensor("upgrade", i18n("Upgrades"), new UpgradeSource(this, {}));
for (auto &source : upgradeItem->sources())
addObject(new ExtSysMonSensor(this, source, upgradeItem));
// weather // weather
auto weatherItem = new WeatherSource(this, {}); createSensor("weather", i18n("Weather"), new WeatherSource(this, {}));
for (auto &source : weatherItem->sources())
addObject(new ExtSysMonSensor(this, source, weatherItem));
#ifdef BUILD_LOAD #ifdef BUILD_LOAD
// additional load source // additional load source
auto loadItem = new LoadSource(this, QStringList()); createSensor("load", i18n("Load"), new LoadSource(this, {}));
for (auto &source : loadItem->sources())
addObject(new ExtSysMonSensor(this, source, loadItem));
#endif /* BUILD_LOAD */ #endif /* BUILD_LOAD */
} }

View File

@ -23,6 +23,10 @@
#include "abstractextsysmonsource.h" #include "abstractextsysmonsource.h"
class AbstractExtSysMonSource;
class ExtSysMonSensor;
class ExtSysMonAggregator : public KSysGuard::SensorContainer class ExtSysMonAggregator : public KSysGuard::SensorContainer
{ {
Q_OBJECT Q_OBJECT
@ -32,6 +36,7 @@ public:
const QHash<QString, QString> &_config); const QHash<QString, QString> &_config);
private: private:
void createSensor(const QString &_id, const QString &_name, AbstractExtSysMonSource *_source);
void init(const QHash<QString, QString> &_config); void init(const QHash<QString, QString> &_config);
}; };

View File

@ -48,12 +48,12 @@ BatterySource::~BatterySource()
QStringList BatterySource::getSources() QStringList BatterySource::getSources()
{ {
QStringList sources; QStringList sources;
sources.append("battery/ac"); sources.append("ac");
sources.append("battery/bat"); sources.append("bat");
sources.append("battery/batleft"); sources.append("batleft");
sources.append("battery/batnow"); sources.append("batnow");
sources.append("battery/batrate"); sources.append("batrate");
sources.append("battery/battotal"); sources.append("battotal");
auto directory = QDir(m_acpiPath); auto directory = QDir(m_acpiPath);
@ -63,11 +63,11 @@ QStringList BatterySource::getSources()
qCInfo(LOG_ESS) << "Init batteries count as" << m_batteriesCount; qCInfo(LOG_ESS) << "Init batteries count as" << m_batteriesCount;
for (int i = 0; i < m_batteriesCount; i++) { for (int i = 0; i < m_batteriesCount; i++) {
sources.append(QString("battery/bat%1").arg(i)); sources.append(QString("bat%1").arg(i));
sources.append(QString("battery/batleft%1").arg(i)); sources.append(QString("batleft%1").arg(i));
sources.append(QString("battery/batnow%1").arg(i)); sources.append(QString("batnow%1").arg(i));
sources.append(QString("battery/batrate%1").arg(i)); sources.append(QString("batrate%1").arg(i));
sources.append(QString("battery/battotal%1").arg(i)); sources.append(QString("battotal%1").arg(i));
} }
} }
@ -82,8 +82,7 @@ QVariant BatterySource::data(const QString &_source)
if (!m_values.contains(_source)) if (!m_values.contains(_source))
run(); run();
QVariant value = m_values.take(_source); return m_values.take(_source);
return value;
} }
@ -92,65 +91,65 @@ KSysGuard::SensorInfo *BatterySource::initialData(const QString &_source) const
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); auto data = new KSysGuard::SensorInfo();
if (_source == "battery/ac") { if (_source == "ac") {
data->name = "Is AC online or not"; data->name = "Is AC online or not";
data->variantType = QVariant::Bool; data->variantType = QVariant::Bool;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "battery/bat") { } else if (_source == "bat") {
data->min = 0; data->min = 0;
data->max = 100; data->max = 100;
data->name = "Average battery usage"; data->name = "Average battery usage";
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitPercent; data->unit = KSysGuard::UnitPercent;
} else if (_source == "battery/batleft") { } else if (_source == "batleft") {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = "Battery discharge time"; data->name = "Battery discharge time";
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitSecond; data->unit = KSysGuard::UnitSecond;
} else if (_source == "battery/batnow") { } else if (_source == "batnow") {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = "Current battery capacity"; data->name = "Current battery capacity";
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "battery/batrate") { } else if (_source == "batrate") {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = "Average battery discharge rate"; data->name = "Average battery discharge rate";
data->variantType = QVariant::Double; data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitRate; data->unit = KSysGuard::UnitRate;
} else if (_source == "battery/battotal") { } else if (_source == "battotal") {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = "Full battery capacity"; data->name = "Full battery capacity";
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("battery/batleft")) { } else if (_source.startsWith("batleft")) {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = QString("Battery %1 discharge time").arg(index(_source)); data->name = QString("Battery %1 discharge time").arg(index(_source));
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitSecond; data->unit = KSysGuard::UnitSecond;
} else if (_source.startsWith("battery/batnow")) { } else if (_source.startsWith("batnow")) {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = QString("Battery %1 capacity").arg(index(_source)); data->name = QString("Battery %1 capacity").arg(index(_source));
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("battery/battotal")) { } else if (_source.startsWith("battotal")) {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = QString("Battery %1 full capacity").arg(index(_source)); data->name = QString("Battery %1 full capacity").arg(index(_source));
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("battery/batrate")) { } else if (_source.startsWith("batrate")) {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = QString("Battery %1 discharge rate").arg(index(_source)); data->name = QString("Battery %1 discharge rate").arg(index(_source));
data->variantType = QVariant::Double; data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitRate; data->unit = KSysGuard::UnitRate;
} else if (_source.startsWith("battery/bat")) { } else if (_source.startsWith("bat")) {
data->min = 0; data->min = 0;
data->max = 100; data->max = 100;
data->name = QString("Battery %1 usage").arg(index(_source)); data->name = QString("Battery %1 usage").arg(index(_source));
@ -167,7 +166,7 @@ void BatterySource::run()
// adaptor // adaptor
QFile acFile(QString("%1/AC/online").arg(m_acpiPath)); QFile acFile(QString("%1/AC/online").arg(m_acpiPath));
if (acFile.open(QIODevice::ReadOnly | QIODevice::Text)) if (acFile.open(QIODevice::ReadOnly | QIODevice::Text))
m_values["battery/ac"] = (QString(acFile.readLine()).trimmed().toInt() == 1); m_values["ac"] = (QString(acFile.readLine()).trimmed().toInt() == 1);
acFile.close(); acFile.close();
// batteries // batteries
@ -178,28 +177,27 @@ void BatterySource::run()
if (currentLevelFile.open(QIODevice::ReadOnly | QIODevice::Text)) { if (currentLevelFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
auto value = QString(currentLevelFile.readLine()).toInt(); auto value = QString(currentLevelFile.readLine()).toInt();
m_trend[i + 1].append(value); m_trend[i + 1].append(value);
m_values[QString("battery/batnow%1").arg(i)] = value; m_values[QString("batnow%1").arg(i)] = value;
} }
currentLevelFile.close(); currentLevelFile.close();
// total // total
QFile fullLevelFile(QString("%1/BAT%2/energy_full").arg(m_acpiPath).arg(i)); QFile fullLevelFile(QString("%1/BAT%2/energy_full").arg(m_acpiPath).arg(i));
if (fullLevelFile.open(QIODevice::ReadOnly | QIODevice::Text)) if (fullLevelFile.open(QIODevice::ReadOnly | QIODevice::Text))
m_values[QString("battery/battotal%1").arg(i)] = QString(fullLevelFile.readLine()).toInt(); m_values[QString("battotal%1").arg(i)] = QString(fullLevelFile.readLine()).toInt();
fullLevelFile.close(); fullLevelFile.close();
m_values[QString("battery/bat%1").arg(i)] m_values[QString("bat%1").arg(i)] = static_cast<int>(100 * m_values[QString("batnow%1").arg(i)].toFloat()
= static_cast<int>(100 * m_values[QString("battery/batnow%1").arg(i)].toFloat() / m_values[QString("battotal%1").arg(i)].toFloat());
/ m_values[QString("battery/battotal%1").arg(i)].toFloat());
// accumulate // accumulate
currentLevel += m_values[QString("battery/batnow%1").arg(i)].toFloat(); currentLevel += m_values[QString("batnow%1").arg(i)].toFloat();
fullLevel += m_values[QString("battery/battotal%1").arg(i)].toFloat(); fullLevel += m_values[QString("battotal%1").arg(i)].toFloat();
} }
// total // total
m_trend[0].append(static_cast<int>(currentLevel)); m_trend[0].append(static_cast<int>(currentLevel));
m_values["battery/batnow"] = static_cast<int>(currentLevel); m_values["batnow"] = static_cast<int>(currentLevel);
m_values["battery/battotal"] = static_cast<int>(fullLevel); m_values["battotal"] = static_cast<int>(fullLevel);
m_values["battery/bat"] = static_cast<int>(100 * currentLevel / fullLevel); m_values["bat"] = static_cast<int>(100 * currentLevel / fullLevel);
calculateRates(); calculateRates();
} }
@ -245,15 +243,14 @@ void BatterySource::calculateRates()
for (int i = 0; i < m_batteriesCount; i++) { for (int i = 0; i < m_batteriesCount; i++) {
auto approx = approximate(m_trend[i + 1]); auto approx = approximate(m_trend[i + 1]);
m_values[QString("battery/batrate%1").arg(i)] = approx / interval; m_values[QString("batrate%1").arg(i)] = approx / interval;
m_values[QString("battery/batleft%1").arg(i)] m_values[QString("batleft%1").arg(i)] = interval * m_values[QString("batnow%1").arg(i)].toFloat() / approx;
= interval * m_values[QString("battery/batnow%1").arg(i)].toFloat() / approx;
} }
// total // total
auto approx = approximate(m_trend[0]); auto approx = approximate(m_trend[0]);
m_values["battery/batrate"] = approx / interval; m_values["batrate"] = approx / interval;
m_values["battery/batleft"] = interval * m_values["battery/batnow"].toFloat() / approx; m_values["batleft"] = interval * m_values["batnow"].toFloat() / approx;
// old data cleanup // old data cleanup
for (auto &trend : m_trend.keys()) { for (auto &trend : m_trend.keys()) {

View File

@ -74,7 +74,7 @@ QStringList CustomSource::getSources()
{ {
QStringList sources; QStringList sources;
for (auto &item : m_extScripts->activeItems()) for (auto &item : m_extScripts->activeItems())
sources.append(QString("custom/%1").arg(item->tag("custom"))); sources.append(item->tag("custom"));
return sources; return sources;
} }

View File

@ -51,13 +51,13 @@ QVariant DesktopSource::data(const QString &_source)
auto decrement = KWindowSystem::isPlatformX11() ? 1 : 0; auto decrement = KWindowSystem::isPlatformX11() ? 1 : 0;
auto current = nativeIndex - decrement; auto current = nativeIndex - decrement;
if (_source == "desktop/current/name") { if (_source == "current/name") {
return m_vdi->desktopNames().at(current); return m_vdi->desktopNames().at(current);
} else if (_source == "desktop/current/number") { } else if (_source == "current/number") {
return current + 1; return current + 1;
} else if (_source == "desktop/total/name") { } else if (_source == "total/name") {
return m_vdi->desktopNames(); return m_vdi->desktopNames();
} else if (_source == "desktop/total/number") { } else if (_source == "total/number") {
return m_vdi->numberOfDesktops(); return m_vdi->numberOfDesktops();
} }
@ -70,20 +70,20 @@ KSysGuard::SensorInfo *DesktopSource::initialData(const QString &_source) const
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); auto data = new KSysGuard::SensorInfo();
if (_source == "desktop/current/name") { if (_source == "current/name") {
data->name = "Current desktop name"; data->name = "Current desktop name";
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "desktop/current/number") { } else if (_source == "current/number") {
data->min = 0; data->min = 0;
data->name = "Current desktop number"; data->name = "Current desktop number";
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "desktop/total/name") { } else if (_source == "total/name") {
data->name = "All desktops by name"; data->name = "All desktops by name";
data->variantType = QVariant::StringList; data->variantType = QVariant::StringList;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "desktop/total/number") { } else if (_source == "total/number") {
data->min = 0; data->min = 0;
data->name = "Desktops count"; data->name = "Desktops count";
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
@ -97,10 +97,10 @@ KSysGuard::SensorInfo *DesktopSource::initialData(const QString &_source) const
QStringList DesktopSource::sources() const QStringList DesktopSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("desktop/current/name"); sources.append("current/name");
sources.append("desktop/current/number"); sources.append("current/number");
sources.append("desktop/total/name"); sources.append("total/name");
sources.append("desktop/total/number"); sources.append("total/number");
return sources; return sources;
} }

View File

@ -17,23 +17,67 @@
#include "extsysmonsensor.h" #include "extsysmonsensor.h"
#include <QTimer>
#include "abstractextsysmonsource.h" #include "abstractextsysmonsource.h"
#include "awdebug.h" #include "awdebug.h"
ExtSysMonSensor::ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, ExtSysMonSensor::ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, const QString &_name,
AbstractExtSysMonSource *_source) AbstractExtSysMonSource *_source)
: KSysGuard::SensorObject(_id, _parent) : KSysGuard::SensorObject(_id, _name, _parent)
, m_source(_source)
, m_timer(new QTimer(this))
{ {
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_source = _source; loadProperties();
connect(this, &SensorObject::subscribedChanged, [this](bool _state) { changeSubscription(_state); });
connect(m_timer, &QTimer::timeout, [this]() { update(); });
}
ExtSysMonSensor::~ExtSysMonSensor()
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_timer->stop();
m_timer->deleteLater();
}
void ExtSysMonSensor::changeSubscription(bool _subscribed)
{
qCDebug(LOG_ESS) << "Subscription changed to" << _subscribed;
if (_subscribed) {
m_timer->start(1000);
} else {
m_timer->stop();
}
}
void ExtSysMonSensor::update()
{
for (auto &source : m_source->sources()) { for (auto &source : m_source->sources()) {
auto property = new KSysGuard::SensorProperty(source, this); auto property = sensor(source);
if (!property->isSubscribed())
continue; // skip properties which are not explicitly subscribed
auto value = m_source->data(source);
qCWarning(LOG_ESS) << source << value;
property->setValue(value);
}
}
void ExtSysMonSensor::loadProperties()
{
for (auto &source : m_source->sources()) {
auto info = m_source->initialData(source); auto info = m_source->initialData(source);
property->setName(info->name); auto property = new KSysGuard::SensorProperty(source, info->name, this);
property->setUnit(info->unit); property->setUnit(info->unit);
property->setVariantType(info->variantType); property->setVariantType(info->variantType);
@ -41,15 +85,6 @@ ExtSysMonSensor::ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QStr
property->setMin(info->min); property->setMin(info->min);
property->setMax(info->max); property->setMax(info->max);
m_properties[source] = property; addProperty(property);
}
}
void ExtSysMonSensor::update()
{
for (auto &source : m_properties.keys()) {
auto value = m_source->data(source);
m_properties[source]->setValue(value);
} }
} }

View File

@ -22,19 +22,23 @@
class AbstractExtSysMonSource; class AbstractExtSysMonSource;
class QTimer;
class ExtSysMonSensor : public KSysGuard::SensorObject class ExtSysMonSensor : public KSysGuard::SensorObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, AbstractExtSysMonSource *_source); explicit ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, const QString &_name,
~ExtSysMonSensor() override = default; AbstractExtSysMonSource *_source);
~ExtSysMonSensor() override;
void changeSubscription(bool _subscribed);
void update(); void update();
private: private:
QHash<QString, KSysGuard::SensorProperty *> m_properties; void loadProperties();
AbstractExtSysMonSource *m_source = nullptr; AbstractExtSysMonSource *m_source = nullptr;
QTimer *m_timer = nullptr;
}; };

View File

@ -75,7 +75,7 @@ QVariant GPULoadSource::data(const QString &_source)
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
if (_source == "gpu/load") if (_source == "load")
run(); run();
return m_values[_source]; return m_values[_source];
@ -87,7 +87,7 @@ KSysGuard::SensorInfo *GPULoadSource::initialData(const QString &_source) const
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); auto data = new KSysGuard::SensorInfo();
if (_source == "gpu/load") { if (_source == "load") {
data->min = 0.0; data->min = 0.0;
data->max = 100.0; data->max = 100.0;
data->name = "GPU usage"; data->name = "GPU usage";
@ -115,7 +115,7 @@ void GPULoadSource::run()
QStringList GPULoadSource::sources() const QStringList GPULoadSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("gpu/load"); sources.append("load");
return sources; return sources;
} }
@ -134,7 +134,7 @@ void GPULoadSource::updateValue()
if (!str.contains("<gpu_util>")) if (!str.contains("<gpu_util>"))
continue; continue;
auto load = str.remove("<gpu_util>").remove("</gpu_util>").remove('%'); auto load = str.remove("<gpu_util>").remove("</gpu_util>").remove('%');
m_values["gpu/load"] = load.toFloat(); m_values["load"] = load.toFloat();
break; break;
} }
} else if (m_device == "ati") { } else if (m_device == "ati") {
@ -142,7 +142,7 @@ void GPULoadSource::updateValue()
if (!str.contains("load")) if (!str.contains("load"))
continue; continue;
QString load = str.split(' ', Qt::SkipEmptyParts)[3].remove('%'); QString load = str.split(' ', Qt::SkipEmptyParts)[3].remove('%');
m_values["gpu/load"] = load.toFloat(); m_values["load"] = load.toFloat();
break; break;
} }
} }

View File

@ -55,7 +55,7 @@ QVariant GPUTemperatureSource::data(const QString &_source)
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
if (_source == "gpu/temperature") if (_source == "temperature")
run(); run();
return m_values[_source]; return m_values[_source];
@ -67,7 +67,7 @@ KSysGuard::SensorInfo *GPUTemperatureSource::initialData(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); auto data = new KSysGuard::SensorInfo();
if (_source == "gpu/temperature") { if (_source == "temperature") {
data->min = 0.0; data->min = 0.0;
data->max = 0.0; data->max = 0.0;
data->name = "GPU temperature"; data->name = "GPU temperature";
@ -95,7 +95,7 @@ void GPUTemperatureSource::run()
QStringList GPUTemperatureSource::sources() const QStringList GPUTemperatureSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("gpu/temperature"); sources.append("temperature");
return sources; return sources;
} }
@ -114,7 +114,7 @@ void GPUTemperatureSource::updateValue()
if (!str.contains("<gpu_temp>")) if (!str.contains("<gpu_temp>"))
continue; continue;
QString temp = str.remove("<gpu_temp>").remove("C</gpu_temp>"); QString temp = str.remove("<gpu_temp>").remove("C</gpu_temp>");
m_values["gpu/temperature"] = temp.toFloat(); m_values["temperature"] = temp.toFloat();
break; break;
} }
} else if (m_device == "ati") { } else if (m_device == "ati") {
@ -122,7 +122,7 @@ void GPUTemperatureSource::updateValue()
if (!str.contains("Temperature")) if (!str.contains("Temperature"))
continue; continue;
QString temp = str.split(' ', Qt::SkipEmptyParts).at(4); QString temp = str.split(' ', Qt::SkipEmptyParts).at(4);
m_values["gpu/temperature"] = temp.toFloat(); m_values["temperature"] = temp.toFloat();
break; break;
} }
} }

View File

@ -77,7 +77,7 @@ QVariant HDDTemperatureSource::data(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QString device = _source; QString device = _source;
device.remove("hdd/temperature"); device.remove("temperature");
// run cmd // run cmd
if (m_processes[device]->state() == QProcess::NotRunning) { if (m_processes[device]->state() == QProcess::NotRunning) {
auto cmd = m_cmd.first(); auto cmd = m_cmd.first();
@ -95,7 +95,7 @@ KSysGuard::SensorInfo *HDDTemperatureSource::initialData(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto device = _source; auto device = _source;
device.remove("hdd/temperature"); device.remove("temperature");
auto data = new KSysGuard::SensorInfo(); auto data = new KSysGuard::SensorInfo();
data->min = 0.0; data->min = 0.0;
@ -112,7 +112,7 @@ QStringList HDDTemperatureSource::sources() const
{ {
QStringList sources; QStringList sources;
for (auto &device : m_devices) for (auto &device : m_devices)
sources.append(QString("hdd/temperature%1").arg(device)); sources.append(QString("temperature%1").arg(device));
return sources; return sources;
} }

View File

@ -53,7 +53,7 @@ KSysGuard::SensorInfo *LoadSource::initialData(const QString &_source) const
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); auto data = new KSysGuard::SensorInfo();
if (_source.startsWith("load/load")) { if (_source.startsWith("load")) {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = "Simple sources for load tests"; data->name = "Simple sources for load tests";
@ -69,7 +69,7 @@ QStringList LoadSource::sources() const
{ {
QStringList sources; QStringList sources;
for (int i = 0; i < 1000; i++) for (int i = 0; i < 1000; i++)
sources.append(QString("load/load%1").arg(i)); sources.append(QString("load%1").arg(i));
return sources; return sources;
} }

View File

@ -52,7 +52,7 @@ NetworkSource::~NetworkSource()
QVariant NetworkSource::data(const QString &_source) QVariant NetworkSource::data(const QString &_source)
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCWarning(LOG_ESS) << "Source" << _source;
if (!m_values.contains(_source)) if (!m_values.contains(_source))
run(); run();
@ -65,11 +65,11 @@ KSysGuard::SensorInfo *NetworkSource::initialData(const QString &_source) const
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); auto data = new KSysGuard::SensorInfo();
if (_source == "network/current/name") { if (_source == "device") {
data->name = "Current network device name"; data->name = "Current network device name";
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "network/current/ssid") { } else if (_source == "ssid") {
data->name = "Current SSID name"; data->name = "Current SSID name";
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
@ -81,16 +81,16 @@ KSysGuard::SensorInfo *NetworkSource::initialData(const QString &_source) const
void NetworkSource::run() void NetworkSource::run()
{ {
m_values["network/current/name"] = NetworkSource::getCurrentDevice(); m_values["device"] = NetworkSource::getCurrentDevice();
m_process->start("iwgetid", QStringList() << "-r"); m_process->start("iwgetid", {"-r"});
} }
QStringList NetworkSource::sources() const QStringList NetworkSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("network/current/name"); sources.append("device");
sources.append("network/current/ssid"); sources.append("ssid");
return sources; return sources;
} }
@ -104,7 +104,7 @@ void NetworkSource::updateSsid()
QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed();
qCInfo(LOG_ESS) << "Output" << qoutput; qCInfo(LOG_ESS) << "Output" << qoutput;
m_values["network/current/ssid"] = qoutput; m_values["ssid"] = qoutput;
} }

View File

@ -95,51 +95,51 @@ KSysGuard::SensorInfo *PlayerSource::initialData(const QString &_source) const
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); auto data = new KSysGuard::SensorInfo();
if (_source == "player/album") { if (_source == "album") {
data->name = "Current song album"; data->name = "Current song album";
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "player/salbum") { } else if (_source == "salbum") {
data->name = QString("Current song album (%1 symbols)").arg(m_symbols); data->name = QString("Current song album (%1 symbols)").arg(m_symbols);
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "player/dalbum") { } else if (_source == "dalbum") {
data->name = QString("Current song album (%1 symbols, dynamic)").arg(m_symbols); data->name = QString("Current song album (%1 symbols, dynamic)").arg(m_symbols);
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "player/artist") { } else if (_source == "artist") {
data->name = "Current song artist"; data->name = "Current song artist";
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "player/sartist") { } else if (_source == "sartist") {
data->name = QString("Current song artist (%1 symbols)").arg(m_symbols); data->name = QString("Current song artist (%1 symbols)").arg(m_symbols);
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "player/dartist") { } else if (_source == "dartist") {
data->name = QString("Current song artist (%1 symbols, dynamic)").arg(m_symbols); data->name = QString("Current song artist (%1 symbols, dynamic)").arg(m_symbols);
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "player/duration") { } else if (_source == "duration") {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = "Current song duration"; data->name = "Current song duration";
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitSecond; data->unit = KSysGuard::UnitSecond;
} else if (_source == "player/progress") { } else if (_source == "progress") {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = "Current song progress"; data->name = "Current song progress";
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitSecond; data->unit = KSysGuard::UnitSecond;
} else if (_source == "player/title") { } else if (_source == "title") {
data->name = "Current song title"; data->name = "Current song title";
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "player/stitle") { } else if (_source == "stitle") {
data->name = QString("Current song title (%1 symbols)").arg(m_symbols); data->name = QString("Current song title (%1 symbols)").arg(m_symbols);
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "player/dtitle") { } else if (_source == "dtitle") {
data->name = QString("Current song title (%1 symbols, dynamic)").arg(m_symbols); data->name = QString("Current song title (%1 symbols, dynamic)").arg(m_symbols);
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
@ -166,33 +166,30 @@ void PlayerSource::run()
// dymanic properties // dymanic properties
// solid // solid
m_values["player/salbum"] = stripString(m_values["player/album"].toString(), m_symbols); m_values["salbum"] = stripString(m_values["album"].toString(), m_symbols);
m_values["player/sartist"] = stripString(m_values["player/artist"].toString(), m_symbols); m_values["sartist"] = stripString(m_values["artist"].toString(), m_symbols);
m_values["player/stitle"] = stripString(m_values["player/title"].toString(), m_symbols); m_values["stitle"] = stripString(m_values["title"].toString(), m_symbols);
// dynamic // dynamic
m_values["player/dalbum"] m_values["dalbum"] = buildString(m_values["dalbum"].toString(), m_values["album"].toString(), m_symbols);
= buildString(m_values["player/dalbum"].toString(), m_values["player/album"].toString(), m_symbols); m_values["dartist"] = buildString(m_values["dartist"].toString(), m_values["artist"].toString(), m_symbols);
m_values["player/dartist"] m_values["dtitle"] = buildString(m_values["dtitle"].toString(), m_values["title"].toString(), m_symbols);
= buildString(m_values["player/dartist"].toString(), m_values["player/artist"].toString(), m_symbols);
m_values["player/dtitle"]
= buildString(m_values["player/dtitle"].toString(), m_values["player/title"].toString(), m_symbols);
} }
QStringList PlayerSource::sources() const QStringList PlayerSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("player/album"); sources.append("album");
sources.append("player/dalbum"); sources.append("dalbum");
sources.append("player/salbum"); sources.append("salbum");
sources.append("player/artist"); sources.append("artist");
sources.append("player/dartist"); sources.append("dartist");
sources.append("player/sartist"); sources.append("sartist");
sources.append("player/duration"); sources.append("duration");
sources.append("player/progress"); sources.append("progress");
sources.append("player/title"); sources.append("title");
sources.append("player/dtitle"); sources.append("dtitle");
sources.append("player/stitle"); sources.append("stitle");
return sources; return sources;
} }
@ -245,10 +242,10 @@ void PlayerSource::mpdSocketReadyRead()
// there are one more time... // there are one more time...
if ((metadata == "time") && (data.contains(':'))) { if ((metadata == "time") && (data.contains(':'))) {
QStringList times = data.split(':'); QStringList times = data.split(':');
m_mpdCached["player/duration"] = times.at(0).toInt(); m_mpdCached["duration"] = times.at(0).toInt();
m_mpdCached["player/progress"] = times.at(1).toInt(); m_mpdCached["progress"] = times.at(1).toInt();
} else if (m_metadata.contains(metadata)) { } else if (m_metadata.contains(metadata)) {
m_mpdCached[QString("player/%1").arg(metadata)] = data; m_mpdCached[metadata] = data;
} }
} }
} }
@ -266,11 +263,11 @@ void PlayerSource::mpdSocketWritten(const qint64 _bytes)
QVariantHash PlayerSource::defaultInfo() QVariantHash PlayerSource::defaultInfo()
{ {
QVariantHash info; QVariantHash info;
info["player/album"] = "unknown"; info["album"] = "unknown";
info["player/artist"] = "unknown"; info["artist"] = "unknown";
info["player/duration"] = 0; info["duration"] = 0;
info["player/progress"] = 0; info["progress"] = 0;
info["player/title"] = "unknown"; info["title"] = "unknown";
return info; return info;
} }
@ -321,11 +318,11 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString &_mpris)
// another portion of dirty magic // another portion of dirty magic
auto map = qdbus_cast<QVariantHash>( auto map = qdbus_cast<QVariantHash>(
response.arguments().first().value<QDBusVariant>().variant().value<QDBusArgument>()); response.arguments().first().value<QDBusVariant>().variant().value<QDBusArgument>());
info["player/album"] = map.value("xesam:album", "unknown"); info["album"] = map.value("xesam:album", "unknown");
// artist is array // artist is array
info["player/artist"] = map.value("xesam:artist", "unknown").toString(); info["artist"] = map.value("xesam:artist", "unknown").toString();
info["player/duration"] = map.value("mpris:length", 0).toInt() / (1000 * 1000); info["duration"] = map.value("mpris:length", 0).toInt() / (1000 * 1000);
info["player/title"] = map.value("xesam:title", "unknown"); info["title"] = map.value("xesam:title", "unknown");
} }
// position // position
@ -336,8 +333,7 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString &_mpris)
qCWarning(LOG_ESS) << "Error message" << response.errorMessage(); qCWarning(LOG_ESS) << "Error message" << response.errorMessage();
} else { } else {
// this cast is simpler than the previous one ;) // this cast is simpler than the previous one ;)
info["player/progress"] info["progress"] = response.arguments().first().value<QDBusVariant>().variant().toLongLong() / (1000 * 1000);
= response.arguments().first().value<QDBusVariant>().variant().toLongLong() / (1000 * 1000);
} }
return info; return info;

View File

@ -56,17 +56,17 @@ KSysGuard::SensorInfo *ProcessesSource::initialData(const QString &_source) cons
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); auto data = new KSysGuard::SensorInfo();
if (_source == "ps/running/count") { if (_source == "running/count") {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = "Count of running processes"; data->name = "Count of running processes";
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "ps/running/list") { } else if (_source == "running/list") {
data->name = "All running processes list"; data->name = "All running processes list";
data->variantType = QVariant::StringList; data->variantType = QVariant::StringList;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source == "ps/total/count") { } else if (_source == "total/count") {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = "Total count of processes"; data->name = "Total count of processes";
@ -99,18 +99,18 @@ void ProcessesSource::run()
cmdFile.close(); cmdFile.close();
} }
m_values["ps/running/count"] = running.count(); m_values["running/count"] = running.count();
m_values["ps/running/list"] = running; m_values["running/list"] = running;
m_values["ps/total/count"] = directories.count(); m_values["total/count"] = directories.count();
} }
QStringList ProcessesSource::sources() const QStringList ProcessesSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("ps/running/count"); sources.append("running/count");
sources.append("ps/running/list"); sources.append("running/list");
sources.append("ps/total/count"); sources.append("total/count");
return sources; return sources;
} }

View File

@ -48,14 +48,12 @@ QVariant QuotesSource::data(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
int ind = index(_source); int ind = index(_source);
auto service = _source; if (!m_values.contains(_source)) {
service.remove("quotes/");
if (!m_values.contains(service)) {
QVariantHash data = m_extQuotes->itemByTagNumber(ind)->run(); QVariantHash data = m_extQuotes->itemByTagNumber(ind)->run();
for (auto &key : data.keys()) for (auto &key : data.keys())
m_values[key] = data[key]; m_values[key] = data[key];
} }
QVariant value = m_values.take(service); QVariant value = m_values.take(_source);
return value; return value;
} }
@ -66,37 +64,37 @@ KSysGuard::SensorInfo *QuotesSource::initialData(const QString &_source) const
int ind = index(_source); int ind = index(_source);
auto data = new KSysGuard::SensorInfo; auto data = new KSysGuard::SensorInfo;
if (_source.startsWith("quotes/pricechg")) { if (_source.startsWith("pricechg")) {
data->min = 0.0; data->min = 0.0;
data->max = 0.0; data->max = 0.0;
data->name = QString("Absolute price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->name = QString("Absolute price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Double; data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("quotes/price")) { } else if (_source.startsWith("price")) {
data->min = 0.0; data->min = 0.0;
data->max = 0.0; data->max = 0.0;
data->name = QString("Price for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->name = QString("Price for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Double; data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("quotes/percpricechg")) { } else if (_source.startsWith("percpricechg")) {
data->min = -100.0; data->min = -100.0;
data->max = 100.0; data->max = 100.0;
data->name = QString("Price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->name = QString("Price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Double; data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitPercent; data->unit = KSysGuard::UnitPercent;
} else if (_source.startsWith("quotes/volumechg")) { } else if (_source.startsWith("volumechg")) {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = QString("Absolute volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->name = QString("Absolute volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("quotes/volume")) { } else if (_source.startsWith("volume")) {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = QString("Volume for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->name = QString("Volume for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("quotes/percvolumechg")) { } else if (_source.startsWith("percvolumechg")) {
data->min = -100.0; data->min = -100.0;
data->max = 100.0; data->max = 100.0;
data->name = QString("Volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->name = QString("Volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
@ -118,12 +116,12 @@ QStringList QuotesSource::getSources()
{ {
QStringList sources; QStringList sources;
for (auto &item : m_extQuotes->activeItems()) { for (auto &item : m_extQuotes->activeItems()) {
sources.append(QString("quotes/%1").arg(item->tag("price"))); sources.append(item->tag("price"));
sources.append(QString("quotes/%1").arg(item->tag("pricechg"))); sources.append(item->tag("pricechg"));
sources.append(QString("quotes/%1").arg(item->tag("percpricechg"))); sources.append(item->tag("percpricechg"));
sources.append(QString("quotes/%1").arg(item->tag("volume"))); sources.append(item->tag("volume"));
sources.append(QString("quotes/%1").arg(item->tag("volumechg"))); sources.append(item->tag("volumechg"));
sources.append(QString("quotes/%1").arg(item->tag("percvolumechg"))); sources.append(item->tag("percvolumechg"));
} }
return sources; return sources;

View File

@ -48,14 +48,12 @@ QVariant RequestSource::data(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
int ind = index(_source); int ind = index(_source);
auto service = _source; if (!m_values.contains(_source)) {
service.remove("network/");
if (!m_values.contains(service)) {
QVariantHash data = m_extNetRequest->itemByTagNumber(ind)->run(); QVariantHash data = m_extNetRequest->itemByTagNumber(ind)->run();
for (auto &key : data.keys()) for (auto &key : data.keys())
m_values[key] = data[key]; m_values[key] = data[key];
} }
QVariant value = m_values.take(service); QVariant value = m_values.take(_source);
return value; return value;
} }
@ -66,7 +64,7 @@ KSysGuard::SensorInfo *RequestSource::initialData(const QString &_source) const
int ind = index(_source); int ind = index(_source);
auto data = new KSysGuard::SensorInfo(); auto data = new KSysGuard::SensorInfo();
if (_source.startsWith("network/response")) { if (_source.startsWith("response")) {
data->name = QString("Network response for %1").arg(m_extNetRequest->itemByTagNumber(ind)->uniq()); data->name = QString("Network response for %1").arg(m_extNetRequest->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
@ -86,7 +84,7 @@ QStringList RequestSource::getSources()
{ {
QStringList sources; QStringList sources;
for (auto &item : m_extNetRequest->activeItems()) for (auto &item : m_extNetRequest->activeItems())
sources.append(QString("network/%1").arg(item->tag("response"))); sources.append(item->tag("response"));
return sources; return sources;
} }

View File

@ -59,13 +59,13 @@ KSysGuard::SensorInfo *SystemInfoSource::initialData(const QString &_source) con
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); auto data = new KSysGuard::SensorInfo();
if (_source == "system/brightness") { if (_source == "brightness") {
data->min = 0.0; data->min = 0.0;
data->max = 100.0; data->max = 100.0;
data->name = "Screen brightness"; data->name = "Screen brightness";
data->variantType = QVariant::Double; data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitPercent; data->unit = KSysGuard::UnitPercent;
} else if (_source == "system/volume") { } else if (_source == "volume") {
data->min = 0.0; data->min = 0.0;
data->max = 100.0; data->max = 100.0;
data->name = "Master volume"; data->name = "Master volume";
@ -79,16 +79,16 @@ KSysGuard::SensorInfo *SystemInfoSource::initialData(const QString &_source) con
void SystemInfoSource::run() void SystemInfoSource::run()
{ {
m_values["system/brightness"] = SystemInfoSource::getCurrentBrightness(); m_values["brightness"] = SystemInfoSource::getCurrentBrightness();
m_values["system/volume"] = SystemInfoSource::getCurrentVolume(); m_values["volume"] = SystemInfoSource::getCurrentVolume();
} }
QStringList SystemInfoSource::sources() const QStringList SystemInfoSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("system/brightness"); sources.append("brightness");
sources.append("system/volume"); sources.append("volume");
return sources; return sources;
} }
@ -100,24 +100,24 @@ QVariant SystemInfoSource::fromDBusVariant(const QVariant &value)
} }
float SystemInfoSource::getCurrentBrightness() double SystemInfoSource::getCurrentBrightness()
{ {
qCDebug(LOG_ESS) << "Get current brightness"; qCDebug(LOG_ESS) << "Get current brightness";
auto maxBrightness auto maxBrightness
= sendDBusRequest("org.kde.Solid.PowerManagement", "/org/kde/Solid/PowerManagement/Actions/BrightnessControl", = sendDBusRequest("org.kde.Solid.PowerManagement", "/org/kde/Solid/PowerManagement/Actions/BrightnessControl",
"org.kde.Solid.PowerManagement.Actions.BrightnessControl", "brightnessMax") "org.kde.Solid.PowerManagement.Actions.BrightnessControl", "brightnessMax")
.toFloat(); .toDouble();
auto brightness auto brightness
= sendDBusRequest("org.kde.Solid.PowerManagement", "/org/kde/Solid/PowerManagement/Actions/BrightnessControl", = sendDBusRequest("org.kde.Solid.PowerManagement", "/org/kde/Solid/PowerManagement/Actions/BrightnessControl",
"org.kde.Solid.PowerManagement.Actions.BrightnessControl", "brightness") "org.kde.Solid.PowerManagement.Actions.BrightnessControl", "brightness")
.toFloat(); .toDouble();
return std::round(100.0f * brightness / maxBrightness); return std::round(100.0 * brightness / maxBrightness);
} }
float SystemInfoSource::getCurrentVolume() double SystemInfoSource::getCurrentVolume()
{ {
qCDebug(LOG_ESS) << "Get current volume"; qCDebug(LOG_ESS) << "Get current volume";
@ -129,7 +129,7 @@ float SystemInfoSource::getCurrentVolume()
if (currentMixer.isEmpty()) { if (currentMixer.isEmpty()) {
qCWarning(LOG_ESS) << "Mixer is empty"; qCWarning(LOG_ESS) << "Mixer is empty";
return std::numeric_limits<float>::quiet_NaN(); return std::numeric_limits<double>::quiet_NaN();
} }
currentMixer.replace(":", "_").replace(".", "_").replace("-", "_"); currentMixer.replace(":", "_").replace(".", "_").replace("-", "_");
@ -140,14 +140,14 @@ float SystemInfoSource::getCurrentVolume()
.toString(); .toString();
if (currentControl.isEmpty()) { if (currentControl.isEmpty()) {
qCWarning(LOG_ESS) << "Control is empty"; qCWarning(LOG_ESS) << "Control is empty";
return std::numeric_limits<float>::quiet_NaN(); return std::numeric_limits<double>::quiet_NaN();
} }
currentControl.replace(":", "_").replace(".", "_").replace("-", "_"); currentControl.replace(":", "_").replace(".", "_").replace("-", "_");
auto path = QString("/Mixers/%1/%2").arg(currentMixer).arg(currentControl); auto path = QString("/Mixers/%1/%2").arg(currentMixer).arg(currentControl);
return fromDBusVariant(sendDBusRequest("org.kde.kmix", path, "org.freedesktop.DBus.Properties", "Get", return fromDBusVariant(sendDBusRequest("org.kde.kmix", path, "org.freedesktop.DBus.Properties", "Get",
QVariantList({"org.kde.KMix.Control", "volume"}))) QVariantList({"org.kde.KMix.Control", "volume"})))
.toFloat(); .toDouble();
} }

View File

@ -39,8 +39,8 @@ private:
// configuration and values // configuration and values
QVariantHash m_values; QVariantHash m_values;
static QVariant fromDBusVariant(const QVariant &value); static QVariant fromDBusVariant(const QVariant &value);
static float getCurrentBrightness(); static double getCurrentBrightness();
static float getCurrentVolume(); static double getCurrentVolume();
static QVariant sendDBusRequest(const QString &destination, const QString &path, const QString &interface, static QVariant sendDBusRequest(const QString &destination, const QString &path, const QString &interface,
const QString &method, const QVariantList &args = QVariantList()); const QString &method, const QVariantList &args = QVariantList());
}; };

View File

@ -75,7 +75,7 @@ QStringList UpgradeSource::getSources()
{ {
QStringList sources; QStringList sources;
for (auto &item : m_extUpgrade->activeItems()) for (auto &item : m_extUpgrade->activeItems())
sources.append(QString("upgrade/%1").arg(item->tag("pkgcount"))); sources.append(item->tag("pkgcount"));
return sources; return sources;
} }

View File

@ -48,14 +48,12 @@ QVariant WeatherSource::data(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
int ind = index(_source); int ind = index(_source);
auto service = _source; if (!m_values.contains(_source)) {
service.remove("weather/");
if (!m_values.contains(service)) {
QVariantHash data = m_extWeather->itemByTagNumber(ind)->run(); QVariantHash data = m_extWeather->itemByTagNumber(ind)->run();
for (auto &key : data.keys()) for (auto &key : data.keys())
m_values[key] = data[key]; m_values[key] = data[key];
} }
QVariant value = m_values.take(service); QVariant value = m_values.take(_source);
return value; return value;
} }
@ -66,35 +64,35 @@ KSysGuard::SensorInfo *WeatherSource::initialData(const QString &_source) const
int ind = index(_source); int ind = index(_source);
auto data = new KSysGuard::SensorInfo(); auto data = new KSysGuard::SensorInfo();
if (_source.startsWith("weather/weatherId")) { if (_source.startsWith("weatherId")) {
data->min = 0; data->min = 0;
data->max = 1000; data->max = 1000;
data->name = QString("Numeric weather ID for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->name = QString("Numeric weather ID for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("weather/weather")) { } else if (_source.startsWith("weather")) {
data->name = QString("ID string map for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->name = QString("ID string map for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("weather/humidity")) { } else if (_source.startsWith("humidity")) {
data->min = 0; data->min = 0;
data->max = 100; data->max = 100;
data->name = QString("Humidity for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->name = QString("Humidity for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitPercent; data->unit = KSysGuard::UnitPercent;
} else if (_source.startsWith("weather/pressure")) { } else if (_source.startsWith("pressure")) {
data->min = 0; data->min = 0;
data->max = 0; data->max = 0;
data->name = QString("Atmospheric pressure for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->name = QString("Atmospheric pressure for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Int; data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("weather/temperature")) { } else if (_source.startsWith("temperature")) {
data->min = 0.0; data->min = 0.0;
data->max = 0.0; data->max = 0.0;
data->name = QString("Temperature for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->name = QString("Temperature for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Double; data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitCelsius; data->unit = KSysGuard::UnitCelsius;
} else if (_source.startsWith("weather/timestamp")) { } else if (_source.startsWith("timestamp")) {
data->name = QString("Timestamp for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->name = QString("Timestamp for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::String; data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone; data->unit = KSysGuard::UnitNone;
@ -114,12 +112,12 @@ QStringList WeatherSource::getSources()
{ {
QStringList sources; QStringList sources;
for (auto &item : m_extWeather->activeItems()) { for (auto &item : m_extWeather->activeItems()) {
sources.append(QString("weather/%1").arg(item->tag("weatherId"))); sources.append(item->tag("weatherId"));
sources.append(QString("weather/%1").arg(item->tag("weather"))); sources.append(item->tag("weather"));
sources.append(QString("weather/%1").arg(item->tag("humidity"))); sources.append(item->tag("humidity"));
sources.append(QString("weather/%1").arg(item->tag("pressure"))); sources.append(item->tag("pressure"));
sources.append(QString("weather/%1").arg(item->tag("temperature"))); sources.append(item->tag("temperature"));
sources.append(QString("weather/%1").arg(item->tag("timestamp"))); sources.append(item->tag("timestamp"));
} }
return sources; return sources;