port dataengin

This commit is contained in:
Evgenii Alekseev 2024-03-15 18:01:03 +02:00
parent 423597dbd9
commit 42c11a6b60
49 changed files with 490 additions and 502 deletions

View File

@ -34,7 +34,7 @@ AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent)
qDBusRegisterMetaType<QHash<QString, KSysGuard::SensorInfo>>(); qDBusRegisterMetaType<QHash<QString, KSysGuard::SensorInfo>>();
m_interface = new KSysGuard::SystemStats::DBusInterface( m_interface = new KSysGuard::SystemStats::DBusInterface(
KSysGuard::SystemStats::ServiceName, KSysGuard::SystemStats::ObjectPath, QDBusConnection::sessionBus(), this); KSysGuard::SystemStats::ServiceName, KSysGuard::SystemStats::ObjectPath, QDBusConnection::sessionBus(), this);
connect(m_interface, SIGNAL(newSensorData(KSysGuard::SensorDataList)), this, connect(m_interface, SIGNAL(newSensorData(KSysGuard::SensorDataList)), this,
SLOT(updateData(KSysGuard::SensorDataList))); SLOT(updateData(KSysGuard::SensorDataList)));

View File

@ -21,14 +21,14 @@
#include <ksysguard/systemstats/SensorInfo.h> #include <ksysguard/systemstats/SensorInfo.h>
#include <QObject>
#include <QHash> #include <QHash>
#include <QObject>
#include <QSet> #include <QSet>
namespace KSysGuard::SystemStats namespace KSysGuard::SystemStats
{ {
class DBusInterface; class DBusInterface;
} }

View File

@ -76,7 +76,8 @@ QStringList AWDataEngineMapper::keysFromSource(const QString &_source) const
// HACK units required to define should the value be calculated as temperature // HACK units required to define should the value be calculated as temperature
// or fan data // or fan data
QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSysGuard::Unit _units, const QStringList &_keys) QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSysGuard::Unit _units,
const QStringList &_keys)
{ {
qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; qCDebug(LOG_AW) << "Source" << _source << "with units" << _units;

View File

@ -65,8 +65,9 @@ AWKeys::AWKeys(QObject *_parent)
connect(this, SIGNAL(dropSourceFromDataengine(const QString &)), m_dataEngineAggregator, connect(this, SIGNAL(dropSourceFromDataengine(const QString &)), m_dataEngineAggregator,
SLOT(dropSource(const QString &))); SLOT(dropSource(const QString &)));
connect(m_dataEngineAggregator, SIGNAL(dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &, const KSysGuard::SensorDataList &)), connect(m_dataEngineAggregator,
this, SLOT(dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &, const KSysGuard::SensorDataList &))); SIGNAL(dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &, const KSysGuard::SensorDataList &)), this,
SLOT(dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &, const KSysGuard::SensorDataList &)));
// transfer signal from dataengine to update source list // transfer signal from dataengine to update source list
connect(m_dataEngineAggregator, SIGNAL(deviceAdded(const QString &)), m_keyOperator, connect(m_dataEngineAggregator, SIGNAL(deviceAdded(const QString &)), m_keyOperator,
SLOT(addDevice(const QString &))); SLOT(addDevice(const QString &)));
@ -210,7 +211,7 @@ void AWKeys::dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors,
setDataBySource(single.sensorProperty, _sensors.value(single.sensorProperty), single); setDataBySource(single.sensorProperty, _sensors.value(single.sensorProperty), single);
} }
// TODO use QtConcurrent::map or something like that // TODO use QtConcurrent::map or something like that
// QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, "ss", sensor); // QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, "ss", sensor);
} }
} }
@ -265,10 +266,10 @@ void AWKeys::calculateValues()
QStringList mountDevices = m_keyOperator->devices("mount"); QStringList mountDevices = m_keyOperator->devices("mount");
for (auto &device : mountDevices) { for (auto &device : mountDevices) {
int index = mountDevices.indexOf(device); int index = mountDevices.indexOf(device);
m_values[QString("hddtotmb%1").arg(index)] m_values[QString("hddtotmb%1").arg(index)] = m_values[QString("hddfreemb%1").arg(index)].toDouble()
= m_values[QString("hddfreemb%1").arg(index)].toDouble() + m_values[QString("hddmb%1").arg(index)].toDouble(); + m_values[QString("hddmb%1").arg(index)].toDouble();
m_values[QString("hddtotgb%1").arg(index)] m_values[QString("hddtotgb%1").arg(index)] = m_values[QString("hddfreegb%1").arg(index)].toDouble()
= m_values[QString("hddfreegb%1").arg(index)].toDouble() + m_values[QString("hddgb%1").arg(index)].toDouble(); + m_values[QString("hddgb%1").arg(index)].toDouble();
} }
// memtot* // memtot*
@ -360,7 +361,8 @@ QString AWKeys::parsePattern(QString _pattern) const
} }
void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, const KSysGuard::SensorData &_data) void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor,
const KSysGuard::SensorData &_data)
{ {
qCDebug(LOG_AW) << "Source" << _source << _sensor.name << "with data" << _data.payload; qCDebug(LOG_AW) << "Source" << _source << _sensor.name << "with data" << _data.payload;
@ -377,8 +379,6 @@ void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo
m_mutex.lock(); m_mutex.lock();
// HACK workaround for time values which are stored in the different path // HACK workaround for time values which are stored in the different path
std::for_each(tags.cbegin(), tags.cend(), [this, &_data](const QString &tag) { std::for_each(tags.cbegin(), tags.cend(), [this, &_data](const QString &tag) { m_values[tag] = _data.payload; });
m_values[tag] = _data.payload;
});
m_mutex.unlock(); m_mutex.unlock();
} }

View File

@ -72,7 +72,8 @@ private:
void calculateValues(); void calculateValues();
void createDBusInterface(); void createDBusInterface();
[[nodiscard]] QString parsePattern(QString _pattern) const; [[nodiscard]] QString parsePattern(QString _pattern) const;
void setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, const KSysGuard::SensorData &_data); void setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor,
const KSysGuard::SensorData &_data);
// objects // objects
AWDataAggregator *m_dataAggregator = nullptr; AWDataAggregator *m_dataAggregator = nullptr;
AWDataEngineAggregator *m_dataEngineAggregator = nullptr; AWDataEngineAggregator *m_dataEngineAggregator = nullptr;

View File

