refactor: simplify sources processing

This commit is contained in:
2024-03-28 11:14:45 +02:00
parent 0bcceefd47
commit 93c8d18d49
68 changed files with 469 additions and 1035 deletions

View File

@ -17,33 +17,58 @@
#pragma once
#include <ksysguard/systemstats/SensorInfo.h>
#include <QObject>
#include <QRegularExpression>
#include <QVariant>
namespace KSysGuard
{
class SensorInfo;
}
class AbstractExtSysMonSource : public QObject
{
Q_OBJECT
public:
explicit AbstractExtSysMonSource(QObject *_parent, const QStringList &)
inline static QRegularExpression NUMBER_REGEX = QRegularExpression("\\d+$");
explicit AbstractExtSysMonSource(QObject *_parent)
: QObject(_parent){};
~AbstractExtSysMonSource() override = default;
virtual QVariant data(const QString &_source) = 0;
[[nodiscard]] virtual KSysGuard::SensorInfo *initialData(const QString &_source) const = 0;
virtual void run() = 0;
[[nodiscard]] virtual QStringList sources() const = 0;
[[nodiscard]] virtual QHash<QString, KSysGuard::SensorInfo *> sources() const = 0;
// used by extensions
// This method returns -1 in case of invalid source name (like if there is no number)
static int index(const QString &_source)
{
QRegularExpression rx("\\d+");
return rx.match(_source).captured().toInt();
auto match = NUMBER_REGEX.match(_source);
return match.hasMatch() ? match.captured().toInt() : -1;
}
// safe value extractor
template <class T> static QVariantHash dataByItem(T *_extension, const QString &_source)
{
auto idx = index(_source);
if (idx == -1)
return {};
auto item = _extension->itemByTagNumber(idx);
return item ? QVariantHash() : item->run();
}
static KSysGuard::SensorInfo *makeSensorInfo(const QString &_name, const QVariant::Type type,
const KSysGuard::Unit unit = KSysGuard::UnitNone, const double min = 0,
const double max = 0)
{
auto info = new KSysGuard::SensorInfo();
info->name = _name;
info->variantType = type;
info->unit = unit;
info->min = min;
info->max = max;
return info;
}
signals:

View File

@ -15,12 +15,8 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#include "batterysource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDir>
#include <cmath>
@ -28,51 +24,15 @@
#include "awdebug.h"
BatterySource::BatterySource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
{
Q_ASSERT(_args.count() == 1);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_acpiPath = _args.at(0);
m_sources = getSources();
}
BatterySource::~BatterySource()
BatterySource::BatterySource(QObject *_parent, QString _acpiPath)
: AbstractExtSysMonSource(_parent)
, m_acpiPath(std::move(_acpiPath))
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
}
QStringList BatterySource::getSources()
{
QStringList sources;
sources.append("ac");
sources.append("bat");
sources.append("batleft");
sources.append("batnow");
sources.append("batrate");
sources.append("battotal");
auto directory = QDir(m_acpiPath);
if (directory.exists()) {
m_batteriesCount
= directory.entryList(QStringList({"BAT*"}), QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name).count();
qCInfo(LOG_ESS) << "Init batteries count as" << m_batteriesCount;
for (int i = 0; i < m_batteriesCount; 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));
}
}
qCInfo(LOG_ESS) << "Sources list" << sources;
return sources;
m_batteriesCount = directory.entryList(QStringList({"BAT*"}), QDir::Dirs | QDir::NoDotAndDotDot).count();
qCInfo(LOG_ESS) << "Init batteries count as" << m_batteriesCount;
}
@ -81,86 +41,11 @@ QVariant BatterySource::data(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source;
if (!m_values.contains(_source))
run();
run(); // syncronous update of all values
return m_values.take(_source);
}
KSysGuard::SensorInfo *BatterySource::initialData(const QString &_source) const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo();
if (_source == "ac") {
data->name = "Is AC online or not";
data->variantType = QVariant::Bool;
data->unit = KSysGuard::UnitNone;
} 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 == "batleft") {
data->min = 0;
data->max = 0;
data->name = "Battery discharge time";
data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitSecond;
} 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 == "batrate") {
data->min = 0;
data->max = 0;
data->name = "Average battery discharge rate";
data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitRate;
} 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("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("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("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("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("bat")) {
data->min = 0;
data->max = 100;
data->name = QString("Battery %1 usage").arg(index(_source));
data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitPercent;
}
return data;
}
void BatterySource::run()
{
// adaptor
@ -203,9 +88,32 @@ void BatterySource::run()
}
QStringList BatterySource::sources() const
QHash<QString, KSysGuard::SensorInfo *> BatterySource::sources() const
{
return m_sources;
auto result = QHash<QString, KSysGuard::SensorInfo *>();
// fixed fields
result.insert("ac", makeSensorInfo("Is AC online or not", QVariant::Bool));
result.insert("bat", makeSensorInfo("Average battery usage", QVariant::Int, KSysGuard::UnitPercent, 0, 100));
result.insert("batleft", makeSensorInfo("Battery discharge time", QVariant::Int, KSysGuard::UnitSecond));
result.insert("batnow", makeSensorInfo("Current battery capacity", QVariant::Int));
result.insert("batrate", makeSensorInfo("Average battery discharge rate", QVariant::Double, KSysGuard::UnitRate));
result.insert("battotal", makeSensorInfo("Full battery capacity", QVariant::Int));
// generators
for (auto i = 0; i < m_batteriesCount; i++) {
result.insert(QString("bat%1").arg(i), makeSensorInfo(QString("Battery %1 usage").arg(i), QVariant::Int,
KSysGuard::UnitPercent, 0, 100));
result.insert(QString("batleft%1").arg(i), makeSensorInfo(QString("Battery %1 discharge time").arg(i),
QVariant::Int, KSysGuard::UnitSecond));
result.insert(QString("batnow%1").arg(i), makeSensorInfo(QString("Battery %1 capacity").arg(i), QVariant::Int));
result.insert(QString("batrate%1").arg(i), makeSensorInfo(QString("Battery %1 discharge rate").arg(i),
QVariant::Double, KSysGuard::UnitRate));
result.insert(QString("battotal%1").arg(i),
makeSensorInfo(QString("Battery %1 full capacity").arg(i), QVariant::Int));
}
return result;
}

