do not derive from qwidget in aggregates

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

View File

@ -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<int>(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<int>(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<int>(currentLevel));
m_values["battery/batnow"] = static_cast<int>(currentLevel);
m_values["battery/battotal"] = static_cast<int>(fullLevel);
m_values["battery/bat"] = static_cast<int>(100 * currentLevel / fullLevel);
m_values["batnow"] = static_cast<int>(currentLevel);
m_values["battotal"] = static_cast<int>(fullLevel);
m_values["bat"] = static_cast<int>(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()) {

View File

@ -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;
}

View File

@ -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;
}

View File

@ -17,23 +17,67 @@
#include "extsysmonsensor.h"
#include <QTimer>
#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);
}
}

View File

@ -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<QString, KSysGuard::SensorProperty *> m_properties;
void loadProperties();
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;
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("<gpu_util>"))
continue;
auto load = str.remove("<gpu_util>").remove("</gpu_util>").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;
}
}

View File

@ -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("<gpu_temp>"))
continue;
QString temp = str.remove("<gpu_temp>").remove("C</gpu_temp>");
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;
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<QVariantHash>(
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
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<QDBusVariant>().variant().toLongLong() / (1000 * 1000);
info["progress"] = response.arguments().first().value<QDBusVariant>().variant().toLongLong() / (1000 * 1000);
}
return info;

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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<float>::quiet_NaN();
return std::numeric_limits<double>::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<float>::quiet_NaN();
return std::numeric_limits<double>::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();
}

View File

@ -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());
};

View File

@ -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;
}

View File

@ -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;