@ -234,7 +234,8 @@ void AWKeysAggregator::setTranslate(const bool _translate)
} }
QStringList AWKeysAggregator::registerSource(const QString &_source, const KSysGuard::Unit &_units, const QStringList &_keys) QStringList AWKeysAggregator::registerSource(const QString &_source, const KSysGuard::Unit &_units,
const QStringList &_keys)
{ {
qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; qCDebug(LOG_AW) << "Source" << _source << "with units" << _units;

View File

@ -54,7 +54,7 @@ QString AWJsonFormatter::convert(const QVariant &_value) const
// check if _value is string and parse first if required // check if _value is string and parse first if required
QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8()) QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8())
: QJsonDocument::fromVariant(_value); : QJsonDocument::fromVariant(_value);
QVariant converted = json.toVariant(); QVariant converted = json.toVariant();
for (auto &element : m_splittedPath) for (auto &element : m_splittedPath)
converted = getFromJson(converted, element); converted = getFromJson(converted, element);

View File

@ -1,4 +1,4 @@
set(SUBPROJECT plasma_dataengine_extsysmon) set(SUBPROJECT ksystemstats_plugin_extsysmon)
message(STATUS "Subproject ${SUBPROJECT}") message(STATUS "Subproject ${SUBPROJECT}")
add_definitions(-DTRANSLATION_DOMAIN=\"plasma_applet_org.kde.plasma.awesomewidget\") add_definitions(-DTRANSLATION_DOMAIN=\"plasma_applet_org.kde.plasma.awesomewidget\")
@ -12,15 +12,10 @@ include_directories(
${Kf6_INCLUDE} ${Kf6_INCLUDE}
) )
file(GLOB SUBPROJECT_DESKTOP_IN *.desktop)
file(RELATIVE_PATH SUBPROJECT_DESKTOP ${CMAKE_SOURCE_DIR} ${SUBPROJECT_DESKTOP_IN})
file(GLOB SUBPROJECT_SOURCE *.cpp ${CMAKE_SOURCE_DIR}/*.cpp) file(GLOB SUBPROJECT_SOURCE *.cpp ${CMAKE_SOURCE_DIR}/*.cpp)
file(GLOB SUBPROJECT_HEADER *.h) file(GLOB SUBPROJECT_HEADER *.h)
file(GLOB SUBPROJECT_CONF *.conf) file(GLOB SUBPROJECT_CONF *.conf)
# prepare
configure_file(${SUBPROJECT_DESKTOP_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP})
# make # make
add_library(${SUBPROJECT} MODULE ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER}) add_library(${SUBPROJECT} MODULE ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER})
target_link_libraries(${SUBPROJECT} target_link_libraries(${SUBPROJECT}
@ -28,6 +23,5 @@ target_link_libraries(${SUBPROJECT}
${Qt_LIBRARIES} ${Kf6_LIBRARIES}) ${Qt_LIBRARIES} ${Kf6_LIBRARIES})
# install # install
install(TARGETS ${SUBPROJECT} DESTINATION ${PLUGIN_INSTALL_DIR}/plasma/dataengine) install(TARGETS ${SUBPROJECT} DESTINATION ${KDE_INSTALL_PLUGINDIR}/ksystemstats)
#install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP} DESTINATION ${SERVICES_INSTALL_DIR})
install(FILES ${SUBPROJECT_CONF} DESTINATION ${KDE_INSTALL_CONFDIR}) install(FILES ${SUBPROJECT_CONF} DESTINATION ${KDE_INSTALL_CONFDIR})

View File

@ -17,6 +17,7 @@
#include "extsysmon.h" #include "extsysmon.h"
#include <KPluginFactory>
#include <QFile> #include <QFile>
#include <QRegularExpression> #include <QRegularExpression>
#include <QSettings> #include <QSettings>
@ -29,21 +30,16 @@
ExtendedSysMon::ExtendedSysMon(QObject *_parent, const QVariantList &_args) ExtendedSysMon::ExtendedSysMon(QObject *_parent, const QVariantList &_args)
: Plasma::DataEngine(_parent, _args) : KSysGuard::SensorPlugin(_parent, _args)
{ {
Q_UNUSED(_args)
qSetMessagePattern(AWDebug::LOG_FORMAT); qSetMessagePattern(AWDebug::LOG_FORMAT);
qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; qCDebug(LOG_ESM) << __PRETTY_FUNCTION__;
for (auto &metadata : AWDebug::getBuildData()) for (auto &metadata : AWDebug::getBuildData())
qCDebug(LOG_ESM) << metadata; qCDebug(LOG_ESM) << metadata;
setMinimumPollingInterval(333);
readConfiguration(); readConfiguration();
// init aggregator addContainer(new ExtSysMonAggregator("extsysmon", "extsysmon", this, m_configuration));
m_aggregator = new ExtSysMonAggregator(this, m_configuration);
for (auto &source : m_aggregator->sources())
setData(source, m_aggregator->initialData(source));
} }
@ -53,35 +49,9 @@ ExtendedSysMon::~ExtendedSysMon()
} }
QStringList ExtendedSysMon::sources() const void ExtendedSysMon::update()
{ {
return m_aggregator->sources(); // m_aggregator->update();
}
bool ExtendedSysMon::sourceRequestEvent(const QString &_source)
{
qCDebug(LOG_ESM) << "Source" << _source;
return updateSourceEvent(_source);
}
bool ExtendedSysMon::updateSourceEvent(const QString &_source)
{
qCDebug(LOG_ESM) << "Source" << _source;
if (m_aggregator->hasSource(_source)) {
QVariant data = m_aggregator->data(_source);
if (data.isNull())
return false;
setData(_source, "value", data);
} else {
qCWarning(LOG_ESM) << "Unknown source" << _source;
return false;
}
return true;
} }
@ -150,6 +120,6 @@ QHash<QString, QString> ExtendedSysMon::updateConfiguration(QHash<QString, QStri
} }
K_EXPORT_PLASMA_DATAENGINE_WITH_JSON(extsysmon, ExtendedSysMon, "plasma-dataengine-extsysmon.json") K_PLUGIN_CLASS_WITH_JSON(ExtendedSysMon, "metadata.json")
#include "extsysmon.moc" #include "extsysmon.moc"

View File

@ -18,12 +18,10 @@
#ifndef EXTSYSMON_H #ifndef EXTSYSMON_H
#define EXTSYSMON_H #define EXTSYSMON_H
#include <Plasma/Plasma/DataEngine> #include <ksysguard/systemstats/SensorPlugin.h>
class ExtSysMonAggregator; class ExtendedSysMon : public KSysGuard::SensorPlugin
class ExtendedSysMon : public Plasma::DataEngine
{ {
Q_OBJECT Q_OBJECT
@ -31,14 +29,12 @@ public:
explicit ExtendedSysMon(QObject *_parent, const QVariantList &_args); explicit ExtendedSysMon(QObject *_parent, const QVariantList &_args);
~ExtendedSysMon() override; ~ExtendedSysMon() override;
protected: [[nodiscard]] QString providerName() const override { return QStringLiteral("extsysmon"); }
[[nodiscard]] QStringList sources() const override;
bool sourceRequestEvent(const QString &_source) override; void update() override;
bool updateSourceEvent(const QString &_source) override;
private: private:
// configuration // configuration
ExtSysMonAggregator *m_aggregator = nullptr;
QHash<QString, QString> m_configuration; QHash<QString, QString> m_configuration;
// methods // methods
void readConfiguration(); void readConfiguration();

View File

@ -21,6 +21,7 @@
#include "batterysource.h" #include "batterysource.h"
#include "customsource.h" #include "customsource.h"
#include "desktopsource.h" #include "desktopsource.h"
#include "extsysmonsensor.h"
#include "gpuloadsource.h" #include "gpuloadsource.h"
#include "gputempsource.h" #include "gputempsource.h"
#include "hddtempsource.h" #include "hddtempsource.h"
@ -35,8 +36,9 @@
#include "weathersource.h" #include "weathersource.h"
ExtSysMonAggregator::ExtSysMonAggregator(QObject *_parent, const QHash<QString, QString> &_config) ExtSysMonAggregator::ExtSysMonAggregator(const QString &_id, const QString &_name, KSysGuard::SensorPlugin *_parent,
: QObject(_parent) const QHash<QString, QString> &_config)
: KSysGuard::SensorContainer(_id, _name, _parent)
{ {
qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; qCDebug(LOG_ESM) << __PRETTY_FUNCTION__;
@ -44,111 +46,73 @@ ExtSysMonAggregator::ExtSysMonAggregator(QObject *_parent, const QHash<QString,
} }
ExtSysMonAggregator::~ExtSysMonAggregator()
{
qCDebug(LOG_ESM) << __PRETTY_FUNCTION__;
m_map.clear();
}
QVariant ExtSysMonAggregator::data(const QString &_source) const
{
qCDebug(LOG_ESM) << "Source" << _source;
return m_map[_source]->data(_source);
}
bool ExtSysMonAggregator::hasSource(const QString &_source) const
{
qCDebug(LOG_ESM) << "Source" << _source;
return m_map.contains(_source);
}
QVariantMap ExtSysMonAggregator::initialData(const QString &_source) const
{
qCDebug(LOG_ESM) << "Source" << _source;
return hasSource(_source) ? m_map[_source]->initialData(_source) : QVariantMap();
}
QStringList ExtSysMonAggregator::sources() const
{
return m_map.keys();
}
void ExtSysMonAggregator::init(const QHash<QString, QString> &_config) void ExtSysMonAggregator::init(const QHash<QString, QString> &_config)
{ {
qCDebug(LOG_ESM) << "Configuration" << _config; qCDebug(LOG_ESM) << "Configuration" << _config;
// battery // battery
AbstractExtSysMonSource *batteryItem = new BatterySource(this, QStringList() << _config["ACPIPATH"]); auto batteryItem = new BatterySource(this, {_config["ACPIPATH"]});
for (auto &source : batteryItem->sources()) for (auto &source : batteryItem->sources())
m_map[source] = batteryItem; addObject(new ExtSysMonSensor(this, source, batteryItem));
// custom // custom
AbstractExtSysMonSource *customItem = new CustomSource(this, QStringList()); auto customItem = new CustomSource(this, {});
for (auto &source : customItem->sources()) for (auto &source : customItem->sources())
m_map[source] = customItem; addObject(new ExtSysMonSensor(this, source, customItem));
// desktop // desktop
AbstractExtSysMonSource *desktopItem = new DesktopSource(this, QStringList()); auto desktopItem = new DesktopSource(this, {});
for (auto &source : desktopItem->sources()) for (auto &source : desktopItem->sources())
m_map[source] = desktopItem; addObject(new ExtSysMonSensor(this, source, desktopItem));
// gpu load // gpu load
AbstractExtSysMonSource *gpuLoadItem = new GPULoadSource(this, QStringList({_config["GPUDEV"]})); auto gpuLoadItem = new GPULoadSource(this, {_config["GPUDEV"]});
for (auto &source : gpuLoadItem->sources()) for (auto &source : gpuLoadItem->sources())
m_map[source] = gpuLoadItem; addObject(new ExtSysMonSensor(this, source, gpuLoadItem));
// gpu temperature // gpu temperature
AbstractExtSysMonSource *gpuTempItem = new GPUTemperatureSource(this, QStringList({_config["GPUDEV"]})); auto gpuTempItem = new GPUTemperatureSource(this, {_config["GPUDEV"]});
for (auto &source : gpuTempItem->sources()) for (auto &source : gpuTempItem->sources())
m_map[source] = gpuTempItem; addObject(new ExtSysMonSensor(this, source, gpuTempItem));
// hdd temperature // hdd temperature
AbstractExtSysMonSource *hddTempItem auto hddTempItem
= new HDDTemperatureSource(this, QStringList({_config["HDDDEV"], _config["HDDTEMPCMD"]})); = new HDDTemperatureSource(this, {_config["HDDDEV"], _config["HDDTEMPCMD"]});
for (auto &source : hddTempItem->sources()) for (auto &source : hddTempItem->sources())
m_map[source] = hddTempItem; addObject(new ExtSysMonSensor(this, source, hddTempItem));
// network // network
AbstractExtSysMonSource *networkItem = new NetworkSource(this, QStringList()); auto networkItem = new NetworkSource(this, QStringList());
for (auto &source : networkItem->sources()) for (auto &source : networkItem->sources())
m_map[source] = networkItem; addObject(new ExtSysMonSensor(this, source, networkItem));
// player // player
AbstractExtSysMonSource *playerItem auto playerItem
= new PlayerSource(this, QStringList({_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], = new PlayerSource(this, {_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"],
_config["MPRIS"], _config["PLAYERSYMBOLS"]})); _config["MPRIS"], _config["PLAYERSYMBOLS"]});
for (auto &source : playerItem->sources()) for (auto &source : playerItem->sources())
m_map[source] = playerItem; addObject(new ExtSysMonSensor(this, source, playerItem));
// processes // processes
AbstractExtSysMonSource *processesItem = new ProcessesSource(this, QStringList()); auto processesItem = new ProcessesSource(this, {});
for (auto &source : processesItem->sources()) for (auto &source : processesItem->sources())
m_map[source] = processesItem; addObject(new ExtSysMonSensor(this, source, processesItem));
// network request // network request
AbstractExtSysMonSource *requestItem = new RequestSource(this, QStringList()); auto requestItem = new RequestSource(this, {});
for (auto &source : requestItem->sources()) for (auto &source : requestItem->sources())
m_map[source] = requestItem; addObject(new ExtSysMonSensor(this, source, requestItem));
// quotes // quotes
AbstractExtSysMonSource *quotesItem = new QuotesSource(this, QStringList()); auto quotesItem = new QuotesSource(this, {});
for (auto &source : quotesItem->sources()) for (auto &source : quotesItem->sources())
m_map[source] = quotesItem; addObject(new ExtSysMonSensor(this, source, quotesItem));
// system // system
AbstractExtSysMonSource *systemItem = new SystemInfoSource(this, QStringList()); auto systemItem = new SystemInfoSource(this, {});
for (auto &source : systemItem->sources()) for (auto &source : systemItem->sources())
m_map[source] = systemItem; addObject(new ExtSysMonSensor(this, source, systemItem));
// upgrade // upgrade
AbstractExtSysMonSource *upgradeItem = new UpgradeSource(this, QStringList()); auto upgradeItem = new UpgradeSource(this, {});
for (auto &source : upgradeItem->sources()) for (auto &source : upgradeItem->sources())
m_map[source] = upgradeItem; addObject(new ExtSysMonSensor(this, source, upgradeItem));
// weather // weather
AbstractExtSysMonSource *weatherItem = new WeatherSource(this, QStringList()); auto weatherItem = new WeatherSource(this, {});
for (auto &source : weatherItem->sources()) for (auto &source : weatherItem->sources())
m_map[source] = weatherItem; addObject(new ExtSysMonSensor(this, source, weatherItem));
#ifdef BUILD_LOAD #ifdef BUILD_LOAD
// additional load source // additional load source
AbstractExtSysMonSource *loadItem = new LoadSource(this, QStringList()); auto loadItem = new LoadSource(this, QStringList());
for (auto &source : loadItem->sources()) for (auto &source : loadItem->sources())
m_map[source] = loadItem; addObject(new ExtSysMonSensor(this, source, loadItem));
#endif /* BUILD_LOAD */ #endif /* BUILD_LOAD */
} }