View File

@ -30,13 +30,11 @@ class BatterySource : public AbstractExtSysMonSource
public:
const int TREND_LIMIT = 20;
explicit BatterySource(QObject *_parent, const QStringList &_args);
~BatterySource() override;
QStringList getSources();
explicit BatterySource(QObject *_parent, QString _acpiPath);
~BatterySource() override = default;
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override;
[[nodiscard]] QStringList sources() const override;
void run();
[[nodiscard]] QHash<QString, KSysGuard::SensorInfo *> sources() const override;
private:
static double approximate(const QList<int> &_trend);

View File

@ -17,28 +17,17 @@
#include "customsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h"
#include "extscript.h"
CustomSource::CustomSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
CustomSource::CustomSource(QObject *_parent)
: AbstractExtSysMonSource(_parent)
{
Q_ASSERT(_args.count() == 0);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_extScripts = new ExtItemAggregator<ExtScript>(nullptr, "scripts");
m_extScripts = new ExtItemAggregator<ExtScript>(this, "scripts");
m_extScripts->initSockets();
m_sources = getSources();
}
CustomSource::~CustomSource()
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
}
@ -47,34 +36,17 @@ QVariant CustomSource::data(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source;
// there are only one value
return m_extScripts->itemByTagNumber(index(_source))->run().values().first();
return dataByItem(m_extScripts, _source).values().first();
}
KSysGuard::SensorInfo *CustomSource::initialData(const QString &_source) const
QHash<QString, KSysGuard::SensorInfo *> CustomSource::sources() const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto result = QHash<QString, KSysGuard::SensorInfo *>();
auto data = new KSysGuard::SensorInfo();
data->name = QString("Custom command '%1' output").arg(m_extScripts->itemByTagNumber(index(_source))->uniq());
data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone;
return data;
}
QStringList CustomSource::sources() const
{
return m_sources;
}
QStringList CustomSource::getSources()
{
QStringList sources;
for (auto &item : m_extScripts->activeItems())
sources.append(item->tag("custom"));
result.insert(item->tag("custom"),
makeSensorInfo(QString("Custom command '%1' output").arg(item->uniq()), QVariant::String));
return sources;
return result;
}

View File

@ -30,16 +30,12 @@ class CustomSource : public AbstractExtSysMonSource
Q_OBJECT
public:
explicit CustomSource(QObject *_parent, const QStringList &_args);
~CustomSource() override;
explicit CustomSource(QObject *_parent);
~CustomSource() override = default;
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{};
[[nodiscard]] QStringList sources() const override;
[[nodiscard]] QHash<QString, KSysGuard::SensorInfo *> sources() const override;
private:
QStringList getSources();
// configuration and values
ExtItemAggregator<ExtScript> *m_extScripts = nullptr;
QStringList m_sources;
};

View File

@ -18,17 +18,14 @@
#include "desktopsource.h"
#include <KWindowSystem/KWindowSystem>
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <taskmanager/virtualdesktopinfo.h>
#include "awdebug.h"
DesktopSource::DesktopSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
DesktopSource::DesktopSource(QObject *_parent)
: AbstractExtSysMonSource(_parent)
{
Q_ASSERT(_args.count() == 0);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_vdi = new TaskManager::VirtualDesktopInfo(this);
@ -65,42 +62,14 @@ QVariant DesktopSource::data(const QString &_source)
}
KSysGuard::SensorInfo *DesktopSource::initialData(const QString &_source) const
QHash<QString, KSysGuard::SensorInfo *> DesktopSource::sources() const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto result = QHash<QString, KSysGuard::SensorInfo *>();
auto data = new KSysGuard::SensorInfo();
if (_source == "name") {
data->name = "Current desktop name";
data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone;
} else if (_source == "number") {
data->min = 0;
data->name = "Current desktop number";
data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone;
} else if (_source == "names") {
data->name = "All desktops by name";
data->variantType = QVariant::StringList;
data->unit = KSysGuard::UnitNone;
} else if (_source == "count") {
data->min = 0;
data->name = "Desktops count";
data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone;
}
result.insert("name", makeSensorInfo("Current desktop name", QVariant::String));
result.insert("number", makeSensorInfo("Current desktop number", QVariant::Int));
result.insert("names", makeSensorInfo("All desktops by name", QVariant::StringList));
result.insert("count", makeSensorInfo("Desktops count", QVariant::Int));
return data;
}
QStringList DesktopSource::sources() const
{
QStringList sources;
sources.append("name");
sources.append("number");
sources.append("names");
sources.append("count");
return sources;
return result;
}

