From 67640cccdc7b9870f81971129cccb3f30e1cf4f3 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Thu, 21 Mar 2024 18:08:19 +0200 Subject: [PATCH] do not derive from qwidget in aggregates --- .../plugin/awdataengineaggregator.cpp | 41 +++++-- .../plugin/awdataengineaggregator.h | 1 + .../plugin/awdataenginemapper.cpp | 66 +++++----- .../plugin/awformatterhelper.cpp | 27 ++--- .../awesome-widget/plugin/awformatterhelper.h | 2 +- sources/awesome-widget/plugin/awkeys.cpp | 19 ++- .../abstractextitemaggregator.cpp | 114 +++++++++--------- .../abstractextitemaggregator.h | 45 +++---- sources/awesomewidgets/awfloatformatter.cpp | 1 - sources/awesomewidgets/awnoformatter.cpp | 1 - sources/awesomewidgets/awscriptformatter.cpp | 1 - sources/awesomewidgets/extitemaggregator.h | 12 +- sources/awesomewidgets/graphicalitem.cpp | 3 +- sources/extsysmon/extsysmon.cpp | 23 +--- sources/extsysmon/extsysmon.h | 4 - sources/extsysmon/extsysmonaggregator.cpp | 75 +++++------- sources/extsysmon/extsysmonaggregator.h | 5 + sources/extsysmonsources/batterysource.cpp | 77 ++++++------ sources/extsysmonsources/customsource.cpp | 2 +- sources/extsysmonsources/desktopsource.cpp | 24 ++-- sources/extsysmonsources/extsysmonsensor.cpp | 65 +++++++--- sources/extsysmonsources/extsysmonsensor.h | 10 +- sources/extsysmonsources/gpuloadsource.cpp | 10 +- sources/extsysmonsources/gputempsource.cpp | 10 +- sources/extsysmonsources/hddtempsource.cpp | 6 +- sources/extsysmonsources/loadsource.cpp | 4 +- sources/extsysmonsources/networksource.cpp | 16 +-- sources/extsysmonsources/playersource.cpp | 86 +++++++------ sources/extsysmonsources/processessource.cpp | 18 +-- sources/extsysmonsources/quotessource.cpp | 30 +++-- sources/extsysmonsources/requestsource.cpp | 10 +- sources/extsysmonsources/systeminfosource.cpp | 28 ++--- sources/extsysmonsources/systeminfosource.h | 4 +- sources/extsysmonsources/upgradesource.cpp | 2 +- sources/extsysmonsources/weathersource.cpp | 30 +++-- 35 files changed, 428 insertions(+), 444 deletions(-) diff --git a/sources/awesome-widget/plugin/awdataengineaggregator.cpp b/sources/awesome-widget/plugin/awdataengineaggregator.cpp index 87b5099..7a0b85d 100644 --- a/sources/awesome-widget/plugin/awdataengineaggregator.cpp +++ b/sources/awesome-widget/plugin/awdataengineaggregator.cpp @@ -18,6 +18,7 @@ #include "awdataengineaggregator.h" #include +#include #include #include "awdebug.h" @@ -33,15 +34,12 @@ AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) qDBusRegisterMetaType(); qDBusRegisterMetaType>(); - m_interface = new KSysGuard::SystemStats::DBusInterface( - KSysGuard::SystemStats::ServiceName, KSysGuard::SystemStats::ObjectPath, QDBusConnection::sessionBus(), this); + m_interface = new KSysGuard::SystemStats::DBusInterface(); - connect(m_interface, SIGNAL(newSensorData(KSysGuard::SensorDataList)), this, - SLOT(updateData(KSysGuard::SensorDataList))); - connect(m_interface, SIGNAL(sensorMetaDataChanged(const QHash &)), this, - SLOT(updateSensors(const QHash &))); - connect(m_interface, SIGNAL(sensorAdded(const QString &)), this, SLOT(sensorAdded(const QString &))); - connect(m_interface, SIGNAL(sensorRemoved(const QString &)), this, SLOT(sensorRemoved(const QString &))); + connect(m_interface, &KSysGuard::SystemStats::DBusInterface::newSensorData, this, &AWDataEngineAggregator::updateData); + connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorMetaDataChanged, this, &AWDataEngineAggregator::updateSensors); + connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorAdded, this, &AWDataEngineAggregator::sensorAdded); + connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorRemoved, this, &AWDataEngineAggregator::sensorRemoved); loadSources(); } @@ -52,6 +50,7 @@ AWDataEngineAggregator::~AWDataEngineAggregator() qCDebug(LOG_AW) << __PRETTY_FUNCTION__; 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() { auto response = m_interface->allSensors(); @@ -68,14 +73,12 @@ void AWDataEngineAggregator::loadSources() auto sensors = response.value(); updateSensors(sensors); - for (auto &sensor : sensors.keys()) - sensorAdded(sensor); } 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(); m_interface->subscribe(m_sensors.keys()); @@ -84,7 +87,7 @@ void AWDataEngineAggregator::reconnectSources(const int interval) void AWDataEngineAggregator::dropSource(const QString &_source) { - qCDebug(LOG_AW) << "Disconnect source" << _source; + qCDebug(LOG_AW) << "Disconnect sensor" << _source; m_interface->unsubscribe({_source}); } @@ -94,6 +97,15 @@ void AWDataEngineAggregator::sensorAdded(const QString &_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}); } @@ -114,6 +126,9 @@ void AWDataEngineAggregator::updateData(KSysGuard::SensorDataList _data) void AWDataEngineAggregator::updateSensors(const QHash &_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()); + } } diff --git a/sources/awesome-widget/plugin/awdataengineaggregator.h b/sources/awesome-widget/plugin/awdataengineaggregator.h index f3a1e49..fcdab62 100644 --- a/sources/awesome-widget/plugin/awdataengineaggregator.h +++ b/sources/awesome-widget/plugin/awdataengineaggregator.h @@ -40,6 +40,7 @@ public: explicit AWDataEngineAggregator(QObject *_parent = nullptr); ~AWDataEngineAggregator() override; void disconnectSources(); + [[nodiscard]] bool isValidSensor(const KSysGuard::SensorInfo &_sensor); void loadSources(); void reconnectSources(const int interval); diff --git a/sources/awesome-widget/plugin/awdataenginemapper.cpp b/sources/awesome-widget/plugin/awdataenginemapper.cpp index 7c15e64..cab3e4a 100644 --- a/sources/awesome-widget/plugin/awdataenginemapper.cpp +++ b/sources/awesome-widget/plugin/awdataenginemapper.cpp @@ -92,14 +92,14 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy auto netRegExp = QRegularExpression("^network/.*/(download|upload)$"); auto netTotalRegExp = QRegularExpression("^network/.*/(totalDownload|totalUpload)$"); - if (_source == "battery/ac") { + if (_source == "extsysmon/battery/ac") { // AC m_map.insert(_source, "ac"); m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat; - } else if (_source.startsWith("battery/")) { + } else if (_source.startsWith("extsysmon/battery/")) { // battery stats QString key = _source; - key.remove("battery/"); + key.remove("extsysmon/battery/"); m_map.insert(_source, key); m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float : AWKeysAggregator::FormatterType::IntegerThree; @@ -124,21 +124,21 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy key = QString("cpucl%1").arg(key); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Integer; - } else if (_source.startsWith("custom")) { + } else if (_source.startsWith("extsysmon/custom")) { // custom QString key = _source; - key.remove("custom/"); + key.remove("extsysmon/custom/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source == "desktop/current/name") { + } else if (_source == "extsysmon/desktop/current/name") { // current desktop name m_map.insert(_source, "desktop"); m_formatter["desktop"] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source == "desktop/current/number") { + } else if (_source == "extsysmon/desktop/current/number") { // current desktop number m_map.insert(_source, "ndesktop"); m_formatter["ndesktop"] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source == "desktop/total/number") { + } else if (_source == "extsysmon/desktop/total/number") { // desktop count m_map.insert(_source, "tdesktops"); m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat; @@ -162,11 +162,11 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Integer; } - } else if (_source == "gpu/load") { + } else if (_source == "extsysmon/gpuload/load") { // gpu load m_map.insert(_source, "gpu"); m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float; - } else if (_source == "gpu/temperature") { + } else if (_source == "extsysmon/gputemp/temperature") { // gpu temperature m_map.insert(_source, "gputemp"); m_formatter["gputemp"] = AWKeysAggregator::FormatterType::Temperature; @@ -213,7 +213,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat; } - } else if (_source.startsWith("hdd/temperature")) { + } else if (_source.startsWith("extsysmon/hdd/temperature")) { // hdd temperature QString device = _source; device.remove("hdd/temperature"); @@ -254,18 +254,18 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy // gb m_map.insert(_source, "memusedgb"); m_formatter["memusedgb"] = AWKeysAggregator::FormatterType::MemGBFormat; - } else if (_source == "network/current/name") { + } else if (_source == "extsysmon/network/device") { // network device m_map.insert(_source, "netdev"); m_formatter["netdev"] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source == "network/current/ssid") { + } else if (_source == "extsysmon/network/ssid") { // current ssid m_map.insert(_source, "ssid"); m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source.startsWith("network/response")) { + } else if (_source.startsWith("extsysmon/requests/response")) { // network response QString key = _source; - key.remove("network/"); + key.remove("extsysmon/requests/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; } else if (_source.contains(netRegExp)) { @@ -300,34 +300,34 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat; } - } else if (_source.startsWith("upgrade")) { + } else if (_source.startsWith("extsysmon/upgrade")) { // package manager QString key = _source; - key.remove("upgrade/"); + key.remove("extsysmon/upgrade/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree; - } else if (_source.startsWith("player")) { + } else if (_source.startsWith("extsysmon/player")) { // player QString key = _source; - key.remove("player/"); + key.remove("extsysmon/player/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source == "ps/running/count") { + } else if (_source == "extsysmon/ps/running/count") { // running processes count m_map.insert(_source, "pscount"); m_formatter["pscount"] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source == "ps/running/list") { + } else if (_source == "extsysmon/ps/running/list") { // list of running processes m_map.insert(_source, "ps"); m_formatter["ps"] = AWKeysAggregator::FormatterType::List; - } else if (_source == "ps/total/count") { + } else if (_source == "extsysmon/ps/total/count") { // total processes count m_map.insert(_source, "pstot"); m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source.startsWith("quotes")) { + } else if (_source.startsWith("extsysmon/quotes")) { // quotes QString key = _source; - key.remove("quotes/"); + key.remove("extsysmon/quotes/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Quotes; } else if (_source == "memory/swap/free") { @@ -377,35 +377,35 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy // timestamp m_map.insert(_source, "tstime"); m_formatter["tstime"] = AWKeysAggregator::FormatterType::Timestamp; - } else if (_source == "system/brightness") { + } else if (_source == "extsysmon/system/brightness") { m_map.insert(_source, "brightness"); m_formatter["brightness"] = AWKeysAggregator::FormatterType::IntegerThree; - } else if (_source == "system/volume") { + } else if (_source == "extsysmon/system/volume") { m_map.insert(_source, "volume"); m_formatter["volume"] = AWKeysAggregator::FormatterType::IntegerThree; - } else if (_source == "system/uptime") { + } else if (_source == "os/system/uptime") { // uptime m_map.insert(_source, "uptime"); m_formatter["uptime"] = AWKeysAggregator::FormatterType::Uptime; // custom uptime m_map.insert(_source, "cuptime"); m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom; - } else if (_source.startsWith("weather/temperature")) { + } else if (_source.startsWith("extsysmon/weather/temperature")) { // temperature QString key = _source; - key.remove("weather/"); + key.remove("extsysmon/weather/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; - } else if (_source.startsWith("weather/")) { + } else if (_source.startsWith("extsysmon/weather/")) { // other weather QString key = _source; - key.remove("weather/"); + key.remove("extsysmon/weather/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source.startsWith("load/load")) { + } else if (_source.startsWith("extsysmon/load/load")) { // load source QString key = _source; - key.remove("load/"); + key.remove("extsysmon/load/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; } diff --git a/sources/awesome-widget/plugin/awformatterhelper.cpp b/sources/awesome-widget/plugin/awformatterhelper.cpp index b857673..116f8f6 100644 --- a/sources/awesome-widget/plugin/awformatterhelper.cpp +++ b/sources/awesome-widget/plugin/awformatterhelper.cpp @@ -114,8 +114,7 @@ QStringList AWFormatterHelper::rightKeys() void AWFormatterHelper::editItems() { - repaintList(); - int ret = exec(); + auto ret = exec(); qCInfo(LOG_AW) << "Dialog returns" << ret; } @@ -200,20 +199,20 @@ QPair AWFormatterHelper::readMetad QSettings settings(_filePath, QSettings::IniFormat); settings.beginGroup("Desktop Entry"); - QString name = settings.value("Name", _filePath).toString(); - QString type = settings.value("X-AW-Type", "NoFormat").toString(); - AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(type); + auto name = settings.value("Name", _filePath).toString(); + auto type = settings.value("X-AW-Type", "NoFormat").toString(); + auto formatter = defineFormatterClass(type); settings.endGroup(); return QPair(name, formatter); } -void AWFormatterHelper::doCreateItem() +void AWFormatterHelper::doCreateItem(QListWidget *_widget) { QStringList selection = {"NoFormat", "DateTime", "Float", "List", "Script", "String", "Json"}; 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) { qCWarning(LOG_AW) << "No type selected"; return; @@ -223,18 +222,18 @@ void AWFormatterHelper::doCreateItem() AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(select); switch (formatter) { case AWAbstractFormatter::FormatterClass::DateTime: - return createItem(); + return createItem(_widget); case AWAbstractFormatter::FormatterClass::Float: - return createItem(); + return createItem(_widget); case AWAbstractFormatter::FormatterClass::List: - return createItem(); + return createItem(_widget); case AWAbstractFormatter::FormatterClass::Script: - return createItem(); + return createItem(_widget); case AWAbstractFormatter::FormatterClass::String: - return createItem(); + return createItem(_widget); case AWAbstractFormatter::FormatterClass::Json: - return createItem(); + return createItem(_widget); case AWAbstractFormatter::FormatterClass::NoFormat: - return createItem(); + return createItem(_widget); } } diff --git a/sources/awesome-widget/plugin/awformatterhelper.h b/sources/awesome-widget/plugin/awformatterhelper.h index 31b4703..f5b7a9b 100644 --- a/sources/awesome-widget/plugin/awformatterhelper.h +++ b/sources/awesome-widget/plugin/awformatterhelper.h @@ -51,7 +51,7 @@ private: void initFormatters(); [[nodiscard]] static QPair readMetadata(const QString &_filePath); // parent methods - void doCreateItem() override; + void doCreateItem(QListWidget *_widget) override; // properties QHash m_formatters; QHash m_formattersClasses; diff --git a/sources/awesome-widget/plugin/awkeys.cpp b/sources/awesome-widget/plugin/awkeys.cpp index cdf3919..b336cc3 100644 --- a/sources/awesome-widget/plugin/awkeys.cpp +++ b/sources/awesome-widget/plugin/awkeys.cpp @@ -56,21 +56,16 @@ AWKeys::AWKeys(QObject *_parent) createDBusInterface(); // update key data if required - connect(m_keyOperator, SIGNAL(updateKeys(const QStringList &)), this, SLOT(reinitKeys(const QStringList &))); - connect(m_timer, SIGNAL(timeout()), this, SLOT(updateTextData())); + connect(m_keyOperator, &AWKeyOperations::updateKeys, this, &AWKeys::reinitKeys); + connect(m_timer, &QTimer::timeout, this, &AWKeys::updateTextData); // transfer signal from AWDataAggregator object to QML ui - connect(m_dataAggregator, SIGNAL(toolTipPainted(const QString &)), this, - SIGNAL(needToolTipToBeUpdated(const QString &))); + connect(m_dataAggregator, &AWDataAggregator::toolTipPainted, [this](const QString &_tooltip) { emit(needToolTipToBeUpdated(_tooltip)); }); - connect(this, SIGNAL(dropSourceFromDataengine(const QString &)), m_dataEngineAggregator, - SLOT(dropSource(const QString &))); - connect(m_dataEngineAggregator, - SIGNAL(dataUpdated(const QHash &, const KSysGuard::SensorDataList &)), this, - SLOT(dataUpdated(const QHash &, const KSysGuard::SensorDataList &))); + connect(this, &AWKeys::dropSourceFromDataengine, m_dataEngineAggregator, &AWDataEngineAggregator::dropSource); + connect(m_dataEngineAggregator, &AWDataEngineAggregator::dataUpdated, this, &AWKeys::dataUpdated); // transfer signal from dataengine to update source list - connect(m_dataEngineAggregator, SIGNAL(deviceAdded(const QString &)), m_keyOperator, - SLOT(addDevice(const QString &))); + connect(m_dataEngineAggregator, &AWDataEngineAggregator::deviceAdded, m_keyOperator, &AWKeyOperations::addDevice); } @@ -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 if (tags.isEmpty()) { - qCInfo(LOG_AW) << "Source" << _source << "not found"; + qCInfo(LOG_AW) << "Sensor" << _source << "not found"; return emit(dropSourceFromDataengine(_source)); } diff --git a/sources/awesomewidgets/abstractextitemaggregator.cpp b/sources/awesomewidgets/abstractextitemaggregator.cpp index eb90bf4..0f344c4 100644 --- a/sources/awesomewidgets/abstractextitemaggregator.cpp +++ b/sources/awesomewidgets/abstractextitemaggregator.cpp @@ -26,46 +26,28 @@ #include -AbstractExtItemAggregator::AbstractExtItemAggregator(QWidget *_parent, QString _type) - : QDialog(_parent) - , ui(new Ui::AbstractExtItemAggregator) +AbstractExtItemAggregator::AbstractExtItemAggregator(QObject *_parent, QString _type) + : QObject(_parent) , m_type(std::move(_type)) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; // create directory at $HOME auto localDir = QString("%1/awesomewidgets/%2") - .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), type()); + .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), type()); QDir localDirectory; if (localDirectory.mkpath(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__; - - delete ui; -} - - -void AbstractExtItemAggregator::copyItem() -{ - auto source = itemFromWidget(); + auto source = itemFromWidget(_widget); auto fileName = getName(); auto number = uniqNumber(); auto dir = QString("%1/awesomewidgets/%2") - .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); + .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); if ((!source) || (fileName.isEmpty())) { qCWarning(LOG_LIB) << "Nothing to copy"; return; @@ -73,16 +55,16 @@ void AbstractExtItemAggregator::copyItem() auto filePath = QString("%1/%2").arg(dir, fileName); auto newItem = source->copy(filePath, number); - if (newItem->showConfiguration(this, configArgs()) == 1) { + if (newItem->showConfiguration(nullptr, configArgs()) == 1) { initItems(); - repaintList(); + repaintList(_widget); } } -void AbstractExtItemAggregator::deleteItem() +void AbstractExtItemAggregator::deleteItem(QListWidget *_widget) { - auto source = itemFromWidget(); + auto source = itemFromWidget(_widget); if (!source) { qCWarning(LOG_LIB) << "Nothing to delete"; return; @@ -90,30 +72,63 @@ void AbstractExtItemAggregator::deleteItem() if (source->tryDelete()) { initItems(); - repaintList(); + repaintList(_widget); } } -void AbstractExtItemAggregator::editItem() +void AbstractExtItemAggregator::editItem(QListWidget *_widget) { - auto source = itemFromWidget(); + auto source = itemFromWidget(_widget); if (!source) { qCWarning(LOG_LIB) << "Nothing to edit"; return; } - if (source->showConfiguration(this, configArgs()) == 1) { + if (source->showConfiguration(nullptr, configArgs()) == 1) { 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(_button) == copyButton) + copyItem(ui->listWidget); + else if (dynamic_cast(_button) == createButton) + doCreateItem(ui->listWidget); + else if (dynamic_cast(_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() { 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())) return ""; 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) 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()) { QString fileName = QFileInfo(_item->fileName()).fileName(); - auto item = new QListWidgetItem(fileName, ui->listWidget); + auto item = new QListWidgetItem(fileName, _widget); QStringList tooltip; tooltip.append(i18n("Name: %1", _item->name())); tooltip.append(i18n("Comment: %1", _item->comment())); tooltip.append(i18n("Identity: %1", _item->uniq())); 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; } - - -void AbstractExtItemAggregator::editItemActivated(QListWidgetItem *) -{ - return editItem(); -} - - -void AbstractExtItemAggregator::editItemButtonPressed(QAbstractButton *_button) -{ - if (dynamic_cast(_button) == copyButton) - return copyItem(); - else if (dynamic_cast(_button) == createButton) - return doCreateItem(); - else if (dynamic_cast(_button) == deleteButton) - return deleteItem(); - else if (ui->buttonBox->buttonRole(_button) == QDialogButtonBox::AcceptRole) - return editItem(); -} diff --git a/sources/awesomewidgets/abstractextitemaggregator.h b/sources/awesomewidgets/abstractextitemaggregator.h index 781a657..d984a97 100644 --- a/sources/awesomewidgets/abstractextitemaggregator.h +++ b/sources/awesomewidgets/abstractextitemaggregator.h @@ -18,7 +18,6 @@ #ifndef ABSTRACTEXTITEMAGGREGATOR_H #define ABSTRACTEXTITEMAGGREGATOR_H -#include #include #include "abstractextitem.h" @@ -26,48 +25,45 @@ class QAbstractButton; +class QListWidget; class QListWidgetItem; -namespace Ui -{ -class AbstractExtItemAggregator; -} -class AbstractExtItemAggregator : public QDialog +class AbstractExtItemAggregator : public QObject { Q_OBJECT Q_PROPERTY(QVariant configArgs READ configArgs WRITE setConfigArgs) Q_PROPERTY(QVariant type READ type) public: - explicit AbstractExtItemAggregator(QWidget *_parent, QString _type); - ~AbstractExtItemAggregator() override; + explicit AbstractExtItemAggregator(QObject *_parent, QString _type); // methods - void copyItem(); - template void createItem() + void copyItem(QListWidget *_widget); + template void createItem(QListWidget *_widget) { auto fileName = getName(); - int number = uniqNumber(); + auto number = uniqNumber(); auto dir = QString("%1/awesomewidgets/%2") - .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); + .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); if (fileName.isEmpty()) { qCWarning(LOG_LIB) << "Nothing to create"; return; } auto filePath = QString("%1/%2").arg(dir, fileName); - T *newItem = new T(this, filePath); + auto newItem = new T(this, filePath); newItem->setNumber(number); - if (newItem->showConfiguration(this, configArgs()) == 1) { + if (newItem->showConfiguration(nullptr, configArgs()) == 1) { initItems(); - repaintList(); + repaintList(_widget); } }; - void deleteItem(); - void editItem(); + void deleteItem(QListWidget *_widget); + void editItem(QListWidget *_widget); + [[nodiscard]] int exec(); QString getName(); virtual void initItems() = 0; - [[nodiscard]] AbstractExtItem *itemFromWidget() const; - void repaintList() const; + [[nodiscard]] AbstractExtItem *itemFromWidget(QListWidget *_widget) const; + void repaintList(QListWidget *_widget) const; [[nodiscard]] int uniqNumber() const; // get methods [[nodiscard]] QVariant configArgs() const; @@ -77,21 +73,12 @@ public: // set methods void setConfigArgs(const QVariant &_configArgs); -private slots: - void editItemActivated(QListWidgetItem *); - void editItemButtonPressed(QAbstractButton *_button); - private: - // ui - Ui::AbstractExtItemAggregator *ui = nullptr; - QPushButton *copyButton = nullptr; - QPushButton *createButton = nullptr; - QPushButton *deleteButton = nullptr; // properties QVariant m_configArgs; QString m_type; // ui methods - virtual void doCreateItem() = 0; + virtual void doCreateItem(QListWidget *_widget) = 0; }; diff --git a/sources/awesomewidgets/awfloatformatter.cpp b/sources/awesomewidgets/awfloatformatter.cpp index 968ec96..dcda974 100644 --- a/sources/awesomewidgets/awfloatformatter.cpp +++ b/sources/awesomewidgets/awfloatformatter.cpp @@ -270,4 +270,3 @@ void AWFloatFormatter::translate(void *_ui) ui->label_multiplier->setText(i18n("Multiplier")); ui->label_summand->setText(i18n("Summand")); } - diff --git a/sources/awesomewidgets/awnoformatter.cpp b/sources/awesomewidgets/awnoformatter.cpp index 5ee8909..4a190cd 100644 --- a/sources/awesomewidgets/awnoformatter.cpp +++ b/sources/awesomewidgets/awnoformatter.cpp @@ -91,4 +91,3 @@ void AWNoFormatter::translate(void *_ui) ui->label_comment->setText(i18n("Comment")); ui->label_type->setText(i18n("Type")); } - diff --git a/sources/awesomewidgets/awscriptformatter.cpp b/sources/awesomewidgets/awscriptformatter.cpp index ff0f55f..8fd4c6b 100644 --- a/sources/awesomewidgets/awscriptformatter.cpp +++ b/sources/awesomewidgets/awscriptformatter.cpp @@ -214,4 +214,3 @@ void AWScriptFormatter::translate(void *_ui) ui->checkBox_hasReturn->setText(i18n("Has return")); ui->label_code->setText(i18n("Code")); } - diff --git a/sources/awesomewidgets/extitemaggregator.h b/sources/awesomewidgets/extitemaggregator.h index 3925b16..91532f7 100644 --- a/sources/awesomewidgets/extitemaggregator.h +++ b/sources/awesomewidgets/extitemaggregator.h @@ -31,7 +31,7 @@ template class ExtItemAggregator : public AbstractExtItemAggregator { public: - explicit ExtItemAggregator(QWidget *_parent, const QString &_type) + explicit ExtItemAggregator(QObject *_parent, const QString &_type) : AbstractExtItemAggregator(_parent, _type) { qSetMessagePattern(AWDebug::LOG_FORMAT); @@ -56,8 +56,7 @@ public: void editItems() { - repaintList(); - int ret = exec(); + auto ret = exec(); qCInfo(LOG_LIB) << "Dialog returns" << ret; }; @@ -123,7 +122,7 @@ private: QList m_items; QList m_activeItems; - void doCreateItem() override { return createItem(); } + void doCreateItem(QListWidget *_widget) override { return createItem(_widget); } QList getItems() { @@ -137,7 +136,7 @@ private: if (!file.endsWith(".desktop")) continue; 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 if (std::any_of(items.cbegin(), items.cend(), [&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); })) @@ -147,8 +146,7 @@ private: } // sort items - std::sort(items.begin(), items.end(), - [](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { return lhs->number() < rhs->number(); }); + std::sort(items.begin(), items.end(), [](auto *lhs, auto *rhs) { return lhs->number() < rhs->number(); }); return items; }; }; diff --git a/sources/awesomewidgets/graphicalitem.cpp b/sources/awesomewidgets/graphicalitem.cpp index 0c3964f..25b6b6e 100644 --- a/sources/awesomewidgets/graphicalitem.cpp +++ b/sources/awesomewidgets/graphicalitem.cpp @@ -433,7 +433,8 @@ int GraphicalItem::showConfiguration(QWidget *_parent, const QVariant &_args) translate(ui); 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_inactiveColor, &QToolButton::clicked, [this, ui]() { changeColor(ui); }); diff --git a/sources/extsysmon/extsysmon.cpp b/sources/extsysmon/extsysmon.cpp index b55f54b..65b583f 100644 --- a/sources/extsysmon/extsysmon.cpp +++ b/sources/extsysmon/extsysmon.cpp @@ -18,6 +18,8 @@ #include "extsysmon.h" #include + +#include #include #include #include @@ -38,26 +40,13 @@ ExtendedSysMon::ExtendedSysMon(QObject *_parent, const QVariantList &_args) qCDebug(LOG_ESM) << metadata; readConfiguration(); - - addContainer(new ExtSysMonAggregator("extsysmon", "extsysmon", this, m_configuration)); -} - - -ExtendedSysMon::~ExtendedSysMon() -{ - qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; -} - - -void ExtendedSysMon::update() -{ - // m_aggregator->update(); + addContainer(new ExtSysMonAggregator("extsysmon", "Extended system monitor", this, m_configuration)); } 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; QSettings settings(fileName, QSettings::IniFormat); QHash rawConfig; @@ -90,13 +79,13 @@ QHash ExtendedSysMon::updateConfiguration(QHash m_configuration; diff --git a/sources/extsysmon/extsysmonaggregator.cpp b/sources/extsysmon/extsysmonaggregator.cpp index 0c9ebd1..d166c13 100644 --- a/sources/extsysmon/extsysmonaggregator.cpp +++ b/sources/extsysmon/extsysmonaggregator.cpp @@ -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 &_config) { qCDebug(LOG_ESM) << "Configuration" << _config; // battery - auto batteryItem = new BatterySource(this, {_config["ACPIPATH"]}); - for (auto &source : batteryItem->sources()) - addObject(new ExtSysMonSensor(this, source, batteryItem)); + createSensor("battery", i18n("Battery"), new BatterySource(this, {_config["ACPIPATH"]})); // custom - auto customItem = new CustomSource(this, {}); - for (auto &source : customItem->sources()) - addObject(new ExtSysMonSensor(this, source, customItem)); + createSensor("custom", i18n("Scripts"), new CustomSource(this, {})); // desktop - auto desktopItem = new DesktopSource(this, {}); - for (auto &source : desktopItem->sources()) - addObject(new ExtSysMonSensor(this, source, desktopItem)); + // FIXME causes segfault + createSensor("desktop", i18n("Desktop"), new DesktopSource(this, {})); // gpu load - auto gpuLoadItem = new GPULoadSource(this, {_config["GPUDEV"]}); - for (auto &source : gpuLoadItem->sources()) - addObject(new ExtSysMonSensor(this, source, gpuLoadItem)); + createSensor("gpuload", i18n("GPU load"), new GPULoadSource(this, {_config["GPUDEV"]})); // gpu temperature - auto gpuTempItem = new GPUTemperatureSource(this, {_config["GPUDEV"]}); - for (auto &source : gpuTempItem->sources()) - addObject(new ExtSysMonSensor(this, source, gpuTempItem)); + createSensor("gputemp", i18n("GPU temperature"), new GPUTemperatureSource(this, {_config["GPUDEV"]})); // hdd temperature - auto hddTempItem - = new HDDTemperatureSource(this, {_config["HDDDEV"], _config["HDDTEMPCMD"]}); - for (auto &source : hddTempItem->sources()) - addObject(new ExtSysMonSensor(this, source, hddTempItem)); + createSensor("hdd", i18n("HDD temperature"), + new HDDTemperatureSource(this, {_config["HDDDEV"], _config["HDDTEMPCMD"]})); // network - auto networkItem = new NetworkSource(this, QStringList()); - for (auto &source : networkItem->sources()) - addObject(new ExtSysMonSensor(this, source, networkItem)); + createSensor("network", i18n("Network"), new NetworkSource(this, {})); // player - auto playerItem - = new PlayerSource(this, {_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], - _config["MPRIS"], _config["PLAYERSYMBOLS"]}); - for (auto &source : playerItem->sources()) - addObject(new ExtSysMonSensor(this, source, playerItem)); + createSensor("player", i18n("Music player"), + new PlayerSource(this, {_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], _config["MPRIS"], + _config["PLAYERSYMBOLS"]})); // processes - auto processesItem = new ProcessesSource(this, {}); - for (auto &source : processesItem->sources()) - addObject(new ExtSysMonSensor(this, source, processesItem)); + createSensor("ps", i18n("Processes"), new ProcessesSource(this, {})); // network request - auto requestItem = new RequestSource(this, {}); - for (auto &source : requestItem->sources()) - addObject(new ExtSysMonSensor(this, source, requestItem)); + createSensor("requests", i18n("Network requests"), new RequestSource(this, {})); // quotes - auto quotesItem = new QuotesSource(this, {}); - for (auto &source : quotesItem->sources()) - addObject(new ExtSysMonSensor(this, source, quotesItem)); + createSensor("quotes", i18n("Quotes"), new QuotesSource(this, {})); // system - auto systemItem = new SystemInfoSource(this, {}); - for (auto &source : systemItem->sources()) - addObject(new ExtSysMonSensor(this, source, systemItem)); + createSensor("system", i18n("System"), new SystemInfoSource(this, {})); // upgrade - auto upgradeItem = new UpgradeSource(this, {}); - for (auto &source : upgradeItem->sources()) - addObject(new ExtSysMonSensor(this, source, upgradeItem)); + createSensor("upgrade", i18n("Upgrades"), new UpgradeSource(this, {})); // weather - auto weatherItem = new WeatherSource(this, {}); - for (auto &source : weatherItem->sources()) - addObject(new ExtSysMonSensor(this, source, weatherItem)); + createSensor("weather", i18n("Weather"), new WeatherSource(this, {})); #ifdef BUILD_LOAD // additional load source - auto loadItem = new LoadSource(this, QStringList()); - for (auto &source : loadItem->sources()) - addObject(new ExtSysMonSensor(this, source, loadItem)); + createSensor("load", i18n("Load"), new LoadSource(this, {})); #endif /* BUILD_LOAD */ } diff --git a/sources/extsysmon/extsysmonaggregator.h b/sources/extsysmon/extsysmonaggregator.h index 36b9b86..0c0fefc 100644 --- a/sources/extsysmon/extsysmonaggregator.h +++ b/sources/extsysmon/extsysmonaggregator.h @@ -23,6 +23,10 @@ #include "abstractextsysmonsource.h" + +class AbstractExtSysMonSource; +class ExtSysMonSensor; + class ExtSysMonAggregator : public KSysGuard::SensorContainer { Q_OBJECT @@ -32,6 +36,7 @@ public: const QHash &_config); private: + void createSensor(const QString &_id, const QString &_name, AbstractExtSysMonSource *_source); void init(const QHash &_config); }; diff --git a/sources/extsysmonsources/batterysource.cpp b/sources/extsysmonsources/batterysource.cpp index 53e8552..431ee83 100644 --- a/sources/extsysmonsources/batterysource.cpp +++ b/sources/extsysmonsources/batterysource.cpp @@ -48,12 +48,12 @@ BatterySource::~BatterySource() QStringList BatterySource::getSources() { QStringList sources; - sources.append("battery/ac"); - sources.append("battery/bat"); - sources.append("battery/batleft"); - sources.append("battery/batnow"); - sources.append("battery/batrate"); - sources.append("battery/battotal"); + sources.append("ac"); + sources.append("bat"); + sources.append("batleft"); + sources.append("batnow"); + sources.append("batrate"); + sources.append("battotal"); auto directory = QDir(m_acpiPath); @@ -63,11 +63,11 @@ QStringList BatterySource::getSources() qCInfo(LOG_ESS) << "Init batteries count as" << m_batteriesCount; for (int i = 0; i < m_batteriesCount; i++) { - sources.append(QString("battery/bat%1").arg(i)); - sources.append(QString("battery/batleft%1").arg(i)); - sources.append(QString("battery/batnow%1").arg(i)); - sources.append(QString("battery/batrate%1").arg(i)); - sources.append(QString("battery/battotal%1").arg(i)); + sources.append(QString("bat%1").arg(i)); + sources.append(QString("batleft%1").arg(i)); + sources.append(QString("batnow%1").arg(i)); + sources.append(QString("batrate%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)) run(); - QVariant value = m_values.take(_source); - return value; + return m_values.take(_source); } @@ -92,65 +91,65 @@ KSysGuard::SensorInfo *BatterySource::initialData(const QString &_source) const qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "battery/ac") { + if (_source == "ac") { data->name = "Is AC online or not"; data->variantType = QVariant::Bool; data->unit = KSysGuard::UnitNone; - } else if (_source == "battery/bat") { + } else if (_source == "bat") { data->min = 0; data->max = 100; data->name = "Average battery usage"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitPercent; - } else if (_source == "battery/batleft") { + } else if (_source == "batleft") { data->min = 0; data->max = 0; data->name = "Battery discharge time"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitSecond; - } else if (_source == "battery/batnow") { + } else if (_source == "batnow") { data->min = 0; data->max = 0; data->name = "Current battery capacity"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source == "battery/batrate") { + } else if (_source == "batrate") { data->min = 0; data->max = 0; data->name = "Average battery discharge rate"; data->variantType = QVariant::Double; data->unit = KSysGuard::UnitRate; - } else if (_source == "battery/battotal") { + } else if (_source == "battotal") { data->min = 0; data->max = 0; data->name = "Full battery capacity"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("battery/batleft")) { + } else if (_source.startsWith("batleft")) { data->min = 0; data->max = 0; data->name = QString("Battery %1 discharge time").arg(index(_source)); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitSecond; - } else if (_source.startsWith("battery/batnow")) { + } else if (_source.startsWith("batnow")) { data->min = 0; data->max = 0; data->name = QString("Battery %1 capacity").arg(index(_source)); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("battery/battotal")) { + } else if (_source.startsWith("battotal")) { data->min = 0; data->max = 0; data->name = QString("Battery %1 full capacity").arg(index(_source)); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("battery/batrate")) { + } else if (_source.startsWith("batrate")) { data->min = 0; data->max = 0; data->name = QString("Battery %1 discharge rate").arg(index(_source)); data->variantType = QVariant::Double; data->unit = KSysGuard::UnitRate; - } else if (_source.startsWith("battery/bat")) { + } else if (_source.startsWith("bat")) { data->min = 0; data->max = 100; data->name = QString("Battery %1 usage").arg(index(_source)); @@ -167,7 +166,7 @@ void BatterySource::run() // adaptor QFile acFile(QString("%1/AC/online").arg(m_acpiPath)); 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(); // batteries @@ -178,28 +177,27 @@ void BatterySource::run() if (currentLevelFile.open(QIODevice::ReadOnly | QIODevice::Text)) { auto value = QString(currentLevelFile.readLine()).toInt(); 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(); // total QFile fullLevelFile(QString("%1/BAT%2/energy_full").arg(m_acpiPath).arg(i)); 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(); - m_values[QString("battery/bat%1").arg(i)] - = static_cast(100 * m_values[QString("battery/batnow%1").arg(i)].toFloat() - / m_values[QString("battery/battotal%1").arg(i)].toFloat()); + m_values[QString("bat%1").arg(i)] = static_cast(100 * m_values[QString("batnow%1").arg(i)].toFloat() + / m_values[QString("battotal%1").arg(i)].toFloat()); // accumulate - currentLevel += m_values[QString("battery/batnow%1").arg(i)].toFloat(); - fullLevel += m_values[QString("battery/battotal%1").arg(i)].toFloat(); + currentLevel += m_values[QString("batnow%1").arg(i)].toFloat(); + fullLevel += m_values[QString("battotal%1").arg(i)].toFloat(); } // total m_trend[0].append(static_cast(currentLevel)); - m_values["battery/batnow"] = static_cast(currentLevel); - m_values["battery/battotal"] = static_cast(fullLevel); - m_values["battery/bat"] = static_cast(100 * currentLevel / fullLevel); + m_values["batnow"] = static_cast(currentLevel); + m_values["battotal"] = static_cast(fullLevel); + m_values["bat"] = static_cast(100 * currentLevel / fullLevel); calculateRates(); } @@ -245,15 +243,14 @@ void BatterySource::calculateRates() for (int i = 0; i < m_batteriesCount; i++) { auto approx = approximate(m_trend[i + 1]); - m_values[QString("battery/batrate%1").arg(i)] = approx / interval; - m_values[QString("battery/batleft%1").arg(i)] - = interval * m_values[QString("battery/batnow%1").arg(i)].toFloat() / approx; + m_values[QString("batrate%1").arg(i)] = approx / interval; + m_values[QString("batleft%1").arg(i)] = interval * m_values[QString("batnow%1").arg(i)].toFloat() / approx; } // total auto approx = approximate(m_trend[0]); - m_values["battery/batrate"] = approx / interval; - m_values["battery/batleft"] = interval * m_values["battery/batnow"].toFloat() / approx; + m_values["batrate"] = approx / interval; + m_values["batleft"] = interval * m_values["batnow"].toFloat() / approx; // old data cleanup for (auto &trend : m_trend.keys()) { diff --git a/sources/extsysmonsources/customsource.cpp b/sources/extsysmonsources/customsource.cpp index f6b689f..a03214e 100644 --- a/sources/extsysmonsources/customsource.cpp +++ b/sources/extsysmonsources/customsource.cpp @@ -74,7 +74,7 @@ QStringList CustomSource::getSources() { QStringList sources; for (auto &item : m_extScripts->activeItems()) - sources.append(QString("custom/%1").arg(item->tag("custom"))); + sources.append(item->tag("custom")); return sources; } diff --git a/sources/extsysmonsources/desktopsource.cpp b/sources/extsysmonsources/desktopsource.cpp index a301118..3ee3f6d 100644 --- a/sources/extsysmonsources/desktopsource.cpp +++ b/sources/extsysmonsources/desktopsource.cpp @@ -51,13 +51,13 @@ QVariant DesktopSource::data(const QString &_source) auto decrement = KWindowSystem::isPlatformX11() ? 1 : 0; auto current = nativeIndex - decrement; - if (_source == "desktop/current/name") { + if (_source == "current/name") { return m_vdi->desktopNames().at(current); - } else if (_source == "desktop/current/number") { + } else if (_source == "current/number") { return current + 1; - } else if (_source == "desktop/total/name") { + } else if (_source == "total/name") { return m_vdi->desktopNames(); - } else if (_source == "desktop/total/number") { + } else if (_source == "total/number") { return m_vdi->numberOfDesktops(); } @@ -70,20 +70,20 @@ KSysGuard::SensorInfo *DesktopSource::initialData(const QString &_source) const qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "desktop/current/name") { + if (_source == "current/name") { data->name = "Current desktop name"; data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "desktop/current/number") { + } else if (_source == "current/number") { data->min = 0; data->name = "Current desktop number"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source == "desktop/total/name") { + } else if (_source == "total/name") { data->name = "All desktops by name"; data->variantType = QVariant::StringList; data->unit = KSysGuard::UnitNone; - } else if (_source == "desktop/total/number") { + } else if (_source == "total/number") { data->min = 0; data->name = "Desktops count"; data->variantType = QVariant::Int; @@ -97,10 +97,10 @@ KSysGuard::SensorInfo *DesktopSource::initialData(const QString &_source) const QStringList DesktopSource::sources() const { QStringList sources; - sources.append("desktop/current/name"); - sources.append("desktop/current/number"); - sources.append("desktop/total/name"); - sources.append("desktop/total/number"); + sources.append("current/name"); + sources.append("current/number"); + sources.append("total/name"); + sources.append("total/number"); return sources; } diff --git a/sources/extsysmonsources/extsysmonsensor.cpp b/sources/extsysmonsources/extsysmonsensor.cpp index 29931f7..74342f9 100644 --- a/sources/extsysmonsources/extsysmonsensor.cpp +++ b/sources/extsysmonsources/extsysmonsensor.cpp @@ -17,23 +17,67 @@ #include "extsysmonsensor.h" +#include + #include "abstractextsysmonsource.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) - : KSysGuard::SensorObject(_id, _parent) + : KSysGuard::SensorObject(_id, _name, _parent) + , m_source(_source) + , m_timer(new QTimer(this)) { 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()) { - 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); - property->setName(info->name); + auto property = new KSysGuard::SensorProperty(source, info->name, this); property->setUnit(info->unit); property->setVariantType(info->variantType); @@ -41,15 +85,6 @@ ExtSysMonSensor::ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QStr property->setMin(info->min); property->setMax(info->max); - m_properties[source] = property; - } -} - - -void ExtSysMonSensor::update() -{ - for (auto &source : m_properties.keys()) { - auto value = m_source->data(source); - m_properties[source]->setValue(value); + addProperty(property); } } diff --git a/sources/extsysmonsources/extsysmonsensor.h b/sources/extsysmonsources/extsysmonsensor.h index f0a0908..6105cf6 100644 --- a/sources/extsysmonsources/extsysmonsensor.h +++ b/sources/extsysmonsources/extsysmonsensor.h @@ -22,19 +22,23 @@ class AbstractExtSysMonSource; +class QTimer; class ExtSysMonSensor : public KSysGuard::SensorObject { Q_OBJECT public: - explicit ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, AbstractExtSysMonSource *_source); - ~ExtSysMonSensor() override = default; + explicit ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, const QString &_name, + AbstractExtSysMonSource *_source); + ~ExtSysMonSensor() override; + void changeSubscription(bool _subscribed); void update(); private: - QHash m_properties; + void loadProperties(); AbstractExtSysMonSource *m_source = nullptr; + QTimer *m_timer = nullptr; }; diff --git a/sources/extsysmonsources/gpuloadsource.cpp b/sources/extsysmonsources/gpuloadsource.cpp index a1bd171..565cbd2 100644 --- a/sources/extsysmonsources/gpuloadsource.cpp +++ b/sources/extsysmonsources/gpuloadsource.cpp @@ -75,7 +75,7 @@ QVariant GPULoadSource::data(const QString &_source) { qCDebug(LOG_ESS) << "Source" << _source; - if (_source == "gpu/load") + if (_source == "load") run(); return m_values[_source]; @@ -87,7 +87,7 @@ KSysGuard::SensorInfo *GPULoadSource::initialData(const QString &_source) const qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "gpu/load") { + if (_source == "load") { data->min = 0.0; data->max = 100.0; data->name = "GPU usage"; @@ -115,7 +115,7 @@ void GPULoadSource::run() QStringList GPULoadSource::sources() const { QStringList sources; - sources.append("gpu/load"); + sources.append("load"); return sources; } @@ -134,7 +134,7 @@ void GPULoadSource::updateValue() if (!str.contains("")) continue; auto load = str.remove("").remove("").remove('%'); - m_values["gpu/load"] = load.toFloat(); + m_values["load"] = load.toFloat(); break; } } else if (m_device == "ati") { @@ -142,7 +142,7 @@ void GPULoadSource::updateValue() if (!str.contains("load")) continue; QString load = str.split(' ', Qt::SkipEmptyParts)[3].remove('%'); - m_values["gpu/load"] = load.toFloat(); + m_values["load"] = load.toFloat(); break; } } diff --git a/sources/extsysmonsources/gputempsource.cpp b/sources/extsysmonsources/gputempsource.cpp index b74fcf9..f926817 100644 --- a/sources/extsysmonsources/gputempsource.cpp +++ b/sources/extsysmonsources/gputempsource.cpp @@ -55,7 +55,7 @@ QVariant GPUTemperatureSource::data(const QString &_source) { qCDebug(LOG_ESS) << "Source" << _source; - if (_source == "gpu/temperature") + if (_source == "temperature") run(); return m_values[_source]; @@ -67,7 +67,7 @@ KSysGuard::SensorInfo *GPUTemperatureSource::initialData(const QString &_source) qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "gpu/temperature") { + if (_source == "temperature") { data->min = 0.0; data->max = 0.0; data->name = "GPU temperature"; @@ -95,7 +95,7 @@ void GPUTemperatureSource::run() QStringList GPUTemperatureSource::sources() const { QStringList sources; - sources.append("gpu/temperature"); + sources.append("temperature"); return sources; } @@ -114,7 +114,7 @@ void GPUTemperatureSource::updateValue() if (!str.contains("")) continue; QString temp = str.remove("").remove("C"); - m_values["gpu/temperature"] = temp.toFloat(); + m_values["temperature"] = temp.toFloat(); break; } } else if (m_device == "ati") { @@ -122,7 +122,7 @@ void GPUTemperatureSource::updateValue() if (!str.contains("Temperature")) continue; QString temp = str.split(' ', Qt::SkipEmptyParts).at(4); - m_values["gpu/temperature"] = temp.toFloat(); + m_values["temperature"] = temp.toFloat(); break; } } diff --git a/sources/extsysmonsources/hddtempsource.cpp b/sources/extsysmonsources/hddtempsource.cpp index 7af9620..50c11fa 100644 --- a/sources/extsysmonsources/hddtempsource.cpp +++ b/sources/extsysmonsources/hddtempsource.cpp @@ -77,7 +77,7 @@ QVariant HDDTemperatureSource::data(const QString &_source) qCDebug(LOG_ESS) << "Source" << _source; QString device = _source; - device.remove("hdd/temperature"); + device.remove("temperature"); // run cmd if (m_processes[device]->state() == QProcess::NotRunning) { auto cmd = m_cmd.first(); @@ -95,7 +95,7 @@ KSysGuard::SensorInfo *HDDTemperatureSource::initialData(const QString &_source) qCDebug(LOG_ESS) << "Source" << _source; auto device = _source; - device.remove("hdd/temperature"); + device.remove("temperature"); auto data = new KSysGuard::SensorInfo(); data->min = 0.0; @@ -112,7 +112,7 @@ QStringList HDDTemperatureSource::sources() const { QStringList sources; for (auto &device : m_devices) - sources.append(QString("hdd/temperature%1").arg(device)); + sources.append(QString("temperature%1").arg(device)); return sources; } diff --git a/sources/extsysmonsources/loadsource.cpp b/sources/extsysmonsources/loadsource.cpp index d8f1b88..c2062ff 100644 --- a/sources/extsysmonsources/loadsource.cpp +++ b/sources/extsysmonsources/loadsource.cpp @@ -53,7 +53,7 @@ KSysGuard::SensorInfo *LoadSource::initialData(const QString &_source) const qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source.startsWith("load/load")) { + if (_source.startsWith("load")) { data->min = 0; data->max = 0; data->name = "Simple sources for load tests"; @@ -69,7 +69,7 @@ QStringList LoadSource::sources() const { QStringList sources; for (int i = 0; i < 1000; i++) - sources.append(QString("load/load%1").arg(i)); + sources.append(QString("load%1").arg(i)); return sources; } diff --git a/sources/extsysmonsources/networksource.cpp b/sources/extsysmonsources/networksource.cpp index 6762cf1..c8c166e 100644 --- a/sources/extsysmonsources/networksource.cpp +++ b/sources/extsysmonsources/networksource.cpp @@ -52,7 +52,7 @@ NetworkSource::~NetworkSource() QVariant NetworkSource::data(const QString &_source) { - qCDebug(LOG_ESS) << "Source" << _source; + qCWarning(LOG_ESS) << "Source" << _source; if (!m_values.contains(_source)) run(); @@ -65,11 +65,11 @@ KSysGuard::SensorInfo *NetworkSource::initialData(const QString &_source) const qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "network/current/name") { + if (_source == "device") { data->name = "Current network device name"; data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "network/current/ssid") { + } else if (_source == "ssid") { data->name = "Current SSID name"; data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; @@ -81,16 +81,16 @@ KSysGuard::SensorInfo *NetworkSource::initialData(const QString &_source) const void NetworkSource::run() { - m_values["network/current/name"] = NetworkSource::getCurrentDevice(); - m_process->start("iwgetid", QStringList() << "-r"); + m_values["device"] = NetworkSource::getCurrentDevice(); + m_process->start("iwgetid", {"-r"}); } QStringList NetworkSource::sources() const { QStringList sources; - sources.append("network/current/name"); - sources.append("network/current/ssid"); + sources.append("device"); + sources.append("ssid"); return sources; } @@ -104,7 +104,7 @@ void NetworkSource::updateSsid() QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); qCInfo(LOG_ESS) << "Output" << qoutput; - m_values["network/current/ssid"] = qoutput; + m_values["ssid"] = qoutput; } diff --git a/sources/extsysmonsources/playersource.cpp b/sources/extsysmonsources/playersource.cpp index e23a845..98e0cdf 100644 --- a/sources/extsysmonsources/playersource.cpp +++ b/sources/extsysmonsources/playersource.cpp @@ -95,51 +95,51 @@ KSysGuard::SensorInfo *PlayerSource::initialData(const QString &_source) const qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "player/album") { + if (_source == "album") { data->name = "Current song album"; data->variantType = QVariant::String; 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->variantType = QVariant::String; 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->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "player/artist") { + } else if (_source == "artist") { data->name = "Current song artist"; data->variantType = QVariant::String; 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->variantType = QVariant::String; 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->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "player/duration") { + } else if (_source == "duration") { data->min = 0; data->max = 0; data->name = "Current song duration"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitSecond; - } else if (_source == "player/progress") { + } else if (_source == "progress") { data->min = 0; data->max = 0; data->name = "Current song progress"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitSecond; - } else if (_source == "player/title") { + } else if (_source == "title") { data->name = "Current song title"; data->variantType = QVariant::String; 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->variantType = QVariant::String; 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->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; @@ -166,33 +166,30 @@ void PlayerSource::run() // dymanic properties // solid - m_values["player/salbum"] = stripString(m_values["player/album"].toString(), m_symbols); - m_values["player/sartist"] = stripString(m_values["player/artist"].toString(), m_symbols); - m_values["player/stitle"] = stripString(m_values["player/title"].toString(), m_symbols); + m_values["salbum"] = stripString(m_values["album"].toString(), m_symbols); + m_values["sartist"] = stripString(m_values["artist"].toString(), m_symbols); + m_values["stitle"] = stripString(m_values["title"].toString(), m_symbols); // dynamic - m_values["player/dalbum"] - = buildString(m_values["player/dalbum"].toString(), m_values["player/album"].toString(), m_symbols); - m_values["player/dartist"] - = 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); + m_values["dalbum"] = buildString(m_values["dalbum"].toString(), m_values["album"].toString(), m_symbols); + m_values["dartist"] = buildString(m_values["dartist"].toString(), m_values["artist"].toString(), m_symbols); + m_values["dtitle"] = buildString(m_values["dtitle"].toString(), m_values["title"].toString(), m_symbols); } QStringList PlayerSource::sources() const { QStringList sources; - sources.append("player/album"); - sources.append("player/dalbum"); - sources.append("player/salbum"); - sources.append("player/artist"); - sources.append("player/dartist"); - sources.append("player/sartist"); - sources.append("player/duration"); - sources.append("player/progress"); - sources.append("player/title"); - sources.append("player/dtitle"); - sources.append("player/stitle"); + sources.append("album"); + sources.append("dalbum"); + sources.append("salbum"); + sources.append("artist"); + sources.append("dartist"); + sources.append("sartist"); + sources.append("duration"); + sources.append("progress"); + sources.append("title"); + sources.append("dtitle"); + sources.append("stitle"); return sources; } @@ -245,10 +242,10 @@ void PlayerSource::mpdSocketReadyRead() // there are one more time... if ((metadata == "time") && (data.contains(':'))) { QStringList times = data.split(':'); - m_mpdCached["player/duration"] = times.at(0).toInt(); - m_mpdCached["player/progress"] = times.at(1).toInt(); + m_mpdCached["duration"] = times.at(0).toInt(); + m_mpdCached["progress"] = times.at(1).toInt(); } 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 info; - info["player/album"] = "unknown"; - info["player/artist"] = "unknown"; - info["player/duration"] = 0; - info["player/progress"] = 0; - info["player/title"] = "unknown"; + info["album"] = "unknown"; + info["artist"] = "unknown"; + info["duration"] = 0; + info["progress"] = 0; + info["title"] = "unknown"; return info; } @@ -321,11 +318,11 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString &_mpris) // another portion of dirty magic auto map = qdbus_cast( response.arguments().first().value().variant().value()); - info["player/album"] = map.value("xesam:album", "unknown"); + info["album"] = map.value("xesam:album", "unknown"); // artist is array - info["player/artist"] = map.value("xesam:artist", "unknown").toString(); - info["player/duration"] = map.value("mpris:length", 0).toInt() / (1000 * 1000); - info["player/title"] = map.value("xesam:title", "unknown"); + info["artist"] = map.value("xesam:artist", "unknown").toString(); + info["duration"] = map.value("mpris:length", 0).toInt() / (1000 * 1000); + info["title"] = map.value("xesam:title", "unknown"); } // position @@ -336,8 +333,7 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString &_mpris) qCWarning(LOG_ESS) << "Error message" << response.errorMessage(); } else { // this cast is simpler than the previous one ;) - info["player/progress"] - = response.arguments().first().value().variant().toLongLong() / (1000 * 1000); + info["progress"] = response.arguments().first().value().variant().toLongLong() / (1000 * 1000); } return info; diff --git a/sources/extsysmonsources/processessource.cpp b/sources/extsysmonsources/processessource.cpp index a3219eb..5af403c 100644 --- a/sources/extsysmonsources/processessource.cpp +++ b/sources/extsysmonsources/processessource.cpp @@ -56,17 +56,17 @@ KSysGuard::SensorInfo *ProcessesSource::initialData(const QString &_source) cons qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "ps/running/count") { + if (_source == "running/count") { data->min = 0; data->max = 0; data->name = "Count of running processes"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source == "ps/running/list") { + } else if (_source == "running/list") { data->name = "All running processes list"; data->variantType = QVariant::StringList; data->unit = KSysGuard::UnitNone; - } else if (_source == "ps/total/count") { + } else if (_source == "total/count") { data->min = 0; data->max = 0; data->name = "Total count of processes"; @@ -99,18 +99,18 @@ void ProcessesSource::run() cmdFile.close(); } - m_values["ps/running/count"] = running.count(); - m_values["ps/running/list"] = running; - m_values["ps/total/count"] = directories.count(); + m_values["running/count"] = running.count(); + m_values["running/list"] = running; + m_values["total/count"] = directories.count(); } QStringList ProcessesSource::sources() const { QStringList sources; - sources.append("ps/running/count"); - sources.append("ps/running/list"); - sources.append("ps/total/count"); + sources.append("running/count"); + sources.append("running/list"); + sources.append("total/count"); return sources; } diff --git a/sources/extsysmonsources/quotessource.cpp b/sources/extsysmonsources/quotessource.cpp index f386345..042b367 100644 --- a/sources/extsysmonsources/quotessource.cpp +++ b/sources/extsysmonsources/quotessource.cpp @@ -48,14 +48,12 @@ QVariant QuotesSource::data(const QString &_source) qCDebug(LOG_ESS) << "Source" << _source; int ind = index(_source); - auto service = _source; - service.remove("quotes/"); - if (!m_values.contains(service)) { + if (!m_values.contains(_source)) { QVariantHash data = m_extQuotes->itemByTagNumber(ind)->run(); for (auto &key : data.keys()) m_values[key] = data[key]; } - QVariant value = m_values.take(service); + QVariant value = m_values.take(_source); return value; } @@ -66,37 +64,37 @@ KSysGuard::SensorInfo *QuotesSource::initialData(const QString &_source) const int ind = index(_source); auto data = new KSysGuard::SensorInfo; - if (_source.startsWith("quotes/pricechg")) { + if (_source.startsWith("pricechg")) { data->min = 0.0; data->max = 0.0; data->name = QString("Absolute price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Double; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("quotes/price")) { + } else if (_source.startsWith("price")) { data->min = 0.0; data->max = 0.0; data->name = QString("Price for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Double; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("quotes/percpricechg")) { + } else if (_source.startsWith("percpricechg")) { data->min = -100.0; data->max = 100.0; data->name = QString("Price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Double; data->unit = KSysGuard::UnitPercent; - } else if (_source.startsWith("quotes/volumechg")) { + } else if (_source.startsWith("volumechg")) { data->min = 0; data->max = 0; data->name = QString("Absolute volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("quotes/volume")) { + } else if (_source.startsWith("volume")) { data->min = 0; data->max = 0; data->name = QString("Volume for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("quotes/percvolumechg")) { + } else if (_source.startsWith("percvolumechg")) { data->min = -100.0; data->max = 100.0; data->name = QString("Volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); @@ -118,12 +116,12 @@ QStringList QuotesSource::getSources() { QStringList sources; for (auto &item : m_extQuotes->activeItems()) { - sources.append(QString("quotes/%1").arg(item->tag("price"))); - sources.append(QString("quotes/%1").arg(item->tag("pricechg"))); - sources.append(QString("quotes/%1").arg(item->tag("percpricechg"))); - sources.append(QString("quotes/%1").arg(item->tag("volume"))); - sources.append(QString("quotes/%1").arg(item->tag("volumechg"))); - sources.append(QString("quotes/%1").arg(item->tag("percvolumechg"))); + sources.append(item->tag("price")); + sources.append(item->tag("pricechg")); + sources.append(item->tag("percpricechg")); + sources.append(item->tag("volume")); + sources.append(item->tag("volumechg")); + sources.append(item->tag("percvolumechg")); } return sources; diff --git a/sources/extsysmonsources/requestsource.cpp b/sources/extsysmonsources/requestsource.cpp index c4a0a3e..2ac9eec 100644 --- a/sources/extsysmonsources/requestsource.cpp +++ b/sources/extsysmonsources/requestsource.cpp @@ -48,14 +48,12 @@ QVariant RequestSource::data(const QString &_source) qCDebug(LOG_ESS) << "Source" << _source; int ind = index(_source); - auto service = _source; - service.remove("network/"); - if (!m_values.contains(service)) { + if (!m_values.contains(_source)) { QVariantHash data = m_extNetRequest->itemByTagNumber(ind)->run(); for (auto &key : data.keys()) m_values[key] = data[key]; } - QVariant value = m_values.take(service); + QVariant value = m_values.take(_source); return value; } @@ -66,7 +64,7 @@ KSysGuard::SensorInfo *RequestSource::initialData(const QString &_source) const int ind = index(_source); 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->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; @@ -86,7 +84,7 @@ QStringList RequestSource::getSources() { QStringList sources; for (auto &item : m_extNetRequest->activeItems()) - sources.append(QString("network/%1").arg(item->tag("response"))); + sources.append(item->tag("response")); return sources; } diff --git a/sources/extsysmonsources/systeminfosource.cpp b/sources/extsysmonsources/systeminfosource.cpp index a089001..4a5dbe1 100644 --- a/sources/extsysmonsources/systeminfosource.cpp +++ b/sources/extsysmonsources/systeminfosource.cpp @@ -59,13 +59,13 @@ KSysGuard::SensorInfo *SystemInfoSource::initialData(const QString &_source) con qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "system/brightness") { + if (_source == "brightness") { data->min = 0.0; data->max = 100.0; data->name = "Screen brightness"; data->variantType = QVariant::Double; data->unit = KSysGuard::UnitPercent; - } else if (_source == "system/volume") { + } else if (_source == "volume") { data->min = 0.0; data->max = 100.0; data->name = "Master volume"; @@ -79,16 +79,16 @@ KSysGuard::SensorInfo *SystemInfoSource::initialData(const QString &_source) con void SystemInfoSource::run() { - m_values["system/brightness"] = SystemInfoSource::getCurrentBrightness(); - m_values["system/volume"] = SystemInfoSource::getCurrentVolume(); + m_values["brightness"] = SystemInfoSource::getCurrentBrightness(); + m_values["volume"] = SystemInfoSource::getCurrentVolume(); } QStringList SystemInfoSource::sources() const { QStringList sources; - sources.append("system/brightness"); - sources.append("system/volume"); + sources.append("brightness"); + sources.append("volume"); return sources; } @@ -100,24 +100,24 @@ QVariant SystemInfoSource::fromDBusVariant(const QVariant &value) } -float SystemInfoSource::getCurrentBrightness() +double SystemInfoSource::getCurrentBrightness() { qCDebug(LOG_ESS) << "Get current brightness"; auto maxBrightness = sendDBusRequest("org.kde.Solid.PowerManagement", "/org/kde/Solid/PowerManagement/Actions/BrightnessControl", "org.kde.Solid.PowerManagement.Actions.BrightnessControl", "brightnessMax") - .toFloat(); + .toDouble(); auto brightness = sendDBusRequest("org.kde.Solid.PowerManagement", "/org/kde/Solid/PowerManagement/Actions/BrightnessControl", "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"; @@ -129,7 +129,7 @@ float SystemInfoSource::getCurrentVolume() if (currentMixer.isEmpty()) { qCWarning(LOG_ESS) << "Mixer is empty"; - return std::numeric_limits::quiet_NaN(); + return std::numeric_limits::quiet_NaN(); } currentMixer.replace(":", "_").replace(".", "_").replace("-", "_"); @@ -140,14 +140,14 @@ float SystemInfoSource::getCurrentVolume() .toString(); if (currentControl.isEmpty()) { qCWarning(LOG_ESS) << "Control is empty"; - return std::numeric_limits::quiet_NaN(); + return std::numeric_limits::quiet_NaN(); } currentControl.replace(":", "_").replace(".", "_").replace("-", "_"); auto path = QString("/Mixers/%1/%2").arg(currentMixer).arg(currentControl); return fromDBusVariant(sendDBusRequest("org.kde.kmix", path, "org.freedesktop.DBus.Properties", "Get", QVariantList({"org.kde.KMix.Control", "volume"}))) - .toFloat(); + .toDouble(); } diff --git a/sources/extsysmonsources/systeminfosource.h b/sources/extsysmonsources/systeminfosource.h index 6f0aec2..578e671 100644 --- a/sources/extsysmonsources/systeminfosource.h +++ b/sources/extsysmonsources/systeminfosource.h @@ -39,8 +39,8 @@ private: // configuration and values QVariantHash m_values; static QVariant fromDBusVariant(const QVariant &value); - static float getCurrentBrightness(); - static float getCurrentVolume(); + static double getCurrentBrightness(); + static double getCurrentVolume(); static QVariant sendDBusRequest(const QString &destination, const QString &path, const QString &interface, const QString &method, const QVariantList &args = QVariantList()); }; diff --git a/sources/extsysmonsources/upgradesource.cpp b/sources/extsysmonsources/upgradesource.cpp index 5b165ad..f278bcf 100644 --- a/sources/extsysmonsources/upgradesource.cpp +++ b/sources/extsysmonsources/upgradesource.cpp @@ -75,7 +75,7 @@ QStringList UpgradeSource::getSources() { QStringList sources; for (auto &item : m_extUpgrade->activeItems()) - sources.append(QString("upgrade/%1").arg(item->tag("pkgcount"))); + sources.append(item->tag("pkgcount")); return sources; } diff --git a/sources/extsysmonsources/weathersource.cpp b/sources/extsysmonsources/weathersource.cpp index 2be6194..678fcc9 100644 --- a/sources/extsysmonsources/weathersource.cpp +++ b/sources/extsysmonsources/weathersource.cpp @@ -48,14 +48,12 @@ QVariant WeatherSource::data(const QString &_source) qCDebug(LOG_ESS) << "Source" << _source; int ind = index(_source); - auto service = _source; - service.remove("weather/"); - if (!m_values.contains(service)) { + if (!m_values.contains(_source)) { QVariantHash data = m_extWeather->itemByTagNumber(ind)->run(); for (auto &key : data.keys()) m_values[key] = data[key]; } - QVariant value = m_values.take(service); + QVariant value = m_values.take(_source); return value; } @@ -66,35 +64,35 @@ KSysGuard::SensorInfo *WeatherSource::initialData(const QString &_source) const int ind = index(_source); auto data = new KSysGuard::SensorInfo(); - if (_source.startsWith("weather/weatherId")) { + if (_source.startsWith("weatherId")) { data->min = 0; data->max = 1000; data->name = QString("Numeric weather ID for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Int; 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->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("weather/humidity")) { + } else if (_source.startsWith("humidity")) { data->min = 0; data->max = 100; data->name = QString("Humidity for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitPercent; - } else if (_source.startsWith("weather/pressure")) { + } else if (_source.startsWith("pressure")) { data->min = 0; data->max = 0; data->name = QString("Atmospheric pressure for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("weather/temperature")) { + } else if (_source.startsWith("temperature")) { data->min = 0.0; data->max = 0.0; data->name = QString("Temperature for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Double; 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->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; @@ -114,12 +112,12 @@ QStringList WeatherSource::getSources() { QStringList sources; for (auto &item : m_extWeather->activeItems()) { - sources.append(QString("weather/%1").arg(item->tag("weatherId"))); - sources.append(QString("weather/%1").arg(item->tag("weather"))); - sources.append(QString("weather/%1").arg(item->tag("humidity"))); - sources.append(QString("weather/%1").arg(item->tag("pressure"))); - sources.append(QString("weather/%1").arg(item->tag("temperature"))); - sources.append(QString("weather/%1").arg(item->tag("timestamp"))); + sources.append(item->tag("weatherId")); + sources.append(item->tag("weather")); + sources.append(item->tag("humidity")); + sources.append(item->tag("pressure")); + sources.append(item->tag("temperature")); + sources.append(item->tag("timestamp")); } return sources;