View File

@ -19,25 +19,20 @@
#define EXTSYSMONAGGREGATOR_H #define EXTSYSMONAGGREGATOR_H
#include <QObject> #include <QObject>
#include <ksysguard/systemstats/SensorContainer.h>
#include "abstractextsysmonsource.h" #include "abstractextsysmonsource.h"
class ExtSysMonAggregator : public KSysGuard::SensorContainer
class ExtSysMonAggregator : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit ExtSysMonAggregator(QObject *_parent, const QHash<QString, QString> &_config); explicit ExtSysMonAggregator(const QString &_id, const QString &_name, KSysGuard::SensorPlugin *_parent,
~ExtSysMonAggregator() override; const QHash<QString, QString> &_config);
[[nodiscard]] QVariant data(const QString &_source) const;
[[nodiscard]] bool hasSource(const QString &_source) const;
[[nodiscard]] QVariantMap initialData(const QString &_source) const;
[[nodiscard]] QStringList sources() const;
private: private:
void init(const QHash<QString, QString> &_config); void init(const QHash<QString, QString> &_config);
QHash<QString, AbstractExtSysMonSource *> m_map;
}; };

View File

@ -0,0 +1,3 @@
{
"providerName": "extsysmon"
}

View File

@ -1,16 +0,0 @@
[Desktop Entry]
Encoding=UTF-8
Name=Extended SystemMonitor
Comment=Adds some additional functions to System DataEngine
ServiceTypes=Plasma/DataEngine
Type=Service
Icon=utilities-system-monitor
X-KDE-Library=plasma_dataengine_extsysmon
X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis
X-KDE-PluginInfo-Email=esalexeev@gmail.com
X-KDE-PluginInfo-Name=extsysmon
X-KDE-PluginInfo-Version=@PROJECT_VERSION@
X-KDE-PluginInfo-Category=System Information
X-KDE-PluginInfo-License=GPL3