View File

@ -31,12 +31,10 @@ class DesktopSource : public AbstractExtSysMonSource
Q_OBJECT
public:
explicit DesktopSource(QObject *_parent, const QStringList &_args);
explicit DesktopSource(QObject *_parent);
~DesktopSource() override;
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{};
[[nodiscard]] QStringList sources() const override;
[[nodiscard]] QHash<QString, KSysGuard::SensorInfo *> sources() const override;
private:
TaskManager::VirtualDesktopInfo *m_vdi = nullptr;

View File

@ -33,8 +33,8 @@ ExtSysMonSensor::ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QStr
loadProperties();
connect(this, &SensorObject::subscribedChanged, [this](bool _state) { changeSubscription(_state); });
connect(m_timer, &QTimer::timeout, [this]() { update(); });
connect(this, &SensorObject::subscribedChanged, this, &ExtSysMonSensor::changeSubscription);
connect(m_timer, &QTimer::timeout, this, &ExtSysMonSensor::update);
}
@ -61,21 +61,22 @@ void ExtSysMonSensor::changeSubscription(bool _subscribed)
void ExtSysMonSensor::update()
{
for (auto &source : m_source->sources()) {
auto property = sensor(source);
if (!property->isSubscribed())
for (auto sensor : sensors()) {
if (!sensor->isSubscribed())
continue; // skip properties which are not explicitly subscribed
auto value = m_source->data(source);
property->setValue(value);
auto value = m_source->data(sensor->id());
sensor->setValue(value);
}
}
void ExtSysMonSensor::loadProperties()
{
for (auto &source : m_source->sources()) {
auto info = m_source->initialData(source);
auto sensors = m_source->sources();
for (auto sensor = sensors.cbegin(); sensor != sensors.cend(); ++sensor) {
auto source = sensor.key();
auto info = sensor.value();
auto property = new KSysGuard::SensorProperty(source, info->name, this);
property->setUnit(info->unit);

View File

@ -31,6 +31,8 @@ public:
explicit ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, const QString &_name,
AbstractExtSysMonSource *_source);
~ExtSysMonSensor() override;
public slots:
void changeSubscription(bool _subscribed);
void update();

View File

@ -15,26 +15,15 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#include "loadsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QRandomGenerator>
#include "awdebug.h"
LoadSource::LoadSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
{
Q_ASSERT(_args.count() == 0);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
}
LoadSource::~LoadSource()
LoadSource::LoadSource(QObject *_parent)
: AbstractExtSysMonSource(_parent)
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
}
@ -48,28 +37,12 @@ QVariant LoadSource::data(const QString &_source)
}
KSysGuard::SensorInfo *LoadSource::initialData(const QString &_source) const
QHash<QString, KSysGuard::SensorInfo *> LoadSource::sources() const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto result = QHash<QString, KSysGuard::SensorInfo *>();
auto data = new KSysGuard::SensorInfo();
if (_source.startsWith("load")) {
data->min = 0;
data->max = 0;
data->name = "Simple sources for load tests";
data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone;
}
for (auto i = 0; i < 1000; i++)
result.insert(QString("load%1").arg(i), makeSensorInfo("Simple sources for load tests", QVariant::Int));
return data;
}
QStringList LoadSource::sources() const
{
QStringList sources;
for (int i = 0; i < 1000; i++)
sources.append(QString("load%1").arg(i));
return sources;
return result;
}

View File

@ -27,10 +27,8 @@ class LoadSource : public AbstractExtSysMonSource
Q_OBJECT
public:
explicit LoadSource(QObject *_parent, const QStringList &_args);
~LoadSource() override;
explicit LoadSource(QObject *_parent);
~LoadSource() override = default;
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{};
[[nodiscard]] QStringList sources() const override;
[[nodiscard]] QHash<QString, KSysGuard::SensorInfo *> sources() const override;
};

View File

@ -15,22 +15,17 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#include "networksource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QNetworkInterface>
#include <QProcess>
#include "awdebug.h"
NetworkSource::NetworkSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
NetworkSource::NetworkSource(QObject *_parent)
: AbstractExtSysMonSource(_parent)
{
Q_ASSERT(_args.count() == 0);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_process = new QProcess(nullptr);
@ -54,47 +49,26 @@ QVariant NetworkSource::data(const QString &_source)
{
qCDebug(LOG_ESS) << "Source" << _source;
if (!m_values.contains(_source))
run();
return m_values.take(_source);
}
KSysGuard::SensorInfo *NetworkSource::initialData(const QString &_source) const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo();
if (_source == "device") {
data->name = "Current network device name";
data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone;
return NetworkSource::getCurrentDevice();
} else if (_source == "ssid") {
data->name = "Current SSID name";
data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone;
if (m_process->state() == QProcess::ProcessState::NotRunning)
m_process->start("iwgetid", {"-r"});
return m_currentSsid;
}
return data;
return {};
}
void NetworkSource::run()
QHash<QString, KSysGuard::SensorInfo *> NetworkSource::sources() const
{
m_values["device"] = NetworkSource::getCurrentDevice();
if (m_process->state() == QProcess::ProcessState::NotRunning) {
m_process->start("iwgetid", {"-r"});
}
}
auto result = QHash<QString, KSysGuard::SensorInfo *>();
result.insert("device", makeSensorInfo("Current network device name", QVariant::String));
result.insert("ssid", makeSensorInfo("Current SSID name", QVariant::String));
QStringList NetworkSource::sources() const
{
QStringList sources;
sources.append("device");
sources.append("ssid");
return sources;
return result;
}
@ -106,7 +80,7 @@ void NetworkSource::updateSsid()
QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed();
qCInfo(LOG_ESS) << "Output" << qoutput;
m_values["ssid"] = qoutput;
m_currentSsid = qoutput;
}

View File

@ -29,18 +29,17 @@ class NetworkSource : public AbstractExtSysMonSource
Q_OBJECT
public:
explicit NetworkSource(QObject *_parent, const QStringList &_args);
explicit NetworkSource(QObject *_parent);
~NetworkSource() override;
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override;
[[nodiscard]] QStringList sources() const override;
void run();
[[nodiscard]] QHash<QString, KSysGuard::SensorInfo *> sources() const override;
private slots:
void updateSsid();
private:
QVariantHash m_values;
QString m_currentSsid;
QProcess *m_process = nullptr;
static QString getCurrentDevice();
};

View File

@ -15,12 +15,8 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#include "playersource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDBusArgument>
#include <QDBusConnection>
#include <QDBusConnectionInterface>
@ -30,18 +26,17 @@
#include "awdebug.h"
PlayerSource::PlayerSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
PlayerSource::PlayerSource(QObject *_parent, QString _player, QString _mpdAddress, int _mpdPort, QString _mpris,
int _symbols)
: AbstractExtSysMonSource(_parent)
, m_mpdAddress(std::move(_mpdAddress))
, m_mpdPort(_mpdPort)
, m_mpris(std::move(_mpris))
, m_player(std::move(_player))
, m_symbols(_symbols)
{
Q_ASSERT(_args.count() == 5);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_player = _args.at(0);
m_mpdAddress = _args.at(1);
m_mpdPort = _args.at(2).toInt();
m_mpris = _args.at(3);
m_symbols = _args.at(4).toInt();
connect(&m_mpdSocket, &QTcpSocket::connected, this, &PlayerSource::mpdSocketConnected);
connect(&m_mpdSocket, &QTcpSocket::readyRead, this, &PlayerSource::mpdSocketReadyRead);
connect(&m_mpdSocket, &QTcpSocket::bytesWritten, this, &PlayerSource::mpdSocketWritten);
@ -62,26 +57,25 @@ QVariant PlayerSource::data(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source;
if (!m_values.contains(_source))
run();
QVariant value = m_values.take(_source);
return value;
run(); // syncronous update of all values
return m_values.take(_source);
}
QString PlayerSource::getAutoMpris()
{
QDBusMessage listServices = QDBusConnection::sessionBus().interface()->call(QDBus::BlockWithGui, "ListNames");
auto listServices = QDBusConnection::sessionBus().interface()->call(QDBus::BlockWithGui, "ListNames");
if (listServices.arguments().isEmpty()) {
qCWarning(LOG_ESS) << "Could not find any DBus service";
return "";
}
QStringList arguments = listServices.arguments().first().toStringList();
auto arguments = listServices.arguments().first().toStringList();
for (auto &arg : arguments) {
if (!arg.startsWith("org.mpris.MediaPlayer2."))
for (auto &service : arguments) {
if (!service.startsWith("org.mpris.MediaPlayer2."))
continue;
qCInfo(LOG_ESS) << "Service found" << arg;
QString service = arg;
qCInfo(LOG_ESS) << "Service found" << service;
service.remove("org.mpris.MediaPlayer2.");
return service;
}
@ -90,65 +84,6 @@ QString PlayerSource::getAutoMpris()
}
KSysGuard::SensorInfo *PlayerSource::initialData(const QString &_source) const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo();
if (_source == "album") {
data->name = "Current song album";
data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone;
} 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 == "dalbum") {
data->name = QString("Current song album (%1 symbols, dynamic)").arg(m_symbols);
data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone;
} else if (_source == "artist") {
data->name = "Current song artist";
data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone;
} 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 == "dartist") {
data->name = QString("Current song artist (%1 symbols, dynamic)").arg(m_symbols);
data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone;
} 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 == "progress") {
data->min = 0;
data->max = 0;
data->name = "Current song progress";
data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitSecond;
} else if (_source == "title") {
data->name = "Current song title";
data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone;
} 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 == "dtitle") {
data->name = QString("Current song title (%1 symbols, dynamic)").arg(m_symbols);
data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone;
}
return data;
}
void PlayerSource::run()
{
// initial data
@ -176,22 +111,29 @@ void PlayerSource::run()
}
QStringList PlayerSource::sources() const
QHash<QString, KSysGuard::SensorInfo *> PlayerSource::sources() const
{
QStringList sources;
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");
auto result = QHash<QString, KSysGuard::SensorInfo *>();
return sources;
result.insert("album", makeSensorInfo("Current song album", QVariant::String));
result.insert("salbum",
makeSensorInfo(QString("Current song album (%1 symbols)").arg(m_symbols), QVariant::String));
result.insert("dalbum",
makeSensorInfo(QString("Current song album (%1 symbols, dynamic)").arg(m_symbols), QVariant::String));
result.insert("artist", makeSensorInfo("Current song artist", QVariant::String));
result.insert("sartist",
makeSensorInfo(QString("Current song artist (%1 symbols)").arg(m_symbols), QVariant::String));
result.insert("dartist", makeSensorInfo(QString("Current song artist (%1 symbols, dynamic)").arg(m_symbols),
QVariant::String));
result.insert("duration", makeSensorInfo("Current song duration", QVariant::Int, KSysGuard::UnitSecond));
result.insert("progress", makeSensorInfo("Current song progress", QVariant::Int, KSysGuard::UnitSecond));
result.insert("title", makeSensorInfo("Current song title", QVariant::String));
result.insert("stitle",
makeSensorInfo(QString("Current song title (%1 symbols)").arg(m_symbols), QVariant::String));
result.insert("dtitle",
makeSensorInfo(QString("Current song title (%1 symbols, dynamic)").arg(m_symbols), QVariant::String));
return result;
}
@ -199,7 +141,7 @@ QString PlayerSource::buildString(const QString &_current, const QString &_value
{
qCDebug(LOG_ESS) << "Current value" << _current << "received" << _value << "will be stripped after" << _s;
int index = _value.indexOf(_current);
auto index = _value.indexOf(_current);
if ((_current.isEmpty()) || ((index + _s + 1) > _value.length()))
return QString("%1").arg(_value.left(_s), -_s, QLatin1Char(' '));
else
@ -230,7 +172,7 @@ void PlayerSource::mpdSocketConnected()
void PlayerSource::mpdSocketReadyRead()
{
QString qoutput = QString::fromUtf8(m_mpdSocket.readAll()).trimmed();
auto qoutput = QString::fromUtf8(m_mpdSocket.readAll()).trimmed();
qCInfo(LOG_ESS) << "Output" << qoutput;
// parse
@ -307,9 +249,8 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString &_mpris)
// /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get
// string:'org.mpris.MediaPlayer2.Player' string:'Metadata'
auto args = QVariantList({"org.mpris.MediaPlayer2.Player", "Metadata"});
QDBusMessage request
= QDBusMessage::createMethodCall(QString("org.mpris.MediaPlayer2.%1").arg(_mpris), "/org/mpris/MediaPlayer2",
"org.freedesktop.DBus.Properties", "Get");
auto request = QDBusMessage::createMethodCall(QString("org.mpris.MediaPlayer2.%1").arg(_mpris),
"/org/mpris/MediaPlayer2", "org.freedesktop.DBus.Properties", "Get");
request.setArguments(args);
auto response = bus.call(request, QDBus::BlockWithGui, REQUEST_TIMEOUT);
if ((response.type() != QDBusMessage::ReplyMessage) || (response.arguments().isEmpty())) {

View File

@ -33,13 +33,13 @@ class PlayerSource : public AbstractExtSysMonSource
public:
const char *MPD_STATUS_REQUEST = "currentsong\nstatus\n";
explicit PlayerSource(QObject *_parent, const QStringList &_args);
explicit PlayerSource(QObject *_parent, QString _player, QString _mpdAddress, int _mpdPort, QString _mpris,
int _symbols);
~PlayerSource() override;
QVariant data(const QString &_source) override;
static QString getAutoMpris();
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override;
[[nodiscard]] QStringList sources() const override;
void run();
[[nodiscard]] QHash<QString, KSysGuard::SensorInfo *> sources() const override;
// additional method to build dynamic tags
static QString buildString(const QString &_current, const QString &_value, int _s);
static QString stripString(const QString &_value, int _s);

View File

@ -15,26 +15,15 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#include "processessource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDir>
#include "awdebug.h"
ProcessesSource::ProcessesSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
{
Q_ASSERT(_args.count() == 0);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
}
ProcessesSource::~ProcessesSource()
ProcessesSource::ProcessesSource(QObject *_parent)
: AbstractExtSysMonSource(_parent)
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
}
@ -45,45 +34,18 @@ QVariant ProcessesSource::data(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source;
if (!m_values.contains(_source))
run();
QVariant value = m_values.take(_source);
return value;
}
run(); // syncronous update of all values
KSysGuard::SensorInfo *ProcessesSource::initialData(const QString &_source) const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo();
if (_source == "running") {
data->min = 0;
data->max = 0;
data->name = "Count of running processes";
data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone;
} else if (_source == "list") {
data->name = "All running processes list";
data->variantType = QVariant::StringList;
data->unit = KSysGuard::UnitNone;
} else if (_source == "count") {
data->min = 0;
data->max = 0;
data->name = "Total count of processes";
data->variantType = QVariant::Int;
data->unit = KSysGuard::UnitNone;
}
return data;
return m_values.take(_source);
}
void ProcessesSource::run()
{
QStringList allDirectories = QDir("/proc").entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
QStringList directories = allDirectories.filter(QRegularExpression("(\\d+)"));
QStringList running;
auto allDirectories = QDir("/proc").entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
auto directories = allDirectories.filter(QRegularExpression("(\\d+)"));
QStringList running;
for (auto &dir : directories) {
QFile statusFile(QString("/proc/%1/status").arg(dir));
if (!statusFile.open(QIODevice::ReadOnly | QIODevice::Text))
@ -92,7 +54,7 @@ void ProcessesSource::run()
if (!cmdFile.open(QIODevice::ReadOnly | QIODevice::Text))
continue;
QString output = statusFile.readAll();
auto output = statusFile.readAll();
if (output.contains("running"))
running.append(cmdFile.readAll());
statusFile.close();
@ -105,12 +67,13 @@ void ProcessesSource::run()
}
QStringList ProcessesSource::sources() const
QHash<QString, KSysGuard::SensorInfo *> ProcessesSource::sources() const
{
QStringList sources;
sources.append("running");
sources.append("list");
sources.append("count");
auto result = QHash<QString, KSysGuard::SensorInfo *>();
return sources;
result.insert("running", makeSensorInfo("Count of running processes", QVariant::Int));
result.insert("list", makeSensorInfo("All running processes list", QVariant::StringList));
result.insert("count", makeSensorInfo("Total count of processes", QVariant::Int));
return result;
}

View File

@ -27,12 +27,11 @@ class ProcessesSource : public AbstractExtSysMonSource
Q_OBJECT
public:
explicit ProcessesSource(QObject *_parent, const QStringList &_args);
~ProcessesSource() override;
explicit ProcessesSource(QObject *_parent);
~ProcessesSource() override = default;
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override;
[[nodiscard]] QStringList sources() const override;
void run();
[[nodiscard]] QHash<QString, KSysGuard::SensorInfo *> sources() const override;
private:
// configuration and values

View File

@ -15,31 +15,19 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#include "quotessource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h"
#include "extquotes.h"
QuotesSource::QuotesSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
QuotesSource::QuotesSource(QObject *_parent)
: AbstractExtSysMonSource(_parent)
{
Q_ASSERT(_args.count() == 0);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_extQuotes = new ExtItemAggregator<ExtQuotes>(nullptr, "quotes");
m_extQuotes->initSockets();
m_sources = getSources();
}
QuotesSource::~QuotesSource()
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
}
@ -47,82 +35,31 @@ QVariant QuotesSource::data(const QString &_source)
{
qCDebug(LOG_ESS) << "Source" << _source;
int ind = index(_source);
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(_source);
return value;
if (!m_values.contains(_source))
m_values = dataByItem(m_extQuotes, _source);
return m_values.take(_source);
}
KSysGuard::SensorInfo *QuotesSource::initialData(const QString &_source) const
QHash<QString, KSysGuard::SensorInfo *> QuotesSource::sources() const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto result = QHash<QString, KSysGuard::SensorInfo *>();
int ind = index(_source);
auto data = new KSysGuard::SensorInfo;
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("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("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("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("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("percvolumechg")) {
data->min = -100.0;
data->max = 100.0;
data->name = QString("Volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitPercent;
}
return data;
}
QStringList QuotesSource::sources() const
{
return m_sources;
}
QStringList QuotesSource::getSources()
{
QStringList sources;
for (auto &item : m_extQuotes->activeItems()) {
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"));
result.insert(item->tag("pricechg"),
makeSensorInfo(QString("Absolute price changes for '%1'").arg(item->uniq()), QVariant::Double));
result.insert(item->tag("price"),
makeSensorInfo(QString("Price for '%1'").arg(item->uniq()), QVariant::Double));
result.insert(item->tag("percpricechg"), makeSensorInfo(QString("Price changes for '%1'").arg(item->uniq()),
QVariant::Double, KSysGuard::UnitPercent, 0, 100));
result.insert(item->tag("volumechg"),
makeSensorInfo(QString("Absolute volume changes for '%1'").arg(item->uniq()), QVariant::Double));
result.insert(item->tag("volume"),
makeSensorInfo(QString("Volume for '%1'").arg(item->uniq()), QVariant::Double));
result.insert(item->tag("percvolumechg"), makeSensorInfo(QString("Volume changes for '%1'").arg(item->uniq()),
QVariant::Double, KSysGuard::UnitPercent, 0, 100));
}
return sources;
return result;
}

View File

@ -30,17 +30,13 @@ class QuotesSource : public AbstractExtSysMonSource
Q_OBJECT
public:
explicit QuotesSource(QObject *_parent, const QStringList &_args);
~QuotesSource() override;
explicit QuotesSource(QObject *_parent);
~QuotesSource() override = default;
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{};
[[nodiscard]] QStringList sources() const override;
[[nodiscard]] QHash<QString, KSysGuard::SensorInfo *> sources() const override;
private:
QStringList getSources();
// configuration and values
ExtItemAggregator<ExtQuotes> *m_extQuotes = nullptr;
QStringList m_sources;
QVariantHash m_values;
};

View File

@ -15,31 +15,19 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#include "requestsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h"
#include "extnetworkrequest.h"
RequestSource::RequestSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
RequestSource::RequestSource(QObject *_parent)
: AbstractExtSysMonSource(_parent)
{
Q_ASSERT(_args.count() == 0);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_extNetRequest = new ExtItemAggregator<ExtNetworkRequest>(nullptr, "requests");
m_extNetRequest->initSockets();
m_sources = getSources();
}
RequestSource::~RequestSource()
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
}
@ -47,44 +35,18 @@ QVariant RequestSource::data(const QString &_source)
{
qCDebug(LOG_ESS) << "Source" << _source;
int ind = index(_source);
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(_source);
return value;
// there are only one value
return dataByItem(m_extNetRequest, _source).values().first();
}
KSysGuard::SensorInfo *RequestSource::initialData(const QString &_source) const
QHash<QString, KSysGuard::SensorInfo *> RequestSource::sources() const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto result = QHash<QString, KSysGuard::SensorInfo *>();
int ind = index(_source);
auto data = new KSysGuard::SensorInfo();
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;
}
return data;
}
QStringList RequestSource::sources() const
{
return m_sources;
}
QStringList RequestSource::getSources()
{
QStringList sources;
for (auto &item : m_extNetRequest->activeItems())
sources.append(item->tag("response"));
result.insert(item->tag("response"),
makeSensorInfo(QString("Network response for %1").arg(item->uniq()), QVariant::String));
return sources;
return result;
}