View File

@ -1,20 +0,0 @@
{
"KPlugin": {
"Authors": [
{
"Email": "esalexeev@gmail.com",
"Name": "Evgeniy Alekseev aka arcanis"
}
],
"Category": "System Information",
"Description": "Adds some additional functions to System DataEngine",
"Icon": "utilities-system-monitor",
"Id": "extsysmon",
"License": "GPL3",
"Name": "Extended SystemMonitor",
"ServiceTypes": [
"Plasma/DataEngine"
],
"Version": "@PROJECT_VERSION@"
}
}

View File

@ -23,6 +23,11 @@
#include <QVariant> #include <QVariant>
namespace KSysGuard
{
class SensorInfo;
}
class AbstractExtSysMonSource : public QObject class AbstractExtSysMonSource : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -32,7 +37,7 @@ public:
: QObject(_parent){}; : QObject(_parent){};
~AbstractExtSysMonSource() override = default; ~AbstractExtSysMonSource() override = default;
virtual QVariant data(const QString &_source) = 0; virtual QVariant data(const QString &_source) = 0;
[[nodiscard]] virtual QVariantMap initialData(const QString &_source) const = 0; [[nodiscard]] virtual KSysGuard::SensorInfo *initialData(const QString &_source) const = 0;
virtual void run() = 0; virtual void run() = 0;
[[nodiscard]] virtual QStringList sources() const = 0; [[nodiscard]] virtual QStringList sources() const = 0;
// used by extensions // used by extensions

View File