View File

@ -30,17 +30,13 @@ class RequestSource : public AbstractExtSysMonSource
Q_OBJECT
public:
explicit RequestSource(QObject *_parent, const QStringList &_args);
~RequestSource() override;
explicit RequestSource(QObject *_parent);
~RequestSource() override = default;
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{};
[[nodiscard]] QStringList sources() const override;
[[nodiscard]] QHash<QString, KSysGuard::SensorInfo *> sources() const override;
private:
QStringList getSources();
// configuration and values
ExtItemAggregator<ExtNetworkRequest> *m_extNetRequest = nullptr;
QStringList m_sources;
QVariantHash m_values;
};

View File

@ -30,15 +30,8 @@
#include "awdebug.h"
SystemInfoSource::SystemInfoSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
{
Q_ASSERT(_args.count() == 0);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
}
SystemInfoSource::~SystemInfoSource()
SystemInfoSource::SystemInfoSource(QObject *_parent)
: AbstractExtSysMonSource(_parent)
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
}
@ -48,49 +41,24 @@ QVariant SystemInfoSource::data(const QString &_source)
{
qCDebug(LOG_ESS) << "Source" << _source;
if (!m_values.contains(_source))
run();
return m_values.take(_source);
}
KSysGuard::SensorInfo *SystemInfoSource::initialData(const QString &_source) const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo();
if (_source == "brightness") {
data->min = 0.0;
data->max = 100.0;
data->name = "Screen brightness";
data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitPercent;
return SystemInfoSource::getCurrentBrightness();
} else if (_source == "volume") {
data->min = 0.0;
data->max = 100.0;
data->name = "Master volume";
data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitPercent;
return SystemInfoSource::getCurrentVolume();
}
return data;
return {};
}
void SystemInfoSource::run()
QHash<QString, KSysGuard::SensorInfo *> SystemInfoSource::sources() const
{
m_values["brightness"] = SystemInfoSource::getCurrentBrightness();
m_values["volume"] = SystemInfoSource::getCurrentVolume();
}
auto result = QHash<QString, KSysGuard::SensorInfo *>();
result.insert("brightness", makeSensorInfo("Screen brightness", QVariant::Double, KSysGuard::UnitPercent, 0, 100));
result.insert("volume", makeSensorInfo("Master volume", QVariant::Double, KSysGuard::UnitNone));
QStringList SystemInfoSource::sources() const
{
QStringList sources;
sources.append("brightness");
sources.append("volume");
return sources;
return result;
}
@ -144,7 +112,7 @@ double SystemInfoSource::getCurrentVolume()
}
currentControl.replace(":", "_").replace(".", "_").replace("-", "_");
auto path = QString("/Mixers/%1/%2").arg(currentMixer).arg(currentControl);
auto path = QString("/Mixers/%1/%2").arg(currentMixer, currentControl);
return fromDBusVariant(sendDBusRequest("org.kde.kmix", path, "org.freedesktop.DBus.Properties", "Get",
QVariantList({"org.kde.KMix.Control", "volume"})))
.toDouble();