@ -18,6 +18,9 @@
#include "batterysource.h" #include "batterysource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDir> #include <QDir>
#include <cmath> #include <cmath>
@ -84,77 +87,75 @@ QVariant BatterySource::data(const QString &_source)
} }
QVariantMap BatterySource::initialData(const QString &_source) const KSysGuard::SensorInfo *BatterySource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QVariantMap data; auto data = new KSysGuard::SensorInfo();
if (_source == "battery/ac") { if (_source == "battery/ac") {
data["min"] = false; data->name = "Is AC online or not";
data["max"] = true; data->variantType = QVariant::Bool;
data["name"] = "Is AC online or not"; data->unit = KSysGuard::UnitNone;
data["type"] = "bool";
data["units"] = "";
} else if (_source == "battery/bat") { } else if (_source == "battery/bat") {
data["min"] = 0; data->min = 0;
data["max"] = 100; data->max = 100;
data["name"] = "Average battery usage"; data->name = "Average battery usage";
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = "%"; data->unit = KSysGuard::UnitPercent;
} else if (_source == "battery/batleft") { } else if (_source == "battery/batleft") {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = "Battery discharge time"; data->name = "Battery discharge time";
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = "s"; data->unit = KSysGuard::UnitSecond;
} else if (_source == "battery/batnow") { } else if (_source == "battery/batnow") {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = "Current battery capacity"; data->name = "Current battery capacity";
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = ""; data->unit = KSysGuard::UnitNone;
} else if (_source == "battery/batrate") { } else if (_source == "battery/batrate") {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = "Average battery discharge rate"; data->name = "Average battery discharge rate";
data["type"] = "float"; data->variantType = QVariant::Double;
data["units"] = "1/s"; data->unit = KSysGuard::UnitRate;
} else if (_source == "battery/battotal") { } else if (_source == "battery/battotal") {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = "Full battery capacity"; data->name = "Full battery capacity";
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = ""; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("battery/batleft")) { } else if (_source.startsWith("battery/batleft")) {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = QString("Battery %1 discharge time").arg(index(_source)); data->name = QString("Battery %1 discharge time").arg(index(_source));
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = "s"; data->unit = KSysGuard::UnitSecond;
} else if (_source.startsWith("battery/batnow")) { } else if (_source.startsWith("battery/batnow")) {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = QString("Battery %1 capacity").arg(index(_source)); data->name = QString("Battery %1 capacity").arg(index(_source));
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = ""; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("battery/battotal")) { } else if (_source.startsWith("battery/battotal")) {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = QString("Battery %1 full capacity").arg(index(_source)); data->name = QString("Battery %1 full capacity").arg(index(_source));
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = ""; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("battery/batrate")) { } else if (_source.startsWith("battery/batrate")) {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = QString("Battery %1 discharge rate").arg(index(_source)); data->name = QString("Battery %1 discharge rate").arg(index(_source));
data["type"] = "float"; data->variantType = QVariant::Double;
data["units"] = "1/s"; data->unit = KSysGuard::UnitRate;
} else if (_source.startsWith("battery/bat")) { } else if (_source.startsWith("battery/bat")) {
data["min"] = 0; data->min = 0;
data["max"] = 100; data->max = 100;
data["name"] = QString("Battery %1 usage").arg(index(_source)); data->name = QString("Battery %1 usage").arg(index(_source));
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = "%"; data->unit = KSysGuard::UnitPercent;
} }
return data; return data;

View File

@ -35,7 +35,7 @@ public:
~BatterySource() override; ~BatterySource() override;
QStringList getSources(); QStringList getSources();
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -15,9 +15,11 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#include "customsource.h" #include "customsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h" #include "awdebug.h"
#include "extscript.h" #include "extscript.h"
@ -49,16 +51,14 @@ QVariant CustomSource::data(const QString &_source)
} }
QVariantMap CustomSource::initialData(const QString &_source) const KSysGuard::SensorInfo *CustomSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QVariantMap data; auto data = new KSysGuard::SensorInfo();
data["min"] = ""; data->name = QString("Custom command '%1' output").arg(m_extScripts->itemByTagNumber(index(_source))->uniq());
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = QString("Custom command '%1' output").arg(m_extScripts->itemByTagNumber(index(_source))->uniq()); data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
return data; return data;
} }

View File

@ -34,7 +34,7 @@ public:
explicit CustomSource(QObject *_parent, const QStringList &_args); explicit CustomSource(QObject *_parent, const QStringList &_args);
~CustomSource() override; ~CustomSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -15,10 +15,11 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#include "desktopsource.h" #include "desktopsource.h"
#include <KWindowSystem/KWindowSystem> #include <KWindowSystem/KWindowSystem>
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <taskmanager/virtualdesktopinfo.h> #include <taskmanager/virtualdesktopinfo.h>
#include "awdebug.h" #include "awdebug.h"
@ -64,35 +65,29 @@ QVariant DesktopSource::data(const QString &_source)
} }
QVariantMap DesktopSource::initialData(const QString &_source) const KSysGuard::SensorInfo *DesktopSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QVariantMap data; auto data = new KSysGuard::SensorInfo();
if (_source == "desktop/current/name") { if (_source == "desktop/current/name") {
data["min"] = ""; data->name = "Current desktop name";
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = "Current desktop name"; data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} else if (_source == "desktop/current/number") { } else if (_source == "desktop/current/number") {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->name = "Current desktop number";
data["name"] = "Current desktop number"; data->variantType = QVariant::Int;
data["type"] = "integer"; data->unit = KSysGuard::UnitNone;
data["units"] = "";
} else if (_source == "desktop/total/name") { } else if (_source == "desktop/total/name") {
data["min"] = QStringList(); data->name = "All desktops by name";
data["max"] = QStringList(); data->variantType = QVariant::StringList;
data["name"] = "All desktops by name"; data->unit = KSysGuard::UnitNone;
data["type"] = "QStringList";
data["units"] = "";
} else if (_source == "desktop/total/number") { } else if (_source == "desktop/total/number") {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->name = "Desktops count";
data["name"] = "Desktops count"; data->variantType = QVariant::Int;
data["type"] = "integer"; data->unit = KSysGuard::UnitNone;
data["units"] = "";
} }
return data; return data;

View File

@ -35,7 +35,7 @@ public:
explicit DesktopSource(QObject *_parent, const QStringList &_args); explicit DesktopSource(QObject *_parent, const QStringList &_args);
~DesktopSource() override; ~DesktopSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -0,0 +1,55 @@
/***************************************************************************
* This file is part of awesome-widgets *
* *
* awesome-widgets is free software: you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* awesome-widgets is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#include "extsysmonsensor.h"
#include "abstractextsysmonsource.h"
#include "awdebug.h"
ExtSysMonSensor::ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id,
AbstractExtSysMonSource *_source)
: KSysGuard::SensorObject(_id, _parent)
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_source = _source;
for (auto &source : m_source->sources()) {
auto property = new KSysGuard::SensorProperty(source, this);
auto info = m_source->initialData(source);
property->setName(info->name);
property->setUnit(info->unit);
property->setVariantType(info->variantType);
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);
}
}

View File

@ -0,0 +1,41 @@
/***************************************************************************
* This file is part of awesome-widgets *
* *
* awesome-widgets is free software: you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* awesome-widgets is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#ifndef EXTSYSMONSENSOR_H
#define EXTSYSMONSENSOR_H
#include <ksysguard/systemstats/SensorObject.h>
class AbstractExtSysMonSource;
class ExtSysMonSensor : public KSysGuard::SensorObject
{
Q_OBJECT
public:
explicit ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, AbstractExtSysMonSource *_source);
~ExtSysMonSensor() override = default;
void update();
private:
QHash<QString, KSysGuard::SensorProperty *> m_properties;
AbstractExtSysMonSource *m_source = nullptr;
};
#endif /* EXTSYSMONSENSOR_H */

View File

@ -14,10 +14,11 @@
* You should have received a copy of the GNU General Public License * * You should have received a copy of the GNU General Public License *
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#include "gpuloadsource.h" #include "gpuloadsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QFile> #include <QFile>
#include <QProcess> #include <QProcess>
@ -81,17 +82,17 @@ QVariant GPULoadSource::data(const QString &_source)
} }
QVariantMap GPULoadSource::initialData(const QString &_source) const KSysGuard::SensorInfo *GPULoadSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QVariantMap data; auto data = new KSysGuard::SensorInfo();
if (_source == "gpu/load") { if (_source == "gpu/load") {
data["min"] = 0.0; data->min = 0.0;
data["max"] = 100.0; data->max = 100.0;
data["name"] = "GPU usage"; data->name = "GPU usage";
data["type"] = "float"; data->variantType = QVariant::Double;
data["units"] = "%"; data->unit = KSysGuard::UnitPercent;
} }
return data; return data;

View File

@ -34,7 +34,7 @@ public:
~GPULoadSource() override; ~GPULoadSource() override;
static QString autoGpu(); static QString autoGpu();
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -15,9 +15,11 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#include "gputempsource.h" #include "gputempsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QFile> #include <QFile>
#include <QProcess> #include <QProcess>
@ -60,17 +62,17 @@ QVariant GPUTemperatureSource::data(const QString &_source)
} }
QVariantMap GPUTemperatureSource::initialData(const QString &_source) const KSysGuard::SensorInfo *GPUTemperatureSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QVariantMap data; auto data = new KSysGuard::SensorInfo();
if (_source == "gpu/temperature") { if (_source == "gpu/temperature") {
data["min"] = 0.0; data->min = 0.0;
data["max"] = 0.0; data->max = 0.0;
data["name"] = "GPU temperature"; data->name = "GPU temperature";
data["type"] = "float"; data->variantType = QVariant::Double;
data["units"] = "°C"; data->unit = KSysGuard::UnitCelsius;
} }
return data; return data;

View File

@ -33,7 +33,7 @@ public:
explicit GPUTemperatureSource(QObject *_parent, const QStringList &_args); explicit GPUTemperatureSource(QObject *_parent, const QStringList &_args);
~GPUTemperatureSource() override; ~GPUTemperatureSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,6 +18,9 @@
#include "hddtempsource.h" #include "hddtempsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDir> #include <QDir>
#include <QProcess> #include <QProcess>
@ -87,18 +90,19 @@ QVariant HDDTemperatureSource::data(const QString &_source)
} }
QVariantMap HDDTemperatureSource::initialData(const QString &_source) const KSysGuard::SensorInfo *HDDTemperatureSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QString device = _source; auto device = _source;
device.remove("hdd/temperature"); device.remove("hdd/temperature");
QVariantMap data;
data["min"] = 0.0; auto data = new KSysGuard::SensorInfo();
data["max"] = 0.0; data->min = 0.0;
data["name"] = QString("HDD '%1' temperature").arg(device); data->max = 0.0;
data["type"] = "float"; data->name = QString("HDD '%1' temperature").arg(device);
data["units"] = "°C"; data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitCelsius;
return data; return data;
} }

View File

@ -34,7 +34,7 @@ public:
~HDDTemperatureSource() override; ~HDDTemperatureSource() override;
static QStringList allHdd(); static QStringList allHdd();
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,6 +18,9 @@
#include "loadsource.h" #include "loadsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QRandomGenerator> #include <QRandomGenerator>
#include "awdebug.h" #include "awdebug.h"
@ -45,17 +48,17 @@ QVariant LoadSource::data(const QString &_source)
} }
QVariantMap LoadSource::initialData(const QString &_source) const KSysGuard::SensorInfo *LoadSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QVariantMap data; auto data = new KSysGuard::SensorInfo();
if (_source.startsWith("load/load")) { if (_source.startsWith("load/load")) {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = "Simple sources for load tests"; data->name = "Simple sources for load tests";
data["type"] = "int"; data->variantType = QVariant::Int;
data["units"] = ""; data->unit = KSysGuard::UnitNone;
} }
return data; return data;

View File

@ -31,7 +31,7 @@ public:
explicit LoadSource(QObject *_parent, const QStringList &_args); explicit LoadSource(QObject *_parent, const QStringList &_args);
~LoadSource() override; ~LoadSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;
}; };

View File

@ -18,6 +18,9 @@
#include "networksource.h" #include "networksource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QNetworkInterface> #include <QNetworkInterface>
#include <QProcess> #include <QProcess>
@ -57,23 +60,19 @@ QVariant NetworkSource::data(const QString &_source)
} }
QVariantMap NetworkSource::initialData(const QString &_source) const KSysGuard::SensorInfo *NetworkSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QVariantMap data; auto data = new KSysGuard::SensorInfo();
if (_source == "network/current/name") { if (_source == "network/current/name") {
data["min"] = ""; data->name = "Current network device name";
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = "Current network device name"; data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} else if (_source == "network/current/ssid") { } else if (_source == "network/current/ssid") {
data["min"] = ""; data->name = "Current SSID name";
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = "Current SSID name"; data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} }
return data; return data;

View File