View File

@ -27,12 +27,10 @@ class SystemInfoSource : public AbstractExtSysMonSource
Q_OBJECT
public:
explicit SystemInfoSource(QObject *_parent, const QStringList &_args);
~SystemInfoSource() override;
explicit SystemInfoSource(QObject *_parent);
~SystemInfoSource() override = default;
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override;
[[nodiscard]] QStringList sources() const override;
[[nodiscard]] QHash<QString, KSysGuard::SensorInfo *> sources() const override;
private:
// configuration and values

View File

@ -17,16 +17,12 @@
#include "timesource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h"
TimeSource::TimeSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
TimeSource::TimeSource(QObject *_parent)
: AbstractExtSysMonSource(_parent)
{
Q_ASSERT(_args.count() == 0);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
}
@ -43,20 +39,11 @@ QVariant TimeSource::data(const QString &_source)
}
KSysGuard::SensorInfo *TimeSource::initialData(const QString &_source) const
QHash<QString, KSysGuard::SensorInfo *> TimeSource::sources() const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto result = QHash<QString, KSysGuard::SensorInfo *>();
auto data = new KSysGuard::SensorInfo();
data->name = "Current time";
data->variantType = QVariant::LongLong;
data->unit = KSysGuard::UnitSecond;
result.insert("now", makeSensorInfo("Current time", QVariant::LongLong, KSysGuard::UnitSecond));
return data;
}
QStringList TimeSource::sources() const
{
return QStringList({"now"});
return result;
}