@ -33,7 +33,7 @@ public:
explicit NetworkSource(QObject *_parent, const QStringList &_args); explicit NetworkSource(QObject *_parent, const QStringList &_args);
~NetworkSource() override; ~NetworkSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,6 +18,9 @@
#include "playersource.h" #include "playersource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDBusArgument> #include <QDBusArgument>
#include <QDBusConnection> #include <QDBusConnection>
#include <QDBusConnectionInterface> #include <QDBusConnectionInterface>
@ -87,77 +90,59 @@ QString PlayerSource::getAutoMpris()
} }
QVariantMap PlayerSource::initialData(const QString &_source) const KSysGuard::SensorInfo *PlayerSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QVariantMap data; auto data = new KSysGuard::SensorInfo();
if (_source == "player/album") { if (_source == "player/album") {
data["min"] = ""; data->name = "Current song album";
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = "Current song album"; data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} else if (_source == "player/salbum") { } else if (_source == "player/salbum") {
data["min"] = ""; data->name = QString("Current song album (%1 symbols)").arg(m_symbols);
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = QString("Current song album (%1 symbols)").arg(m_symbols); data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} else if (_source == "player/dalbum") { } else if (_source == "player/dalbum") {
data["min"] = ""; data->name = QString("Current song album (%1 symbols, dynamic)").arg(m_symbols);
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = QString("Current song album (%1 symbols, dynamic)").arg(m_symbols); data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} else if (_source == "player/artist") { } else if (_source == "player/artist") {
data["min"] = ""; data->name = "Current song artist";
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = "Current song artist"; data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} else if (_source == "player/sartist") { } else if (_source == "player/sartist") {
data["min"] = ""; data->name = QString("Current song artist (%1 symbols)").arg(m_symbols);
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = QString("Current song artist (%1 symbols)").arg(m_symbols); data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} else if (_source == "player/dartist") { } else if (_source == "player/dartist") {
data["min"] = ""; data->name = QString("Current song artist (%1 symbols, dynamic)").arg(m_symbols);
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = QString("Current song artist (%1 symbols, dynamic)").arg(m_symbols); data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} else if (_source == "player/duration") { } else if (_source == "player/duration") {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = "Current song duration"; data->name = "Current song duration";
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = "s"; data->unit = KSysGuard::UnitSecond;
} else if (_source == "player/progress") { } else if (_source == "player/progress") {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = "Current song progress"; data->name = "Current song progress";
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = "s"; data->unit = KSysGuard::UnitSecond;
} else if (_source == "player/title") { } else if (_source == "player/title") {
data["min"] = ""; data->name = "Current song title";
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = "Current song title"; data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} else if (_source == "player/stitle") { } else if (_source == "player/stitle") {
data["min"] = ""; data->name = QString("Current song title (%1 symbols)").arg(m_symbols);
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = QString("Current song title (%1 symbols)").arg(m_symbols); data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} else if (_source == "player/dtitle") { } else if (_source == "player/dtitle") {
data["min"] = ""; data->name = QString("Current song title (%1 symbols, dynamic)").arg(m_symbols);
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = QString("Current song title (%1 symbols, dynamic)").arg(m_symbols); data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} }
return data; return data;

View File

@ -38,7 +38,7 @@ public:
~PlayerSource() override; ~PlayerSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
static QString getAutoMpris(); static QString getAutoMpris();
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;
// additional method to build dynamic tags // additional method to build dynamic tags

View File

@ -18,6 +18,9 @@
#include "processessource.h" #include "processessource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDir> #include <QDir>
#include "awdebug.h" #include "awdebug.h"
@ -48,29 +51,27 @@ QVariant ProcessesSource::data(const QString &_source)
} }
QVariantMap ProcessesSource::initialData(const QString &_source) const KSysGuard::SensorInfo *ProcessesSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QVariantMap data; auto data = new KSysGuard::SensorInfo();
if (_source == "ps/running/count") { if (_source == "ps/running/count") {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = "Count of running processes"; data->name = "Count of running processes";
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = ""; data->unit = KSysGuard::UnitNone;
} else if (_source == "ps/running/list") { } else if (_source == "ps/running/list") {
data["min"] = QStringList(); data->name = "All running processes list";
data["max"] = QStringList(); data->variantType = QVariant::StringList;
data["name"] = "All running processes list"; data->unit = KSysGuard::UnitNone;
data["type"] = "QStringList";
data["units"] = "";
} else if (_source == "ps/total/count") { } else if (_source == "ps/total/count") {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = "Total count of processes"; data->name = "Total count of processes";
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = ""; data->unit = KSysGuard::UnitNone;
} }
return data; return data;

View File

@ -31,7 +31,7 @@ public:
explicit ProcessesSource(QObject *_parent, const QStringList &_args); explicit ProcessesSource(QObject *_parent, const QStringList &_args);
~ProcessesSource() override; ~ProcessesSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,6 +18,9 @@
#include "quotessource.h" #include "quotessource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h" #include "awdebug.h"
#include "extquotes.h" #include "extquotes.h"
@ -57,48 +60,48 @@ QVariant QuotesSource::data(const QString &_source)
} }
QVariantMap QuotesSource::initialData(const QString &_source) const KSysGuard::SensorInfo *QuotesSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
int ind = index(_source); int ind = index(_source);
QVariantMap data; auto data = new KSysGuard::SensorInfo;
if (_source.startsWith("quotes/pricechg")) { if (_source.startsWith("quotes/pricechg")) {
data["min"] = 0.0; data->min = 0.0;
data["max"] = 0.0; data->max = 0.0;
data["name"] = QString("Absolute prie changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->name = QString("Absolute price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data["type"] = "double"; data->variantType = QVariant::Double;
data["units"] = ""; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("quotes/price")) { } else if (_source.startsWith("quotes/price")) {
data["min"] = 0.0; data->min = 0.0;
data["max"] = 0.0; data->max = 0.0;
data["name"] = QString("Price for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->name = QString("Price for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data["type"] = "double"; data->variantType = QVariant::Double;
data["units"] = ""; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("quotes/percpricechg")) { } else if (_source.startsWith("quotes/percpricechg")) {
data["min"] = -100.0; data->min = -100.0;
data["max"] = 100.0; data->max = 100.0;
data["name"] = QString("Price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->name = QString("Price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data["type"] = "double"; data->variantType = QVariant::Double;
data["units"] = ""; data->unit = KSysGuard::UnitPercent;
} else if (_source.startsWith("quotes/volumechg")) { } else if (_source.startsWith("quotes/volumechg")) {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = QString("Absolute volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->name = QString("Absolute volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data["type"] = "int"; data->variantType = QVariant::Int;
data["units"] = ""; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("quotes/volume")) { } else if (_source.startsWith("quotes/volume")) {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = QString("Volume for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->name = QString("Volume for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data["type"] = "int"; data->variantType = QVariant::Int;
data["units"] = ""; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("quotes/percvolumechg")) { } else if (_source.startsWith("quotes/percvolumechg")) {
data["min"] = -100.0; data->min = -100.0;
data["max"] = 100.0; data->max = 100.0;
data["name"] = QString("Volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->name = QString("Volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data["type"] = "double"; data->variantType = QVariant::Double;
data["units"] = ""; data->unit = KSysGuard::UnitPercent;
} }
return data; return data;

View File

@ -34,7 +34,7 @@ public:
explicit QuotesSource(QObject *_parent, const QStringList &_args); explicit QuotesSource(QObject *_parent, const QStringList &_args);
~QuotesSource() override; ~QuotesSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,6 +18,9 @@
#include "requestsource.h" #include "requestsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h" #include "awdebug.h"
#include "extnetworkrequest.h" #include "extnetworkrequest.h"
@ -57,18 +60,16 @@ QVariant RequestSource::data(const QString &_source)
} }
QVariantMap RequestSource::initialData(const QString &_source) const KSysGuard::SensorInfo *RequestSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
int ind = index(_source); int ind = index(_source);
QVariantMap data; auto data = new KSysGuard::SensorInfo();
if (_source.startsWith("network/response")) { if (_source.startsWith("network/response")) {
data["min"] = ""; data->name = QString("Network response for %1").arg(m_extNetRequest->itemByTagNumber(ind)->uniq());
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = QString("Network response for %1").arg(m_extNetRequest->itemByTagNumber(ind)->uniq()); data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} }
return data; return data;

View File

@ -34,7 +34,7 @@ public:
explicit RequestSource(QObject *_parent, const QStringList &_args); explicit RequestSource(QObject *_parent, const QStringList &_args);
~RequestSource() override; ~RequestSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,6 +18,9 @@
#include "systeminfosource.h" #include "systeminfosource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDBusConnection> #include <QDBusConnection>
#include <QDBusMessage> #include <QDBusMessage>
#include <QDBusVariant> #include <QDBusVariant>
@ -51,23 +54,23 @@ QVariant SystemInfoSource::data(const QString &_source)
} }
QVariantMap SystemInfoSource::initialData(const QString &_source) const KSysGuard::SensorInfo *SystemInfoSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QVariantMap data; auto data = new KSysGuard::SensorInfo();
if (_source == "system/brightness") { if (_source == "system/brightness") {
data["min"] = 0.0; data->min = 0.0;
data["max"] = 100.0; data->max = 100.0;
data["name"] = "Screen brightness"; data->name = "Screen brightness";
data["type"] = "float"; data->variantType = QVariant::Double;
data["units"] = "%"; data->unit = KSysGuard::UnitPercent;
} else if (_source == "system/volume") { } else if (_source == "system/volume") {
data["min"] = 0.0; data->min = 0.0;
data["max"] = 100.0; data->max = 100.0;
data["name"] = "Master volume"; data->name = "Master volume";
data["type"] = "float"; data->variantType = QVariant::Double;
data["units"] = "%"; data->unit = KSysGuard::UnitPercent;
} }
return data; return data;

View File

@ -31,7 +31,7 @@ public:
explicit SystemInfoSource(QObject *_parent, const QStringList &_args); explicit SystemInfoSource(QObject *_parent, const QStringList &_args);
~SystemInfoSource() override; ~SystemInfoSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,6 +18,9 @@
#include "upgradesource.h" #include "upgradesource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h" #include "awdebug.h"
#include "extupgrade.h" #include "extupgrade.h"
@ -49,16 +52,14 @@ QVariant UpgradeSource::data(const QString &_source)
} }
QVariantMap UpgradeSource::initialData(const QString &_source) const KSysGuard::SensorInfo *UpgradeSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QVariantMap data; auto data = new KSysGuard::SensorInfo();
data["min"] = ""; data->name = QString("Package manager '%1' metadata").arg(m_extUpgrade->itemByTagNumber(index(_source))->uniq());
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = QString("Package manager '%1' metadata").arg(m_extUpgrade->itemByTagNumber(index(_source))->uniq()); data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
return data; return data;
} }