View File

@ -27,9 +27,8 @@ class TimeSource : public AbstractExtSysMonSource
Q_OBJECT
public:
explicit TimeSource(QObject *_parent, const QStringList &_args);
explicit TimeSource(QObject *_parent);
~TimeSource() override = default;
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{};
[[nodiscard]] QStringList sources() const override;
[[nodiscard]] QHash<QString, KSysGuard::SensorInfo *> sources() const override;
};

View File

@ -15,31 +15,19 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#include "upgradesource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h"
#include "extupgrade.h"
UpgradeSource::UpgradeSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
UpgradeSource::UpgradeSource(QObject *_parent)
: AbstractExtSysMonSource(_parent)
{
Q_ASSERT(_args.count() == 0);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_extUpgrade = new ExtItemAggregator<ExtUpgrade>(nullptr, "upgrade");
m_extUpgrade->initSockets();
m_sources = getSources();
}
UpgradeSource::~UpgradeSource()
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
}
@ -48,34 +36,17 @@ QVariant UpgradeSource::data(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source;
// there are only one value
return m_extUpgrade->itemByTagNumber(index(_source))->run().values().first();
return dataByItem(m_extUpgrade, _source).values().first();
}
KSysGuard::SensorInfo *UpgradeSource::initialData(const QString &_source) const
QHash<QString, KSysGuard::SensorInfo *> UpgradeSource::sources() const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto result = QHash<QString, KSysGuard::SensorInfo *>();
auto data = new KSysGuard::SensorInfo();
data->name = QString("Package manager '%1' metadata").arg(m_extUpgrade->itemByTagNumber(index(_source))->uniq());
data->variantType = QVariant::String;
data->unit = KSysGuard::UnitNone;
return data;
}
QStringList UpgradeSource::sources() const
{
return m_sources;
}
QStringList UpgradeSource::getSources()
{
QStringList sources;
for (auto &item : m_extUpgrade->activeItems())
sources.append(item->tag("pkgcount"));
result.insert(item->tag("pkgcount"),
makeSensorInfo(QString("Package manager '%1' metadata").arg(item->uniq()), QVariant::Int));
return sources;
return result;
}