View File

@ -34,7 +34,7 @@ public:
explicit UpgradeSource(QObject *_parent, const QStringList &_args); explicit UpgradeSource(QObject *_parent, const QStringList &_args);
~UpgradeSource() override; ~UpgradeSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,6 +18,9 @@
#include "weathersource.h" #include "weathersource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h" #include "awdebug.h"
#include "extweather.h" #include "extweather.h"
@ -57,48 +60,44 @@ QVariant WeatherSource::data(const QString &_source)
} }
QVariantMap WeatherSource::initialData(const QString &_source) const KSysGuard::SensorInfo *WeatherSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
int ind = index(_source); int ind = index(_source);
QVariantMap data; auto data = new KSysGuard::SensorInfo();
if (_source.startsWith("weather/weatherId")) { if (_source.startsWith("weather/weatherId")) {
data["min"] = 0; data->min = 0;
data["max"] = 1000; data->max = 1000;
data["name"] = QString("Numeric weather ID for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->name = QString("Numeric weather ID for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = ""; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("weather/weather")) { } else if (_source.startsWith("weather/weather")) {
data["min"] = ""; data->name = QString("ID string map for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = QString("ID string map for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} else if (_source.startsWith("weather/humidity")) { } else if (_source.startsWith("weather/humidity")) {
data["min"] = 0; data->min = 0;
data["max"] = 100; data->max = 100;
data["name"] = QString("Humidity for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->name = QString("Humidity for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = "%"; data->unit = KSysGuard::UnitPercent;
} else if (_source.startsWith("weather/pressure")) { } else if (_source.startsWith("weather/pressure")) {
data["min"] = 0; data->min = 0;
data["max"] = 0; data->max = 0;
data["name"] = QString("Atmospheric pressure for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->name = QString("Atmospheric pressure for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
data["type"] = "integer"; data->variantType = QVariant::Int;
data["units"] = "mb"; data->unit = KSysGuard::UnitNone;
} else if (_source.startsWith("weather/temperature")) { } else if (_source.startsWith("weather/temperature")) {
data["min"] = 0.0; data->min = 0.0;
data["max"] = 0.0; data->max = 0.0;
data["name"] = QString("Temperature for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->name = QString("Temperature for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
data["type"] = "float"; data->variantType = QVariant::Double;
data["units"] = "°C"; data->unit = KSysGuard::UnitCelsius;
} else if (_source.startsWith("weather/timestamp")) { } else if (_source.startsWith("weather/timestamp")) {
data["min"] = ""; data->name = QString("Timestamp for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
data["max"] = ""; data->variantType = QVariant::String;
data["name"] = QString("Timestamp for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->unit = KSysGuard::UnitNone;
data["type"] = "QString";
data["units"] = "";
} }
return data; return data;

View File

@ -34,7 +34,7 @@ public:
explicit WeatherSource(QObject *_parent, const QStringList &_args); explicit WeatherSource(QObject *_parent, const QStringList &_args);
~WeatherSource() override; ~WeatherSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] QVariantMap initialData(const QString &_source) const override; [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -27,4 +27,4 @@ include(KDEInstallDirs)
include(KDECMakeSettings) include(KDECMakeSettings)
include(KDECompilerSettings) include(KDECompilerSettings)
set(Kf6_INCLUDE ${KDE_INSTALL_FULL_INCLUDEDIR_KF}) set(Kf6_INCLUDE ${KDE_INSTALL_FULL_INCLUDEDIR_KF})
set(Kf6_LIBRARIES KF6::I18n KF6::Notifications KF6::WindowSystem KSysGuard::Sensors KSysGuard::SensorFaces KSysGuard::SystemStats PW::LibTaskManager) set(Kf6_LIBRARIES KF6::CoreAddons KF6::I18n KF6::Notifications KF6::WindowSystem KSysGuard::Sensors KSysGuard::SensorFaces KSysGuard::SystemStats PW::LibTaskManager)