View File

@ -30,16 +30,12 @@ class UpgradeSource : public AbstractExtSysMonSource
Q_OBJECT
public:
explicit UpgradeSource(QObject *_parent, const QStringList &_args);
~UpgradeSource() override;
explicit UpgradeSource(QObject *_parent);
~UpgradeSource() override = default;
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{};
[[nodiscard]] QStringList sources() const override;
[[nodiscard]] QHash<QString, KSysGuard::SensorInfo *> sources() const override;
private:
QStringList getSources();
// configuration and values
ExtItemAggregator<ExtUpgrade> *m_extUpgrade = nullptr;
QStringList m_sources;
};

View File

@ -15,31 +15,19 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#include "weathersource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h"
#include "extweather.h"
WeatherSource::WeatherSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
WeatherSource::WeatherSource(QObject *_parent)
: AbstractExtSysMonSource(_parent)
{
Q_ASSERT(_args.count() == 0);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_extWeather = new ExtItemAggregator<ExtWeather>(nullptr, "weather");
m_extWeather->initSockets();
m_sources = getSources();
}
WeatherSource::~WeatherSource()
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
}
@ -47,76 +35,31 @@ QVariant WeatherSource::data(const QString &_source)
{
qCDebug(LOG_ESS) << "Source" << _source;
int ind = index(_source);
if (!m_values.contains(_source)) {
auto data = m_extWeather->itemByTagNumber(ind)->run();
m_values.insert(data);
}
if (!m_values.contains(_source))
m_values = dataByItem(m_extWeather, _source);
return m_values.take(_source);
}
KSysGuard::SensorInfo *WeatherSource::initialData(const QString &_source) const
QHash<QString, KSysGuard::SensorInfo *> WeatherSource::sources() const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto result = QHash<QString, KSysGuard::SensorInfo *>();
int ind = index(_source);
auto data = new KSysGuard::SensorInfo();
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")) {
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("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("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("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("timestamp")) {
data->name = QString("Timestamp for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::DateTime;
data->unit = KSysGuard::UnitNone;
}
return data;
}
QStringList WeatherSource::sources() const
{
return m_sources;
}
QStringList WeatherSource::getSources()
{
QStringList sources;
for (auto &item : m_extWeather->activeItems()) {
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"));
result.insert(item->tag("weatherId"), makeSensorInfo(QString("Numeric weather ID for '%1'").arg(item->uniq()),
QVariant::Int, KSysGuard::UnitNone, 0, 1000));
result.insert(item->tag("weather"),
makeSensorInfo(QString("ID string map for '%1'").arg(item->uniq()), QVariant::String));
result.insert(item->tag("humidity"), makeSensorInfo(QString("Humidity for '%1'").arg(item->uniq()),
QVariant::Int, KSysGuard::UnitPercent, 0, 100));
result.insert(item->tag("pressure"),
makeSensorInfo(QString("Atmospheric pressure for '%1'").arg(item->uniq()), QVariant::Int));
result.insert(item->tag("temperature"), makeSensorInfo(QString("Temperature for '%1'").arg(item->uniq()),
QVariant::Double, KSysGuard::UnitCelsius));
result.insert(item->tag("timestamp"), makeSensorInfo(QString("Timestamp for '%1'").arg(item->uniq()),
QVariant::DateTime, KSysGuard::UnitNone));
}
return sources;
return result;
}

View File

@ -30,17 +30,13 @@ class WeatherSource : public AbstractExtSysMonSource
Q_OBJECT
public:
explicit WeatherSource(QObject *_parent, const QStringList &_args);
~WeatherSource() override;
explicit WeatherSource(QObject *_parent);
~WeatherSource() override = default;
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{};
[[nodiscard]] QStringList sources() const override;
[[nodiscard]] QHash<QString, KSysGuard::SensorInfo *> sources() const override;
private:
QStringList getSources();
// configuration and values
ExtItemAggregator<ExtWeather> *m_extWeather = nullptr;
QStringList m_sources;
QVariantHash m_values;
};