Compare commits

...

4 Commits

Author SHA1 Message Date
85b97f65b2 Merge 4fcea42e8e into eecb128865 2024-03-26 13:41:42 +00:00
4fcea42e8e qml improvements 2024-03-26 15:41:34 +02:00
0b2b58bd33 gpu support 2024-03-26 10:39:09 +02:00
7b60e8a42f disablle deskttop soourec 2024-03-25 15:31:42 +02:00
39 changed files with 179 additions and 1342 deletions

View File

@ -9,10 +9,7 @@ arch=('x86_64')
url="https://arcanis.me/projects/awesome-widgets" url="https://arcanis.me/projects/awesome-widgets"
license=('GPL3') license=('GPL3')
depends=('plasma-workspace') depends=('plasma-workspace')
optdepends=("hddtemp: for HDD temperature monitor" optdepends=("mpd: for music player monitor")
"smartmontools: for HDD temperature monitor"
"mpd: for music player monitor"
"nvidia-utils: for GPU monitor")
makedepends=('cmake' 'extra-cmake-modules' 'python') makedepends=('cmake' 'extra-cmake-modules' 'python')
source=(https://github.com/arcan1s/awesome-widgets/releases/download/${pkgver}/${_pkgname}-${pkgver}-src.tar.xz) source=(https://github.com/arcan1s/awesome-widgets/releases/download/${pkgver}/${_pkgname}-${pkgver}-src.tar.xz)
install="$pkgname.install" install="$pkgname.install"

View File

@ -16,27 +16,15 @@
***************************************************************************/ ***************************************************************************/
import QtQuick 2.15 import QtQuick 2.15
import org.kde.kcmutils as KCM
import org.kde.plasma.private.awesomewidget 1.0 import org.kde.plasma.private.awesomewidget 1.0
Item { KCM.SimpleKCM {
id: aboutPage id: aboutPage
// backend
AWActions {
id: awActions
}
width: childrenRect.width
height: childrenRect.height
property bool debug: awActions.isDebugEnabled()
AboutTab { AboutTab {
textProvider: awActions textProvider: awActions
} }
Component.onCompleted: {
if (debug) console.debug()
}
} }

View File

@ -17,24 +17,19 @@
import QtQuick 2.15 import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls
import org.kde.kcmutils as KCM
import org.kde.plasma.private.awesomewidget 1.0 import org.kde.plasma.private.awesomewidget 1.0
Item { KCM.SimpleKCM {
id: advancedPage id: advancedPage
// backend // backend
AWActions { AWActions {
id: awActions id: awActions
} }
width: childrenRect.width
height: childrenRect.height
implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight
property bool debug: awActions.isDebugEnabled()
property alias cfg_background: background.checked property alias cfg_background: background.checked
property alias cfg_translateStrings: translate.checked property alias cfg_translateStrings: translate.checked
property alias cfg_wrapNewLines: wrapNewLines.checked property alias cfg_wrapNewLines: wrapNewLines.checked
@ -55,7 +50,6 @@ Item {
property alias cfg_telemetryRemote: telemetryRemote.checked property alias cfg_telemetryRemote: telemetryRemote.checked
property alias cfg_telemetryId: telemetryId.value property alias cfg_telemetryId: telemetryId.value
Column { Column {
id: pageColumn id: pageColumn
anchors.fill: parent anchors.fill: parent
@ -194,14 +188,18 @@ Item {
GroupBox { GroupBox {
width: parent.width width: parent.width
height: implicitHeight
title: i18n("Actions") title: i18n("Actions")
Column { Column {
height: implicitHeight
width: parent.width width: parent.width
ButtonSelector { ButtonSelector {
value: i18n("Drop key cache") value: i18n("Drop key cache")
onButtonActivated: awActions.dropCache() onButtonActivated: awActions.dropCache()
} }
ButtonSelector { ButtonSelector {
ExportDialog { ExportDialog {
id: saveConfigAs id: saveConfigAs
@ -210,11 +208,12 @@ Item {
value: i18n("Export configuration") value: i18n("Export configuration")
onButtonActivated: saveConfigAs.open() onButtonActivated: saveConfigAs.open()
} }
ButtonSelector { ButtonSelector {
ImportDialog { ImportDialog {
id: loadConfigFrom id: loadConfigFrom
onConfigurationReceived: { onConfigurationReceived: {
for (var key in configuration) for (const key in configuration)
plasmoid.configuration[key] = configuration[key] plasmoid.configuration[key] = configuration[key]
} }
} }
@ -225,15 +224,19 @@ Item {
} }
GroupBox { GroupBox {
height: implicitHeight
width: parent.width width: parent.width
title: i18n("Telemetry") title: i18n("Telemetry")
Column { Column {
height: implicitHeight
width: parent.width width: parent.width
CheckBoxSelector { CheckBoxSelector {
id: telemetryRemote id: telemetryRemote
text: i18n("Enable remote telemetry") text: i18n("Enable remote telemetry")
} }
IntegerSelector { IntegerSelector {
id: telemetryCount id: telemetryCount
maximumValue: 10000 maximumValue: 10000
@ -242,6 +245,7 @@ Item {
text: i18n("History count") text: i18n("History count")
value: plasmoid.configuration.telemetryCount value: plasmoid.configuration.telemetryCount
} }
LineSelector { LineSelector {
id: telemetryId id: telemetryId
text: i18n("Telemetry ID") text: i18n("Telemetry ID")
@ -250,9 +254,4 @@ Item {
} }
} }
} }
Component.onCompleted: {
if (debug) console.debug()
}
} }

View File

@ -16,30 +16,21 @@
***************************************************************************/ ***************************************************************************/
import QtQuick 2.15 import QtQuick 2.15
import org.kde.kcmutils as KCM
import org.kde.plasma.private.awesomewidget 1.0 import org.kde.plasma.private.awesomewidget 1.0
import "." import "."
Item { KCM.SimpleKCM {
id: appearancePage id: appearancePage
// backend
AWActions {
id: awActions
}
width: childrenRect.width
height: childrenRect.height
implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight
property bool debug: awActions.isDebugEnabled()
property variant weight: { property variant weight: {
25: 0, 25: 0,
50: 1, 50: 1,
63: 3, 63: 3,
75: 4, 75: 4,
87: 5 87: 5,
} }
property alias cfg_fontFamily: font.value property alias cfg_fontFamily: font.value
@ -106,9 +97,4 @@ Item {
value: plasmoid.configuration.textStyleColor value: plasmoid.configuration.textStyleColor
} }
} }
Component.onCompleted: {
if (debug) console.debug()
}
} }

View File

@ -17,36 +17,28 @@
import QtQuick 2.15 import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls
import org.kde.kcmutils as KCM
import org.kde.plasma.private.awesomewidget 1.0 import org.kde.plasma.private.awesomewidget 1.0
Item { KCM.SimpleKCM {
id: dataenginePage id: dataenginePage
// backend // backend
AWKeys { AWKeys {
id: awKeys id: awKeys
} }
AWActions {
id: awActions
}
AWConfigHelper { AWConfigHelper {
id: awConfig id: awConfig
} }
width: childrenRect.width
height: childrenRect.height
implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight
property bool debug: awActions.isDebugEnabled()
property variant cfg_dataengine: awConfig.readDataEngineConfiguration() property variant cfg_dataengine: awConfig.readDataEngineConfiguration()
Column { Column {
id: pageColumn id: pageColumn
anchors.fill: parent anchors.fill: parent
const
GroupBox { GroupBox {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
@ -58,61 +50,11 @@ Item {
} }
} }
GroupBox {
height: implicitHeight
width: parent.width
title: i18n("GPU")
ComboBoxSelector {
model: [
{
'label': "auto",
'name': "auto"
},
{
'label': "disable",
'name': "disable"
},
{
'label': "ati",
'name': "ati"
},
{
'label': "nvidia",
'name': "nvidia"
}
]
text: i18n("GPU device")
value: cfg_dataengine["GPUDEV"]
onValueEdited: newValue => cfg_dataengine["GPUDEV"] = newValue
}
}
GroupBox {
height: implicitHeight
width: parent.width
title: i18n("HDD temperature")
Column {
height: implicitHeight
width: parent.width
ComboBoxSelector {
id: hdd
text: i18n("HDD")
value: cfg_dataengine["HDDDEV"]
onValueEdited: newValue => cfg_dataengine["HDDDEV"] = newValue
}
LineSelector {
text: i18n("hddtemp cmd")
value: cfg_dataengine["HDDTEMPCMD"]
onValueEdited: newValue => cfg_dataengine["HDDTEMPCMD"] = newValue
}
}
}
GroupBox { GroupBox {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
title: i18n("Player") title: i18n("Player")
Column { Column {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
@ -211,9 +153,11 @@ Item {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
title: i18n("Extensions") title: i18n("Extensions")
Column { Column {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
ButtonSelector { ButtonSelector {
value: i18n("Custom scripts") value: i18n("Custom scripts")
onButtonActivated: awKeys.editItem("extscript") onButtonActivated: awKeys.editItem("extscript")
@ -244,8 +188,6 @@ Item {
Component.onCompleted: { Component.onCompleted: {
if (debug) console.debug()
// init submodule // init submodule
awKeys.updateCache() awKeys.updateCache()
@ -255,8 +197,6 @@ Item {
} }
Component.onDestruction: { Component.onDestruction: {
if (debug) console.debug()
cfg_dataengine["MPRIS"] = mpris.editText cfg_dataengine["MPRIS"] = mpris.editText
awConfig.writeDataEngineConfiguration(cfg_dataengine) awConfig.writeDataEngineConfiguration(cfg_dataengine)
} }

View File

@ -28,6 +28,7 @@ import "."
PlasmoidItem { PlasmoidItem {
id: main id: main
// backend // backend
AWKeys { AWKeys {
id: awKeys id: awKeys
@ -42,7 +43,6 @@ PlasmoidItem {
id: bugReport id: bugReport
} }
property bool debug: awActions.isDebugEnabled()
property variant tooltipSettings: { property variant tooltipSettings: {
"tooltipNumber": plasmoid.configuration.tooltipNumber, "tooltipNumber": plasmoid.configuration.tooltipNumber,
"useTooltipBackground": plasmoid.configuration.useTooltipBackground, "useTooltipBackground": plasmoid.configuration.useTooltipBackground,
@ -72,15 +72,13 @@ PlasmoidItem {
signal needToolTipUpdate(string newText) signal needToolTipUpdate(string newText)
signal sizeUpdate signal sizeUpdate
Layout.fillWidth: PlasmoidItem.formFactor !== PlasmaCore.Planar
Layout.fillWidth: PlasmoidItem.formFactor != PlasmaCore.Planar Layout.fillHeight: PlasmoidItem.formFactor !== PlasmaCore.Planar
Layout.fillHeight: PlasmoidItem.formFactor != PlasmaCore.Planar
Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
Plasmoid.icon: "utilities-system-monitor" Plasmoid.icon: "utilities-system-monitor"
Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground" Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground"
// ui // ui
Text { Text {
id: text id: text
@ -94,7 +92,7 @@ PlasmoidItem {
color: plasmoid.configuration.fontColor color: plasmoid.configuration.fontColor
font.family: plasmoid.configuration.fontFamily font.family: plasmoid.configuration.fontFamily
font.italic: plasmoid.configuration.fontStyle == "italic" ? true : false font.italic: plasmoid.configuration.fontStyle === "italic" ? true : false
font.pointSize: plasmoid.configuration.fontSize font.pointSize: plasmoid.configuration.fontSize
font.weight: General.fontWeight[plasmoid.configuration.fontWeight] font.weight: General.fontWeight[plasmoid.configuration.fontWeight]
@ -124,8 +122,8 @@ PlasmoidItem {
} }
onAccepted: { onAccepted: {
var tag = tagSelectorBox.editText const tag = tagSelectorBox.editText
var message = i18n("Tag: %1", tag) let message = i18n("Tag: %1", tag)
message += "<br>" message += "<br>"
message += i18n("Value: %1", awKeys.valueByKey(tag)) message += i18n("Value: %1", awKeys.valueByKey(tag))
message += "<br>" message += "<br>"
@ -138,25 +136,33 @@ PlasmoidItem {
PlasmaCore.Action { PlasmaCore.Action {
text: i18n("Request key") text: i18n("Request key")
icon.name: "utilities-system-monitor" icon.name: "utilities-system-monitor"
onTriggered: {
tagSelectorBox.model = awKeys.dictKeys(true)
tagSelector.open()
}
}, },
PlasmaCore.Action { PlasmaCore.Action {
text: i18n("Show README") text: i18n("Show README")
icon.name: "text-x-readme" icon.name: "text-x-readme"
onTriggered: awActions.showReadme()
}, },
PlasmaCore.Action { PlasmaCore.Action {
text: i18n("Check updates") text: i18n("Check updates")
icon.name: "system-software-update" icon.name: "system-software-update"
onTriggered: awActions.checkUpdates(true)
}, },
PlasmaCore.Action { PlasmaCore.Action {
text: i18n("Report bug") text: i18n("Report bug")
icon.name: "tools-report-bug" icon.name: "tools-report-bug"
onTriggered: {
bugReport.reset()
bugReport.open()
}
} }
] ]
Component.onCompleted: { Component.onCompleted: {
if (debug) console.debug()
// init submodule // init submodule
Plasmoid.userConfiguringChanged(false) Plasmoid.userConfiguringChanged(false)
// connect data // connect data
@ -167,31 +173,25 @@ PlasmoidItem {
} }
onNeedTextUpdate: newText => { onNeedTextUpdate: newText => {
if (debug) console.debug()
text.text = newText text.text = newText
sizeUpdate() sizeUpdate()
} }
onNeedToolTipUpdate: newText => { onNeedToolTipUpdate: newText => {
if (debug) console.debug()
tooltip.text = newText tooltip.text = newText
} }
onSizeUpdate: { onSizeUpdate: {
if (debug) console.debug()
// 16 is a magic number // 16 is a magic number
// in other case plasmoid will increase own size on each update // in other case plasmoid will increase own size on each update
if (plasmoid.configuration.height === 0) {
if (plasmoid.configuration.height == 0) {
Layout.minimumHeight = text.contentHeight - 16 Layout.minimumHeight = text.contentHeight - 16
Layout.maximumHeight = -1 Layout.maximumHeight = -1
} else { } else {
Layout.minimumHeight = plasmoid.configuration.height Layout.minimumHeight = plasmoid.configuration.height
Layout.maximumHeight = plasmoid.configuration.height Layout.maximumHeight = plasmoid.configuration.height
} }
if (plasmoid.configuration.width == 0) { if (plasmoid.configuration.width === 0) {
Layout.minimumWidth = text.contentWidth - 16 Layout.minimumWidth = text.contentWidth - 16
Layout.maximumWidth = -1 Layout.maximumWidth = -1
} else { } else {
@ -202,7 +202,6 @@ PlasmoidItem {
Plasmoid.onUserConfiguringChanged: { Plasmoid.onUserConfiguringChanged: {
if (plasmoid.userConfiguring) return if (plasmoid.userConfiguring) return
if (debug) console.debug()
// init submodule // init submodule
awKeys.initDataAggregator(tooltipSettings) awKeys.initDataAggregator(tooltipSettings)
@ -217,7 +216,7 @@ PlasmoidItem {
awKeys.setAggregatorProperty("tempUnits", plasmoid.configuration.tempUnits) awKeys.setAggregatorProperty("tempUnits", plasmoid.configuration.tempUnits)
awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings) awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings)
// update telemetry ID // update telemetry ID
if (plasmoid.configuration.telemetryId.length == 0) if (plasmoid.configuration.telemetryId.length === 0)
plasmoid.configuration.telemetryId = generateUuid() plasmoid.configuration.telemetryId = generateUuid()
// save telemetry // save telemetry
awTelemetryHandler.init(plasmoid.configuration.telemetryCount, awTelemetryHandler.init(plasmoid.configuration.telemetryCount,
@ -227,37 +226,10 @@ PlasmoidItem {
awTelemetryHandler.uploadTelemetry("awwidgetconfig", plasmoid.configuration.text) awTelemetryHandler.uploadTelemetry("awwidgetconfig", plasmoid.configuration.text)
} }
function action_checkUpdates() {
if (debug) console.debug()
return awActions.checkUpdates(true)
}
function action_showReadme() {
if (debug) console.debug()
return awActions.showReadme()
}
function action_reportBug() {
if (debug) console.debug()
bugReport.reset()
bugReport.open()
}
function action_requestKey() {
if (debug) console.debug()
tagSelectorBox.model = awKeys.dictKeys(true)
return tagSelector.open()
}
// code from http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript // code from http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
function generateUuid() { function generateUuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); let r = Math.random() * 16 | 0, v = c === "x" ? r : (r & 0x3 | 0x8);
return v.toString(16); return v.toString(16);
}); });
} }

View File

@ -17,23 +17,13 @@
import QtQuick 2.15 import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls
import org.kde.kcmutils as KCM
import org.kde.plasma.private.awesomewidget 1.0 import org.kde.plasma.private.awesomewidget 1.0
Item { KCM.SimpleKCM {
id: tooltipPage id: tooltipPage
// backend
AWActions {
id: awActions
}
width: childrenRect.width
height: childrenRect.height
implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight
property bool debug: awActions.isDebugEnabled()
property alias cfg_tooltipNumber: tooltipNumber.value property alias cfg_tooltipNumber: tooltipNumber.value
property alias cfg_useTooltipBackground: useTooltipBackground.checked property alias cfg_useTooltipBackground: useTooltipBackground.checked
@ -53,7 +43,6 @@ Item {
property alias cfg_batTooltipColor: batTooltipColor.value property alias cfg_batTooltipColor: batTooltipColor.value
property alias cfg_batInTooltipColor: batInTooltipColor.value property alias cfg_batInTooltipColor: batInTooltipColor.value
Column { Column {
id: pageColumn id: pageColumn
anchors.fill: parent anchors.fill: parent
@ -178,11 +167,13 @@ Item {
Column { Column {
width: parent.width width: parent.width
enabled: networkTooltipLabel.checked enabled: networkTooltipLabel.checked
ColorSelector { ColorSelector {
id: downkbTooltipColor id: downkbTooltipColor
text: i18n("Download speed color") text: i18n("Download speed color")
value: plasmoid.configuration.downkbTooltipColor value: plasmoid.configuration.downkbTooltipColor
} }
ColorSelector { ColorSelector {
id: upkbTooltipColor id: upkbTooltipColor
text: i18n("Upload speed color") text: i18n("Upload speed color")
@ -204,11 +195,13 @@ Item {
Column { Column {
width: parent.width width: parent.width
enabled: batteryTooltipLabel.checked enabled: batteryTooltipLabel.checked
ColorSelector { ColorSelector {
id: batTooltipColor id: batTooltipColor
text: i18n("Battery active color") text: i18n("Battery active color")
value: plasmoid.configuration.batTooltipColor value: plasmoid.configuration.batTooltipColor
} }
ColorSelector { ColorSelector {
id: batInTooltipColor id: batInTooltipColor
text: i18n("Battery inactive color") text: i18n("Battery inactive color")
@ -217,9 +210,4 @@ Item {
} }
} }
} }
Component.onCompleted: {
if (debug) console.debug()
}
} }

View File

@ -16,13 +16,16 @@
***************************************************************************/ ***************************************************************************/
import QtQuick 2.15 import QtQuick 2.15
import QtQuick.Controls
import org.kde.kcmutils as KCM
import org.kde.plasma.private.awesomewidget 1.0 import org.kde.plasma.private.awesomewidget 1.0
import "." import "."
Item { KCM.SimpleKCM {
id: widgetPage id: widgetPage
// backend // backend
AWKeys { AWKeys {
id: awKeys id: awKeys
@ -31,19 +34,11 @@ Item {
id: awActions id: awActions
} }
width: childrenRect.width
height: childrenRect.height
implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight
property bool debug: awActions.isDebugEnabled()
property alias cfg_text: textPattern.text property alias cfg_text: textPattern.text
property bool lock: true property bool lock: true
signal needTextUpdate(string newText) signal needTextUpdate(string newText)
Column { Column {
id: pageColumn id: pageColumn
anchors.fill: parent anchors.fill: parent
@ -74,10 +69,7 @@ Item {
} }
} }
Component.onCompleted: { Component.onCompleted: {
if (debug) console.debug()
awKeys.needTextToBeUpdated.connect(needTextUpdate) awKeys.needTextToBeUpdated.connect(needTextUpdate)
// init submodule // init submodule
awKeys.initKeys(plasmoid.configuration.text, plasmoid.configuration.interval, awKeys.initKeys(plasmoid.configuration.text, plasmoid.configuration.interval,
@ -92,7 +84,6 @@ Item {
onNeedTextUpdate: newText => { onNeedTextUpdate: newText => {
if (lock) return if (lock) return
if (debug) console.debug()
extensions.showMessage(newText) extensions.showMessage(newText)
lock = true lock = true

View File

@ -19,7 +19,7 @@
"Id": "org.kde.plasma.awesomewidget", "Id": "org.kde.plasma.awesomewidget",
"License": "GPLv3", "License": "GPLv3",
"Name": "Awesome Widget", "Name": "Awesome Widget",
"Version": "3.5.1", "Version": "4.0.0",
"Website": "https://arcanis.me/projects/awesome-widgets/" "Website": "https://arcanis.me/projects/awesome-widgets/"
}, },
"X-Plasma-API-Minimum-Version": "6.0" "X-Plasma-API-Minimum-Version": "6.0"

View File

@ -170,9 +170,6 @@ QVariantMap AWConfigHelper::readDataEngineConfiguration()
settings.beginGroup("Configuration"); settings.beginGroup("Configuration");
configuration["ACPIPATH"] = settings.value("ACPIPATH", "/sys/class/power_supply/"); configuration["ACPIPATH"] = settings.value("ACPIPATH", "/sys/class/power_supply/");
configuration["GPUDEV"] = settings.value("GPUDEV", "auto");
configuration["HDDDEV"] = settings.value("HDDDEV", "all");
configuration["HDDTEMPCMD"] = settings.value("HDDTEMPCMD", "sudo smartctl -a");
configuration["MPDADDRESS"] = settings.value("MPDADDRESS", "localhost"); configuration["MPDADDRESS"] = settings.value("MPDADDRESS", "localhost");
configuration["MPDPORT"] = settings.value("MPDPORT", "6600"); configuration["MPDPORT"] = settings.value("MPDPORT", "6600");
configuration["MPRIS"] = settings.value("MPRIS", "auto"); configuration["MPRIS"] = settings.value("MPRIS", "auto");
@ -197,9 +194,6 @@ bool AWConfigHelper::writeDataEngineConfiguration(const QVariantMap &_configurat
settings.beginGroup("Configuration"); settings.beginGroup("Configuration");
settings.setValue("ACPIPATH", _configuration["ACPIPATH"]); settings.setValue("ACPIPATH", _configuration["ACPIPATH"]);
settings.setValue("GPUDEV", _configuration["GPUDEV"]);
settings.setValue("HDDDEV", _configuration["HDDDEV"]);
settings.setValue("HDDTEMPCMD", _configuration["HDDTEMPCMD"]);
settings.setValue("MPDADDRESS", _configuration["MPDADDRESS"]); settings.setValue("MPDADDRESS", _configuration["MPDADDRESS"]);
settings.setValue("MPDPORT", _configuration["MPDPORT"]); settings.setValue("MPDPORT", _configuration["MPDPORT"]);
settings.setValue("MPRIS", _configuration["MPRIS"]); settings.setValue("MPRIS", _configuration["MPRIS"]);

View File

@ -89,6 +89,9 @@ void AWDataEngineAggregator::loadSources()
auto sensors = response.value(); auto sensors = response.value();
updateSensors(sensors); updateSensors(sensors);
connectSources(); connectSources();
for (auto &sensor : m_sensors.keys())
emit(deviceAdded(sensor));
} }
@ -121,6 +124,9 @@ void AWDataEngineAggregator::sensorAdded(const QString &_sensor)
m_interface->subscribe({_sensor}).waitForFinished(); m_interface->subscribe({_sensor}).waitForFinished();
m_subscribed.insert(_sensor); m_subscribed.insert(_sensor);
} }
// notify about new device
emit(deviceAdded(_sensor));
} }

View File

@ -85,6 +85,8 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
auto cpuRegExp = QRegularExpression("^cpu/cpu.*/usage$"); auto cpuRegExp = QRegularExpression("^cpu/cpu.*/usage$");
auto cpuclRegExp = QRegularExpression("^cpu/cpu.*/frequency$"); auto cpuclRegExp = QRegularExpression("^cpu/cpu.*/frequency$");
auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$"); auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$");
auto gpuRegExp = QRegularExpression("^gpu/gpu.*/usage$");
auto gpuTempRegExp = QRegularExpression("^gpu/gpu.*/temperature$");
auto hddrRegExp = QRegularExpression("^disk/.*/read$"); auto hddrRegExp = QRegularExpression("^disk/.*/read$");
auto hddwRegExp = QRegularExpression("^disk/.*/write$"); auto hddwRegExp = QRegularExpression("^disk/.*/write$");
auto mountFillRegExp = QRegularExpression("^disk/.*/usedPercent$"); auto mountFillRegExp = QRegularExpression("^disk/.*/usedPercent$");
@ -99,7 +101,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat; m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat;
} else if (_source.startsWith("extsysmon/battery/")) { } else if (_source.startsWith("extsysmon/battery/")) {
// battery stats // battery stats
QString key = _source; auto key = _source;
key.remove("extsysmon/battery/"); key.remove("extsysmon/battery/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float
@ -110,7 +112,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_formatter["cpu"] = AWKeysAggregator::FormatterType::Float; m_formatter["cpu"] = AWKeysAggregator::FormatterType::Float;
} else if (_source.contains(cpuRegExp)) { } else if (_source.contains(cpuRegExp)) {
// cpus // cpus
QString key = _source; auto key = _source;
key.remove("cpu/").remove("/usage"); key.remove("cpu/").remove("/usage");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Float; m_formatter[key] = AWKeysAggregator::FormatterType::Float;
@ -120,14 +122,14 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_formatter["cpucl"] = AWKeysAggregator::FormatterType::Integer; m_formatter["cpucl"] = AWKeysAggregator::FormatterType::Integer;
} else if (_source.contains(cpuclRegExp)) { } else if (_source.contains(cpuclRegExp)) {
// cpucls // cpucls
QString key = _source; auto key = _source;
key.remove("cpu/cpu").remove("/frequency"); key.remove("cpu/cpu").remove("/frequency");
key = QString("cpucl%1").arg(key); key = QString("cpucl%1").arg(key);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Integer; m_formatter[key] = AWKeysAggregator::FormatterType::Integer;
} else if (_source.startsWith("extsysmon/custom")) { } else if (_source.startsWith("extsysmon/custom")) {
// custom // custom
QString key = _source; auto key = _source;
key.remove("extsysmon/custom/"); key.remove("extsysmon/custom/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
@ -145,9 +147,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.contains(hddrRegExp)) { } else if (_source.contains(hddrRegExp)) {
// read speed // read speed
QString device = _source; auto device = _source;
device.remove("disk/").remove("/read"); device.remove("disk/").remove("/read");
int index = m_devices["disk"].indexOf(device); auto index = m_devices["disk"].indexOf(device);
if (index > -1) { if (index > -1) {
QString key = QString("hddr%1").arg(index); QString key = QString("hddr%1").arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
@ -155,29 +157,45 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
} }
} else if (_source.contains(hddwRegExp)) { } else if (_source.contains(hddwRegExp)) {
// write speed // write speed
QString device = _source; auto device = _source;
device.remove("disk/").remove("/write"); device.remove("disk/").remove("/write");
int index = m_devices["disk"].indexOf(device); auto index = m_devices["disk"].indexOf(device);
if (index > -1) { if (index > -1) {
QString key = QString("hddw%1").arg(index); QString key = QString("hddw%1").arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Integer; m_formatter[key] = AWKeysAggregator::FormatterType::Integer;
} }
} else if (_source == "extsysmon/gpuload/load") { } else if (_source == "gpu/all/usage") {
// gpu load // gpu load
m_map.insert(_source, "gpu"); m_map.insert(_source, "gpu");
m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float; m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float;
} else if (_source == "extsysmon/gputemp/temperature") { } else if (_source.contains(gpuRegExp)) {
// gpu temperature // gpus
m_map.insert(_source, "gputemp"); auto device = _source;
m_formatter["gputemp"] = AWKeysAggregator::FormatterType::Temperature; device.remove("gpu/").remove("/usage");
auto index = m_devices["gpu"].indexOf(device);
if (index > -1) {
auto key = QString("gpu%1").arg(index);
m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Float;
}
} else if (_source.contains(gpuTempRegExp)) {
// gpus temps
auto device = _source;
device.remove("gpu/").remove("/temperature");
auto index = m_devices["gpu"].indexOf(device);
if (index > -1) {
auto key = QString("gputemp%1").arg(index);
m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Temperature;
}
} else if (_source.contains(mountFillRegExp)) { } else if (_source.contains(mountFillRegExp)) {
// fill level // fill level
QString device = _source; auto device = _source;
device.remove("disk/").remove("/usedPercent"); device.remove("disk/").remove("/usedPercent");
int index = m_devices["mount"].indexOf(device); auto index = m_devices["mount"].indexOf(device);
if (index > -1) { if (index > -1) {
QString key = QString("hdd%1").arg(index); auto key = QString("hdd%1").arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Float; m_formatter[key] = AWKeysAggregator::FormatterType::Float;
// additional keys // additional keys
@ -186,9 +204,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
} }
} else if (_source.contains(mountFreeRegExp)) { } else if (_source.contains(mountFreeRegExp)) {
// free space // free space
QString device = _source; auto device = _source;
device.remove("disk/").remove("/free"); device.remove("disk/").remove("/free");
int index = m_devices["mount"].indexOf(device); auto index = m_devices["mount"].indexOf(device);
if (index > -1) { if (index > -1) {
// mb // mb
QString key = QString("hddfreemb%1").arg(index); QString key = QString("hddfreemb%1").arg(index);
@ -201,9 +219,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
} }
} else if (_source.contains(mountUsedRegExp)) { } else if (_source.contains(mountUsedRegExp)) {
// used // used
QString device = _source; auto device = _source;
device.remove("disk/").remove("/used"); device.remove("disk/").remove("/used");
int index = m_devices["mount"].indexOf(device); auto index = m_devices["mount"].indexOf(device);
if (index > -1) { if (index > -1) {
// mb // mb
QString key = QString("hddmb%1").arg(index); QString key = QString("hddmb%1").arg(index);
@ -214,21 +232,11 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat; m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat;
} }
} else if (_source.startsWith("extsysmon/hdd/temperature")) {
// hdd temperature
QString device = _source;
device.remove("extsysmon/hdd/temperature");
int index = m_devices["hdd"].indexOf(device);
if (index > -1) {
QString key = QString("hddtemp%1").arg(index);
m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Temperature;
}
} else if (_source.startsWith("cpu/loadaverages/loadaverage")) { } else if (_source.startsWith("cpu/loadaverages/loadaverage")) {
// load average // load average
QString time = _source; auto time = _source;
time.remove("cpu/loadaverages/loadaverage"); time.remove("cpu/loadaverages/loadaverage");
QString key = QString("la%1").arg(time); auto key = QString("la%1").arg(time);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::FloatTwoSymbols; m_formatter[key] = AWKeysAggregator::FormatterType::FloatTwoSymbols;
} else if (_source == "memory/physical/application") { } else if (_source == "memory/physical/application") {
@ -265,17 +273,17 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.startsWith("extsysmon/requests/response")) { } else if (_source.startsWith("extsysmon/requests/response")) {
// network response // network response
QString key = _source; auto key = _source;
key.remove("extsysmon/requests/"); key.remove("extsysmon/requests/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.contains(netRegExp)) { } else if (_source.contains(netRegExp)) {
// network speed // network speed
QString type = _source.contains("download") ? "down" : "up"; auto type = _source.endsWith("download") ? "down" : "up";
int index = m_devices["net"].indexOf(_source.split('/')[2]); auto index = m_devices["net"].indexOf(_source.split('/')[1]);
if (index > -1) { if (index > -1) {
// kb // kb
QString key = QString("%1kb%2").arg(type).arg(index); auto key = QString("%1kb%2").arg(type).arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Integer; m_formatter[key] = AWKeysAggregator::FormatterType::Integer;
// smart // smart
@ -289,11 +297,11 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
} }
} else if (_source.contains(netTotalRegExp)) { } else if (_source.contains(netTotalRegExp)) {
// network data total // network data total
QString type = _source.contains("download") ? "down" : "up"; auto type = _source.endsWith("Download") ? "down" : "up";
int index = m_devices["net"].indexOf(_source.split('/')[2]); auto index = m_devices["net"].indexOf(_source.split('/')[1]);
if (index > -1) { if (index > -1) {
// kb // kb
QString key = QString("%1totkb%2").arg(type).arg(index); auto key = QString("%1totkb%2").arg(type).arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Integer; m_formatter[key] = AWKeysAggregator::FormatterType::Integer;
// mb // mb
@ -303,13 +311,13 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
} }
} else if (_source.startsWith("extsysmon/upgrade")) { } else if (_source.startsWith("extsysmon/upgrade")) {
// package manager // package manager
QString key = _source; auto key = _source;
key.remove("extsysmon/upgrade/"); key.remove("extsysmon/upgrade/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree; m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree;
} else if (_source.startsWith("extsysmon/player")) { } else if (_source.startsWith("extsysmon/player")) {
// player // player
QString key = _source; auto key = _source;
key.remove("extsysmon/player/"); key.remove("extsysmon/player/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
@ -327,7 +335,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.startsWith("extsysmon/quotes")) { } else if (_source.startsWith("extsysmon/quotes")) {
// quotes // quotes
QString key = _source; auto key = _source;
key.remove("extsysmon/quotes/"); key.remove("extsysmon/quotes/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Quotes; m_formatter[key] = AWKeysAggregator::FormatterType::Quotes;
@ -355,7 +363,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
if (_units == KSysGuard::UnitInvalid) if (_units == KSysGuard::UnitInvalid)
return QStringList({QString("temp%1").arg(index)}); return QStringList({QString("temp%1").arg(index)});
if (index > -1) { if (index > -1) {
QString key = QString("temp%1").arg(index); auto key = QString("temp%1").arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = _units == KSysGuard::UnitCelsius ? AWKeysAggregator::FormatterType::Temperature m_formatter[key] = _units == KSysGuard::UnitCelsius ? AWKeysAggregator::FormatterType::Temperature
: AWKeysAggregator::FormatterType::Integer; : AWKeysAggregator::FormatterType::Integer;
@ -394,19 +402,19 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom; m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom;
} else if (_source.startsWith("extsysmon/weather/temperature")) { } else if (_source.startsWith("extsysmon/weather/temperature")) {
// temperature // temperature
QString key = _source; auto key = _source;
key.remove("extsysmon/weather/"); key.remove("extsysmon/weather/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; m_formatter[key] = AWKeysAggregator::FormatterType::Temperature;
} else if (_source.startsWith("extsysmon/weather/")) { } else if (_source.startsWith("extsysmon/weather/")) {
// other weather // other weather
QString key = _source; auto key = _source;
key.remove("extsysmon/weather/"); key.remove("extsysmon/weather/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.startsWith("extsysmon/load/load")) { } else if (_source.startsWith("extsysmon/load/load")) {
// load source // load source
QString key = _source; auto key = _source;
key.remove("extsysmon/load/"); key.remove("extsysmon/load/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; m_formatter[key] = AWKeysAggregator::FormatterType::Temperature;

View File

@ -31,7 +31,7 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key)
{ {
qCDebug(LOG_AW) << "Key" << _key << "with type" << _type; qCDebug(LOG_AW) << "Key" << _key << "with type" << _type;
QString fileName auto fileName
= QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation));
qCInfo(LOG_AW) << "Cache file" << fileName; qCInfo(LOG_AW) << "Cache file" << fileName;
QSettings cache(fileName, QSettings::IniFormat); QSettings cache(fileName, QSettings::IniFormat);
@ -41,19 +41,8 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key)
for (auto &number : cache.allKeys()) for (auto &number : cache.allKeys())
cachedValues.append(cache.value(number).toString()); cachedValues.append(cache.value(number).toString());
if (_type == "hdd") { if (_type == "net") {
QStringList allDevices = QDir("/dev").entryList(QDir::System, QDir::Name); auto rawInterfaceList = QNetworkInterface::allInterfaces();
QStringList devices = allDevices.filter(QRegularExpression("^[hms]d[a-z]$"));
for (auto &dev : devices) {
QString device = QString("/dev/%1").arg(dev);
if (cachedValues.contains(device))
continue;
qCInfo(LOG_AW) << "Found new key" << device << "for type" << _type;
cachedValues.append(device);
cache.setValue(QString("%1").arg(cache.allKeys().count(), 3, 10, QChar('0')), device);
}
} else if (_type == "net") {
QList<QNetworkInterface> rawInterfaceList = QNetworkInterface::allInterfaces();
for (auto &interface : rawInterfaceList) { for (auto &interface : rawInterfaceList) {
QString device = interface.name(); QString device = interface.name();
if (cachedValues.contains(device)) if (cachedValues.contains(device))
@ -98,7 +87,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL
if (!used.contains(key)) if (!used.contains(key))
continue; continue;
key.remove("hddtotmb"); key.remove("hddtotmb");
int index = key.toInt(); auto index = key.toInt();
used << QString("hddfreemb%1").arg(index) << QString("hddmb%1").arg(index); used << QString("hddfreemb%1").arg(index) << QString("hddmb%1").arg(index);
} }
// hddtotgb* // hddtotgb*
@ -106,7 +95,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL
if (!used.contains(key)) if (!used.contains(key))
continue; continue;
key.remove("hddtotgb"); key.remove("hddtotgb");
int index = key.toInt(); auto index = key.toInt();
used << QString("hddfreegb%1").arg(index) << QString("hddgb%1").arg(index); used << QString("hddfreegb%1").arg(index) << QString("hddgb%1").arg(index);
} }
// mem // mem
@ -139,7 +128,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL
for (auto &key : netKeys) { for (auto &key : netKeys) {
if (!used.contains(key)) if (!used.contains(key))
continue; continue;
QStringList filt = _allKeys.filter(QRegularExpression(QString("^%1[0-9]{1,}").arg(key))); auto filt = _allKeys.filter(QRegularExpression(QString("^%1[0-9]{1,}").arg(key)));
for (auto &filtered : filt) for (auto &filtered : filt)
used << filtered; used << filtered;
} }
@ -158,7 +147,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL
QHash<QString, QStringList> AWKeyCache::loadKeysFromCache() QHash<QString, QStringList> AWKeyCache::loadKeysFromCache()
{ {
QString fileName auto fileName
= QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation));
qCInfo(LOG_AW) << "Cache file" << fileName; qCInfo(LOG_AW) << "Cache file" << fileName;
QSettings cache(fileName, QSettings::IniFormat); QSettings cache(fileName, QSettings::IniFormat);

View File

@ -72,7 +72,6 @@ QHash<QString, QStringList> AWKeyOperations::devices() const
void AWKeyOperations::updateCache() void AWKeyOperations::updateCache()
{ {
// update network and hdd list // update network and hdd list
addKeyToCache("hdd");
addKeyToCache("net"); addKeyToCache("net");
} }
@ -90,15 +89,20 @@ QStringList AWKeyOperations::dictKeys() const
allKeys.append(item->tag("timestamp")); allKeys.append(item->tag("timestamp"));
} }
// cpuclock & cpu // cpuclock & cpu
for (int i = 0; i < QThread::idealThreadCount(); i++) { for (auto i = 0; i < QThread::idealThreadCount(); i++) {
allKeys.append(QString("cpucl%1").arg(i)); allKeys.append(QString("cpucl%1").arg(i));
allKeys.append(QString("cpu%1").arg(i)); allKeys.append(QString("cpu%1").arg(i));
} }
// temperature // temperature
for (int i = 0; i < m_devices["temp"].count(); i++) for (auto i = 0; i < m_devices["temp"].count(); i++)
allKeys.append(QString("temp%1").arg(i)); allKeys.append(QString("temp%1").arg(i));
// gpu
for (auto i = 0; i < m_devices["gpu"].count(); i++) {
allKeys.append(QString("gpu%1").arg(i));
allKeys.append(QString("gputemp%1").arg(i));
}
// hdd // hdd
for (int i = 0; i < m_devices["mount"].count(); i++) { for (auto i = 0; i < m_devices["mount"].count(); i++) {
allKeys.append(QString("hddmb%1").arg(i)); allKeys.append(QString("hddmb%1").arg(i));
allKeys.append(QString("hddgb%1").arg(i)); allKeys.append(QString("hddgb%1").arg(i));
allKeys.append(QString("hddfreemb%1").arg(i)); allKeys.append(QString("hddfreemb%1").arg(i));
@ -108,15 +112,12 @@ QStringList AWKeyOperations::dictKeys() const
allKeys.append(QString("hdd%1").arg(i)); allKeys.append(QString("hdd%1").arg(i));
} }
// hdd speed // hdd speed
for (int i = 0; i < m_devices["disk"].count(); i++) { for (auto i = 0; i < m_devices["disk"].count(); i++) {
allKeys.append(QString("hddr%1").arg(i)); allKeys.append(QString("hddr%1").arg(i));
allKeys.append(QString("hddw%1").arg(i)); allKeys.append(QString("hddw%1").arg(i));
} }
// hdd temp
for (int i = 0; i < m_devices["hdd"].count(); i++)
allKeys.append(QString("hddtemp%1").arg(i));
// network // network
for (int i = 0; i < m_devices["net"].count(); i++) { for (auto i = 0; i < m_devices["net"].count(); i++) {
allKeys.append(QString("downunits%1").arg(i)); allKeys.append(QString("downunits%1").arg(i));
allKeys.append(QString("upunits%1").arg(i)); allKeys.append(QString("upunits%1").arg(i));
allKeys.append(QString("downtotkb%1").arg(i)); allKeys.append(QString("downtotkb%1").arg(i));
@ -129,7 +130,7 @@ QStringList AWKeyOperations::dictKeys() const
allKeys.append(QString("up%1").arg(i)); allKeys.append(QString("up%1").arg(i));
} }
// battery // battery
QStringList allBatteryDevices auto allBatteryDevices
= QDir("/sys/class/power_supply") = QDir("/sys/class/power_supply")
.entryList(QStringList({"BAT*"}), QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); .entryList(QStringList({"BAT*"}), QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
for (int i = 0; i < allBatteryDevices.count(); i++) { for (int i = 0; i < allBatteryDevices.count(); i++) {
@ -205,52 +206,48 @@ QString AWKeyOperations::infoByKey(const QString &_key) const
{ {
qCDebug(LOG_AW) << "Requested key" << _key; qCDebug(LOG_AW) << "Requested key" << _key;
QString stripped = _key; auto stripped = _key;
stripped.remove(QRegularExpression("\\d+")); stripped.remove(QRegularExpression("\\d+"));
QString output; QString output;
if (_key.startsWith("bar")) { if (_key.startsWith("bar")) {
AbstractExtItem *item = m_graphicalItems->itemByTag(_key, stripped); auto *item = m_graphicalItems->itemByTag(_key, stripped);
if (item) if (item)
output = item->uniq(); output = item->uniq();
} else if (_key.startsWith("custom")) { } else if (_key.startsWith("custom")) {
AbstractExtItem *item = m_extScripts->itemByTag(_key, stripped); auto *item = m_extScripts->itemByTag(_key, stripped);
if (item) if (item)
output = item->uniq(); output = item->uniq();
} else if (_key.contains(QRegularExpression("^hdd[rw]"))) { } else if (_key.contains(QRegularExpression("^hdd[rw]"))) {
QString index = _key; auto index = _key;
index.remove(QRegularExpression("hdd[rw]")); index.remove(QRegularExpression("hdd[rw]"));
output = m_devices["disk"][index.toInt()]; output = m_devices["disk"][index.toInt()];
} else if (_key.contains(QRegularExpression("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))) { } else if (_key.contains(QRegularExpression("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))) {
QString index = _key; auto index = _key;
index.remove(QRegularExpression("^hdd(|mb|gb|freemb|freegb|totmb|totgb)")); index.remove(QRegularExpression("^hdd(|mb|gb|freemb|freegb|totmb|totgb)"));
output = m_devices["mount"][index.toInt()]; output = m_devices["mount"][index.toInt()];
} else if (_key.startsWith("hddtemp")) {
QString index = _key;
index.remove("hddtemp");
output = m_devices["hdd"][index.toInt()];
} else if (_key.contains(QRegularExpression("^(down|up)[0-9]"))) { } else if (_key.contains(QRegularExpression("^(down|up)[0-9]"))) {
QString index = _key; auto index = _key;
index.remove(QRegularExpression("^(down|up)")); index.remove(QRegularExpression("^(down|up)"));
output = m_devices["net"][index.toInt()]; output = m_devices["net"][index.toInt()];
} else if (_key.startsWith("pkgcount")) { } else if (_key.startsWith("pkgcount")) {
AbstractExtItem *item = m_extUpgrade->itemByTag(_key, stripped); auto *item = m_extUpgrade->itemByTag(_key, stripped);
if (item) if (item)
output = item->uniq(); output = item->uniq();
} else if (_key.contains(QRegularExpression("(^|perc)(ask|bid|price)(chg|)"))) { } else if (_key.contains(QRegularExpression("(^|perc)(ask|bid|price)(chg|)"))) {
AbstractExtItem *item = m_extQuotes->itemByTag(_key, stripped); auto *item = m_extQuotes->itemByTag(_key, stripped);
if (item) if (item)
output = item->uniq(); output = item->uniq();
} else if (_key.contains(QRegularExpression("(weather|weatherId|humidity|pressure|temperature)"))) { } else if (_key.contains(QRegularExpression("(weather|weatherId|humidity|pressure|temperature)"))) {
AbstractExtItem *item = m_extWeather->itemByTag(_key, stripped); auto *item = m_extWeather->itemByTag(_key, stripped);
if (item) if (item)
output = item->uniq(); output = item->uniq();
} else if (_key.startsWith("temp")) { } else if (_key.startsWith("temp")) {
QString index = _key; auto index = _key;
index.remove("temp"); index.remove("temp");
output = m_devices["temp"][index.toInt()]; output = m_devices["temp"][index.toInt()];
} else if (_key.startsWith("response")) { } else if (_key.startsWith("response")) {
AbstractExtItem *item = m_extNetRequest->itemByTag(_key, stripped); auto *item = m_extNetRequest->itemByTag(_key, stripped);
if (item) if (item)
output = item->uniq(); output = item->uniq();
} else { } else {
@ -302,9 +299,10 @@ void AWKeyOperations::addDevice(const QString &_source)
{ {
qCDebug(LOG_AW) << "Source" << _source; qCDebug(LOG_AW) << "Source" << _source;
auto diskRegexp = QRegularExpression("disk/.*/read"); auto diskRegexp = QRegularExpression("^disk/.*/read$");
auto mountRegexp = QRegularExpression("disk/.*/usedPercent"); auto mountRegexp = QRegularExpression("^disk/.*/usedPercent$");
auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$"); auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$");
auto gpuRegExp = QRegularExpression("^gpu/gpu.*/usage$");
if (_source.contains(diskRegexp)) { if (_source.contains(diskRegexp)) {
auto device = _source; auto device = _source;
@ -317,6 +315,10 @@ void AWKeyOperations::addDevice(const QString &_source)
} else if (_source.startsWith("lmsensors") || _source.contains(cpuTempRegExp) } else if (_source.startsWith("lmsensors") || _source.contains(cpuTempRegExp)
|| _source == "cpu/all/averageTemperature") { || _source == "cpu/all/averageTemperature") {
addKeyToCache("temp", _source); addKeyToCache("temp", _source);
} else if (_source.contains(gpuRegExp)) {
auto device = _source;
device.remove("gpu/").remove("/usage");
addKeyToCache("gpu", device);
} }
} }

View File

@ -103,6 +103,7 @@ void AWKeys::initKeys(const QString &_currentPattern, const int _interval, const
m_aggregator->initFormatters(); m_aggregator->initFormatters();
m_keyOperator->setPattern(_currentPattern); m_keyOperator->setPattern(_currentPattern);
m_keyOperator->updateCache(); m_keyOperator->updateCache();
m_dataEngineAggregator->loadSources();
// timer // timer
m_timer->setInterval(_interval); m_timer->setInterval(_interval);

View File

@ -46,9 +46,8 @@ ExtQuotes::ExtQuotes(QObject *_parent, const QString &_filePath)
// HACK declare as child of nullptr to avoid crash with plasmawindowed // HACK declare as child of nullptr to avoid crash with plasmawindowed
// in the destructor // in the destructor
m_manager = new QNetworkAccessManager(nullptr); m_manager = new QNetworkAccessManager(nullptr);
connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *))); connect(m_manager, &QNetworkAccessManager::finished, this, &ExtQuotes::quotesReplyReceived);
connect(this, &ExtQuotes::requestDataUpdate, this, &ExtQuotes::sendRequest);
connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest()));
} }
@ -56,8 +55,8 @@ ExtQuotes::~ExtQuotes()
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *))); disconnect(m_manager, &QNetworkAccessManager::finished, this, &ExtQuotes::quotesReplyReceived);
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); disconnect(this, &ExtQuotes::requestDataUpdate, this, &ExtQuotes::sendRequest);
m_manager->deleteLater(); m_manager->deleteLater();
} }

View File

@ -1,8 +1,8 @@
[Desktop Entry] [Desktop Entry]
Encoding=UTF-8 Encoding=UTF-8
Name=AAPL.NASDAQ Name=AAPL
Comment=Apple Inc Comment=Apple Inc
X-AW-Ticker="AAPL" X-AW-Ticker="AAPL.US"
X-AW-Active=false X-AW-Active=false
X-AW-ApiVersion=5 X-AW-ApiVersion=5
X-AW-Interval=60 X-AW-Interval=60

View File

@ -1,8 +1,8 @@
[Desktop Entry] [Desktop Entry]
Encoding=UTF-8 Encoding=UTF-8
Name=GOOG.NASDAQ Name=GOOG
Comment=Google Inc Comment=Google Inc
X-AW-Ticker="GOOG" X-AW-Ticker="GOOG.US"
X-AW-Active=false X-AW-Active=false
X-AW-ApiVersion=5 X-AW-ApiVersion=5
X-AW-Interval=60 X-AW-Interval=60

View File

@ -1,8 +1,8 @@
[Desktop Entry] [Desktop Entry]
Encoding=UTF-8 Encoding=UTF-8
Name=MSFT.NASDAQ Name=MSFT
Comment=Microsoft Corp Comment=Microsoft Corp
X-AW-Ticker="MSFT" X-AW-Ticker="MSFT.US"
X-AW-Active=false X-AW-Active=false
X-AW-ApiVersion=5 X-AW-ApiVersion=5
X-AW-Interval=60 X-AW-Interval=60

View File

@ -54,7 +54,7 @@ QVariantHash StooqQuotesProvider::parse(const QByteArray &_source, const QVarian
QVariantHash values; QVariantHash values;
QStringList sourceValues = QString::fromUtf8(_source).trimmed().split(','); auto sourceValues = QString::fromUtf8(_source).trimmed().split(',');
if (sourceValues.count() != 2) { if (sourceValues.count() != 2) {
qCWarning(LOG_LIB) << "Parse error" << sourceValues; qCWarning(LOG_LIB) << "Parse error" << sourceValues;
return values; return values;
@ -67,12 +67,12 @@ QVariantHash StooqQuotesProvider::parse(const QByteArray &_source, const QVarian
// last trade // last trade
auto price = sourceValues.at(0).toDouble(); auto price = sourceValues.at(0).toDouble();
values[tag("pricechg")] = oldPrice == 0.0 ? 0.0 : price - oldPrice; values[tag("pricechg")] = oldPrice == 0.0 ? 0.0 : price - oldPrice;
values[tag("percpricechg")] = 100.0 * values[tag("pricechg")].toDouble() / price; values[tag("percpricechg")] = 100.0 * values[tag("pricechg")].toDouble() / oldPrice;
values[tag("price")] = price; values[tag("price")] = price;
// volume // volume
auto volume = sourceValues.at(1).toInt(); auto volume = sourceValues.at(1).toInt();
values[tag("volumechg")] = oldVolume == 0 ? 0 : volume - oldVolume; values[tag("volumechg")] = oldVolume == 0 ? 0 : volume - oldVolume;
values[tag("percvolumechg")] = 100.0 * values[tag("volumechg")].toDouble() / volume; values[tag("percvolumechg")] = 100.0 * values[tag("volumechg")].toDouble() / oldVolume;
values[tag("volume")] = volume; values[tag("volume")] = volume;
return values; return values;

View File

@ -19,7 +19,7 @@
"Id": "org.kde.plasma.desktoppanel", "Id": "org.kde.plasma.desktoppanel",
"License": "GPLv3", "License": "GPLv3",
"Name": "Desktop Panel", "Name": "Desktop Panel",
"Version": "3.5.1", "Version": "4.0.0",
"Website": "https://arcanis.me/projects/awesome-widgets/" "Website": "https://arcanis.me/projects/awesome-widgets/"
}, },
"X-Plasma-API-Minimum-Version": "6.0" "X-Plasma-API-Minimum-Version": "6.0"

View File

@ -27,8 +27,6 @@
#include "awdebug.h" #include "awdebug.h"
#include "extsysmonaggregator.h" #include "extsysmonaggregator.h"
#include "gpuloadsource.h"
#include "hddtempsource.h"
ExtendedSysMon::ExtendedSysMon(QObject *_parent, const QVariantList &_args) ExtendedSysMon::ExtendedSysMon(QObject *_parent, const QVariantList &_args)
@ -53,9 +51,6 @@ void ExtendedSysMon::readConfiguration()
settings.beginGroup("Configuration"); settings.beginGroup("Configuration");
rawConfig["ACPIPATH"] = settings.value("ACPIPATH", "/sys/class/power_supply/").toString(); rawConfig["ACPIPATH"] = settings.value("ACPIPATH", "/sys/class/power_supply/").toString();
rawConfig["GPUDEV"] = settings.value("GPUDEV", "auto").toString();
rawConfig["HDDDEV"] = settings.value("HDDDEV", "all").toString();
rawConfig["HDDTEMPCMD"] = settings.value("HDDTEMPCMD", "sudo smartctl -a").toString();
rawConfig["MPDADDRESS"] = settings.value("MPDADDRESS", "localhost").toString(); rawConfig["MPDADDRESS"] = settings.value("MPDADDRESS", "localhost").toString();
rawConfig["MPDPORT"] = settings.value("MPDPORT", "6600").toString(); rawConfig["MPDPORT"] = settings.value("MPDPORT", "6600").toString();
rawConfig["MPRIS"] = settings.value("MPRIS", "auto").toString(); rawConfig["MPRIS"] = settings.value("MPRIS", "auto").toString();
@ -71,31 +66,6 @@ QHash<QString, QString> ExtendedSysMon::updateConfiguration(QHash<QString, QStri
{ {
qCDebug(LOG_ESM) << "Raw configuration" << _rawConfig; qCDebug(LOG_ESM) << "Raw configuration" << _rawConfig;
// gpudev
if (_rawConfig["GPUDEV"] == "disable")
;
else if (_rawConfig["GPUDEV"] == "auto")
_rawConfig["GPUDEV"] = GPULoadSource::autoGpu();
else if ((_rawConfig["GPUDEV"] != "ati") && (_rawConfig["GPUDEV"] != "nvidia"))
_rawConfig["GPUDEV"] = GPULoadSource::autoGpu();
// hdddev
auto allHddDevices = HDDTemperatureSource::allHdd();
if (_rawConfig["HDDDEV"] == "all") {
_rawConfig["HDDDEV"] = allHddDevices.join(',');
} else if (_rawConfig["HDDDEV"] == "disable") {
_rawConfig["HDDDEV"] = "";
} else {
auto deviceList = _rawConfig["HDDDEV"].split(',', Qt::SkipEmptyParts);
QStringList devices;
auto diskRegexp = QRegularExpression("^/dev/[hms]d[a-z]$");
for (auto &device : deviceList)
if ((QFile::exists(device)) && (device.contains(diskRegexp)))
devices.append(device);
if (devices.isEmpty())
_rawConfig["HDDDEV"] = allHddDevices.join(',');
else
_rawConfig["HDDDEV"] = devices.join(',');
}
// player // player
if ((_rawConfig["PLAYER"] != "mpd") && (_rawConfig["PLAYER"] != "mpris") && (_rawConfig["PLAYER"] != "disable")) if ((_rawConfig["PLAYER"] != "mpd") && (_rawConfig["PLAYER"] != "mpris") && (_rawConfig["PLAYER"] != "disable"))
_rawConfig["PLAYER"] = "mpris"; _rawConfig["PLAYER"] = "mpris";

View File

@ -22,9 +22,6 @@
#include "customsource.h" #include "customsource.h"
#include "desktopsource.h" #include "desktopsource.h"
#include "extsysmonsensor.h" #include "extsysmonsensor.h"
#include "gpuloadsource.h"
#include "gputempsource.h"
#include "hddtempsource.h"
#include "loadsource.h" #include "loadsource.h"
#include "networksource.h" #include "networksource.h"
#include "playersource.h" #include "playersource.h"
@ -64,14 +61,8 @@ void ExtSysMonAggregator::init(const QHash<QString, QString> &_config)
// custom // custom
createSensor("custom", i18n("Scripts"), new CustomSource(this, {})); createSensor("custom", i18n("Scripts"), new CustomSource(this, {}));
// desktop // desktop
createSensor("desktop", i18n("Desktop"), new DesktopSource(this, {})); // FIXME causes segfault in kde libs
// gpu load // createSensor("desktop", i18n("Desktop"), new DesktopSource(this, {}));
createSensor("gpuload", i18n("GPU load"), new GPULoadSource(this, {_config["GPUDEV"]}));
// gpu temperature
createSensor("gputemp", i18n("GPU temperature"), new GPUTemperatureSource(this, {_config["GPUDEV"]}));
// hdd temperature
createSensor("hdd", i18n("HDD temperature"),
new HDDTemperatureSource(this, {_config["HDDDEV"], _config["HDDTEMPCMD"]}));
// network // network
createSensor("network", i18n("Network"), new NetworkSource(this, {})); createSensor("network", i18n("Network"), new NetworkSource(this, {}));
// player // player

View File

@ -1,13 +1,6 @@
[Configuration] [Configuration]
# ACPI devices # ACPI devices
ACPIPATH=/sys/class/power_supply/ ACPIPATH=/sys/class/power_supply/
# May be 'nvidia' (for nvidia), 'ati' (for ATI RADEON), 'disable' or 'auto'
GPUDEV=auto
# HDD temperature
## Set block device for hddtemp comma separated or use 'all' or 'disable'
HDDDEV=all
# cmd
HDDTEMPCMD=sudo smartctl -a
# mpd server settings # mpd server settings
MPDADDRESS=localhost MPDADDRESS=localhost
MPDPORT=6600 MPDPORT=6600

View File

@ -1,151 +0,0 @@
/***************************************************************************
* 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 "gpuloadsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QFile>
#include <QProcess>
#include "awdebug.h"
GPULoadSource::GPULoadSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
{
Q_ASSERT(_args.count() == 1);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_device = _args.at(0);
m_process = new QProcess(nullptr);
// fucking magic from http://doc.qt.io/qt-5/qprocess.html#finished
connect(m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
[this](int, QProcess::ExitStatus) { return updateValue(); });
m_process->waitForFinished(0);
}
GPULoadSource::~GPULoadSource()
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_process->kill();
m_process->deleteLater();
}
QString GPULoadSource::autoGpu()
{
QString gpu = "disable";
QFile moduleFile("/proc/modules");
if (!moduleFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qCWarning(LOG_AW) << "Could not open file as text" << moduleFile.fileName();
return gpu;
}
QString output = moduleFile.readAll();
moduleFile.close();
if (output.contains("fglrx"))
gpu = "ati";
else if (output.contains("nvidia"))
gpu = "nvidia";
qCInfo(LOG_ESM) << "Device" << gpu;
return gpu;
}
QVariant GPULoadSource::data(const QString &_source)
{
qCDebug(LOG_ESS) << "Source" << _source;
if (_source == "load")
run();
return m_values[_source];
}
KSysGuard::SensorInfo *GPULoadSource::initialData(const QString &_source) const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo();
if (_source == "load") {
data->min = 0.0;
data->max = 100.0;
data->name = "GPU usage";
data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitPercent;
}
return data;
}
void GPULoadSource::run()
{
if ((m_device != "nvidia") && (m_device != "ati"))
return;
// build cmd
QString cmd = m_device == "nvidia" ? "nvidia-smi" : "aticonfig";
auto args = m_device == "nvidia" ? QStringList({"-q", "-x"}) : QStringList({"--od-getclocks"});
qCInfo(LOG_ESS) << "cmd" << cmd;
m_process->start(cmd, args);
}
QStringList GPULoadSource::sources() const
{
QStringList sources;
sources.append("load");
return sources;
}
void GPULoadSource::updateValue()
{
qCInfo(LOG_ESS) << "Cmd returns" << m_process->exitCode();
QString qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed();
qCInfo(LOG_ESS) << "Error" << qdebug;
QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed();
qCInfo(LOG_ESS) << "Output" << qoutput;
if (m_device == "nvidia") {
for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) {
if (!str.contains("<gpu_util>"))
continue;
auto load = str.remove("<gpu_util>").remove("</gpu_util>").remove('%');
m_values["load"] = load.toFloat();
break;
}
} else if (m_device == "ati") {
for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) {
if (!str.contains("load"))
continue;
QString load = str.split(' ', Qt::SkipEmptyParts)[3].remove('%');
m_values["load"] = load.toFloat();
break;
}
}
emit(dataReceived(m_values));
}

View File

@ -1,52 +0,0 @@
/***************************************************************************
* 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 GPULOADSOURCE_H
#define GPULOADSOURCE_H
#include <QObject>
#include "abstractextsysmonsource.h"
class QProcess;
class GPULoadSource : public AbstractExtSysMonSource
{
Q_OBJECT
public:
explicit GPULoadSource(QObject *_parent, const QStringList &_args);
~GPULoadSource() override;
static QString autoGpu();
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override;
[[nodiscard]] QStringList sources() const override;
private slots:
void updateValue();
private:
// configuration and values
QString m_device;
QProcess *m_process = nullptr;
QVariantHash m_values;
};
#endif /* GPULOADSOURCE_H */

View File

@ -1,131 +0,0 @@
/***************************************************************************
* 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 "gputempsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QFile>
#include <QProcess>
#include "awdebug.h"
GPUTemperatureSource::GPUTemperatureSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
{
Q_ASSERT(_args.count() == 1);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_device = _args.at(0);
m_process = new QProcess(nullptr);
// fucking magic from http://doc.qt.io/qt-5/qprocess.html#finished
connect(m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
[this](int, QProcess::ExitStatus) { return updateValue(); });
m_process->waitForFinished(0);
}
GPUTemperatureSource::~GPUTemperatureSource()
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_process->kill();
m_process->deleteLater();
}
QVariant GPUTemperatureSource::data(const QString &_source)
{
qCDebug(LOG_ESS) << "Source" << _source;
if (_source == "temperature")
run();
return m_values[_source];
}
KSysGuard::SensorInfo *GPUTemperatureSource::initialData(const QString &_source) const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo();
if (_source == "temperature") {
data->min = 0.0;
data->max = 0.0;
data->name = "GPU temperature";
data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitCelsius;
}
return data;
}
void GPUTemperatureSource::run()
{
if ((m_device != "nvidia") && (m_device != "ati"))
return;
// build cmd
QString cmd = m_device == "nvidia" ? "nvidia-smi" : "aticonfig";
auto args = m_device == "nvidia" ? QStringList({"-q", "-x"}) : QStringList({"--od-gettemperature"});
qCInfo(LOG_ESS) << "cmd" << cmd;
m_process->start(cmd, args);
}
QStringList GPUTemperatureSource::sources() const
{
QStringList sources;
sources.append("temperature");
return sources;
}
void GPUTemperatureSource::updateValue()
{
qCInfo(LOG_ESS) << "Cmd returns" << m_process->exitCode();
QString qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed();
qCInfo(LOG_ESS) << "Error" << qdebug;
QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed();
qCInfo(LOG_ESS) << "Output" << qoutput;
if (m_device == "nvidia") {
for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) {
if (!str.contains("<gpu_temp>"))
continue;
QString temp = str.remove("<gpu_temp>").remove("C</gpu_temp>");
m_values["temperature"] = temp.toFloat();
break;
}
} else if (m_device == "ati") {
for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) {
if (!str.contains("Temperature"))
continue;
QString temp = str.split(' ', Qt::SkipEmptyParts).at(4);
m_values["temperature"] = temp.toFloat();
break;
}
}
emit(dataReceived(m_values));
}

View File

@ -1,51 +0,0 @@
/***************************************************************************
* 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 GPUTEMPSOURCE_H
#define GPUTEMPSOURCE_H
#include <QObject>
#include "abstractextsysmonsource.h"
class QProcess;
class GPUTemperatureSource : public AbstractExtSysMonSource
{
Q_OBJECT
public:
explicit GPUTemperatureSource(QObject *_parent, const QStringList &_args);
~GPUTemperatureSource() override;
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override;
[[nodiscard]] QStringList sources() const override;
private slots:
void updateValue();
private:
// configuration and values
QString m_device;
QProcess *m_process = nullptr;
QVariantHash m_values;
};
#endif /* GPUTEMPSOURCE_H */

View File

@ -1,152 +0,0 @@
/***************************************************************************
* 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 "hddtempsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDir>
#include <QProcess>
#include "awdebug.h"
HDDTemperatureSource::HDDTemperatureSource(QObject *_parent, const QStringList &_args)
: AbstractExtSysMonSource(_parent, _args)
{
Q_ASSERT(_args.count() == 2);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_devices = _args.at(0).split(',', Qt::SkipEmptyParts);
m_cmd = _args.at(1).split(' '); // lets hope no one put cmd with spaces here lol
m_smartctl = m_cmd.contains("smartctl");
qCInfo(LOG_ESS) << "Parse as smartctl" << m_smartctl;
for (auto &device : m_devices) {
m_processes[device] = new QProcess(nullptr);
// fucking magic from http://doc.qt.io/qt-5/qprocess.html#finished
connect(m_processes[device], QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
[this, &device](int, QProcess::ExitStatus) { return updateValue(device); });
m_processes[device]->waitForFinished(0);
}
}
HDDTemperatureSource::~HDDTemperatureSource()
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
for (auto &device : m_devices) {
m_processes[device]->kill();
m_processes[device]->deleteLater();
}
}
QStringList HDDTemperatureSource::allHdd()
{
QStringList allDevices = QDir("/dev").entryList(QDir::System, QDir::Name);
QStringList devices = allDevices.filter(QRegularExpression("^[hms]d[a-z]$"));
for (int i = 0; i < devices.count(); i++)
devices[i] = QString("/dev/%1").arg(devices.at(i));
qCInfo(LOG_ESS) << "Device list" << devices;
return devices;
}
QVariant HDDTemperatureSource::data(const QString &_source)
{
qCDebug(LOG_ESS) << "Source" << _source;
QString device = _source;
device.remove("temperature");
// run cmd
if (m_processes[device]->state() == QProcess::NotRunning) {
auto cmd = m_cmd.first();
auto args = m_cmd.mid(1);
args.append(device);
m_processes[device]->start(cmd, args);
}
return m_values[device];
}
KSysGuard::SensorInfo *HDDTemperatureSource::initialData(const QString &_source) const
{
qCDebug(LOG_ESS) << "Source" << _source;
auto device = _source;
device.remove("temperature");
auto data = new KSysGuard::SensorInfo();
data->min = 0.0;
data->max = 0.0;
data->name = QString("HDD '%1' temperature").arg(device);
data->variantType = QVariant::Double;
data->unit = KSysGuard::UnitCelsius;
return data;
}
QStringList HDDTemperatureSource::sources() const
{
QStringList sources;
for (auto &device : m_devices)
sources.append(QString("temperature%1").arg(device));
return sources;
}
void HDDTemperatureSource::updateValue(const QString &_device)
{
qCDebug(LOG_ESS) << "Called with device" << _device;
qCInfo(LOG_ESS) << "Cmd returns" << m_processes[_device]->exitCode();
QString qdebug = QString::fromUtf8(m_processes[_device]->readAllStandardError()).trimmed();
qCInfo(LOG_ESS) << "Error" << qdebug;
QString qoutput = QString::fromUtf8(m_processes[_device]->readAllStandardOutput()).trimmed();
qCInfo(LOG_ESS) << "Output" << qoutput;
// parse
if (m_smartctl) {
QStringList lines = qoutput.split('\n', Qt::SkipEmptyParts);
for (auto &str : lines) {
if (!str.startsWith("194"))
continue;
if (str.split(' ', Qt::SkipEmptyParts).count() < 9)
continue;
m_values[_device] = str.split(' ', Qt::SkipEmptyParts).at(9).toFloat();
break;
}
} else {
QStringList lines = qoutput.split(':', Qt::SkipEmptyParts);
if (lines.count() >= 3) {
QString temp = lines.at(2);
temp.remove(QChar(0260)).remove('C');
m_values[_device] = temp.toFloat();
}
}
emit(dataReceived(m_values));
}

View File

@ -1,55 +0,0 @@
/***************************************************************************
* 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 HDDTEMPSOURCE_H
#define HDDTEMPSOURCE_H
#include <QObject>
#include "abstractextsysmonsource.h"
class QProcess;
class HDDTemperatureSource : public AbstractExtSysMonSource
{
Q_OBJECT
public:
explicit HDDTemperatureSource(QObject *_parent, const QStringList &_args);
~HDDTemperatureSource() override;
static QStringList allHdd();
QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override;
void run() override{};
[[nodiscard]] QStringList sources() const override;
private slots:
void updateValue(const QString &_device);
private:
// properties
QHash<QString, QProcess *> m_processes;
// configuration and values
QStringList m_cmd;
QStringList m_devices;
bool m_smartctl;
QHash<QString, QVariant> m_values;
};
#endif /* HDDTEMPSOURCE_H */

View File

@ -19,7 +19,7 @@ import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls
Item { ScrollView {
width: parent.width width: parent.width
height: parent.height * 4 / 5 height: parent.height * 4 / 5
@ -28,7 +28,6 @@ Item {
TextArea { TextArea {
id: textArea id: textArea
anchors.fill: parent
textFormat: TextEdit.PlainText textFormat: TextEdit.PlainText
Column { Column {
@ -50,9 +49,9 @@ Item {
} }
onTextChanged: { onTextChanged: {
var currentTag = getLastTag() let currentTag = getLastTag()
// exit if there are spaces or empty // exit if there are spaces or empty
if ((currentTag.indexOf(" ") != -1) || (currentTag.length == 0)) { if ((currentTag.indexOf(" ") !== -1) || (currentTag.length === 0)) {
tooltip.visible = false tooltip.visible = false
return return
} }
@ -63,7 +62,7 @@ Item {
// show tooltip if found more than 1 or current text does not match // show tooltip if found more than 1 or current text does not match
// tag found // tag found
tooltip.visible = ((tags.count > 1) tooltip.visible = ((tags.count > 1)
|| ((tags.count == 1) && (tags.model[0] != tooltip.substring))) || ((tags.count === 1) && (tags.model[0] !== tooltip.substring)))
} }
} }
@ -81,7 +80,7 @@ Item {
var substring = textArea.getText(0, textArea.cursorPosition) var substring = textArea.getText(0, textArea.cursorPosition)
// find last position of index in the given substring // find last position of index in the given substring
var signIndex = substring.lastIndexOf('$') + 1 var signIndex = substring.lastIndexOf('$') + 1
if ((signIndex == 0) || (signIndex == textArea.cursorPosition)) if ((signIndex === 0) || (signIndex === textArea.cursorPosition))
return "" return ""
// get current tag text // get current tag text
return substring.substr(signIndex) return substring.substr(signIndex)
@ -90,14 +89,6 @@ Item {
function insert(text) { function insert(text) {
textArea.insert(textArea.cursorPosition, text) textArea.insert(textArea.cursorPosition, text)
} }
function removeSelection() {
textArea.remove(textArea.selectionStart, textArea.selectionEnd)
}
function selectedText() {
return textArea.selectedText
}
} }

View File

@ -29,7 +29,7 @@ set(TEST_MODULES
abstractextitem extquotes extscript extupgrade extweather abstractextitem extquotes extscript extupgrade extweather
abstractformatter datetimeformatter floatformatter jsonformatter listformatter noformatter scriptformatter stringformatter abstractformatter datetimeformatter floatformatter jsonformatter listformatter noformatter scriptformatter stringformatter
extitemaggregator extitemaggregator
batterysource desktopsource gpuloadsource gputempsource hddtempsource networksource playersource processessource batterysource desktopsource networksource playersource processessource
awbugreporter awconfighelper awkeycache awkeys awpatternfunctions awtelemetryhandler awupdatehelper awbugreporter awconfighelper awkeycache awkeys awpatternfunctions awtelemetryhandler awupdatehelper
dpplugin) dpplugin)
foreach (TEST_MODULE ${TEST_MODULES}) foreach (TEST_MODULE ${TEST_MODULES})

View File

@ -1,66 +0,0 @@
/***************************************************************************
* 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 "testgpuloadsource.h"
#include <QtTest>
#include "awtestlibrary.h"
#include "gpuloadsource.h"
void TestGPULoadSource::initTestCase()
{
AWTestLibrary::init();
device = GPULoadSource::autoGpu();
QVERIFY(!device.isEmpty());
source = new GPULoadSource(this, QStringList() << device);
}
void TestGPULoadSource::cleanupTestCase()
{
delete source;
}
void TestGPULoadSource::test_sources()
{
QCOMPARE(source->sources(), QStringList() << src);
}
void TestGPULoadSource::test_gpuload()
{
if (device == "disable")
QSKIP("Not supported device, test will be skipped");
QSignalSpy spy(source, SIGNAL(dataReceived(const QVariantHash &)));
float firstValue = source->data(src).toFloat();
QVERIFY(spy.wait(5000));
QVariantHash arguments = spy.takeFirst().at(0).toHash();
float secondValue = arguments[src].toFloat();
QCOMPARE(firstValue, 0.0f);
QVERIFY((secondValue >= load.first) && (secondValue <= load.second));
}
QTEST_MAIN(TestGPULoadSource);

View File

@ -1,48 +0,0 @@
/***************************************************************************
* 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 TESTGPULOADSOURCE_H
#define TESTGPULOADSOURCE_H
#include <QObject>
#include <QPair>
class GPULoadSource;
class TestGPULoadSource : public QObject
{
Q_OBJECT
private slots:
// initialization
void initTestCase();
void cleanupTestCase();
// test
void test_sources();
void test_gpuload();
private:
GPULoadSource *source = nullptr;
QString device;
QString src = "gpu/load";
QPair<float, float> load = QPair<float, float>(0.0f, 100.0f);
};
#endif /* TESTGPULOADSOURCE_H */

View File

@ -1,67 +0,0 @@
/***************************************************************************
* 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 "testgputempsource.h"
#include <QtTest>
#include "awtestlibrary.h"
#include "gpuloadsource.h"
#include "gputempsource.h"
void TestGPUTemperatureSource::initTestCase()
{
AWTestLibrary::init();
device = GPULoadSource::autoGpu();
QVERIFY(!device.isEmpty());
source = new GPUTemperatureSource(this, QStringList() << device);
}
void TestGPUTemperatureSource::cleanupTestCase()
{
delete source;
}
void TestGPUTemperatureSource::test_sources()
{
QCOMPARE(source->sources(), QStringList() << src);
}
void TestGPUTemperatureSource::test_gputemp()
{
if (device == "disable")
QSKIP("Not supported device, test will be skipped");
QSignalSpy spy(source, SIGNAL(dataReceived(const QVariantHash &)));
float firstValue = source->data(src).toFloat();
QVERIFY(spy.wait(5000));
QVariantHash arguments = spy.takeFirst().at(0).toHash();
float secondValue = arguments[src].toFloat();
QCOMPARE(firstValue, 0.0f);
QVERIFY((secondValue >= temp.first) && (secondValue <= temp.second));
}
QTEST_MAIN(TestGPUTemperatureSource);

View File

@ -1,48 +0,0 @@
/***************************************************************************
* 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 TESTGPUTEMPSOURCE_H
#define TESTGPUTEMPSOURCE_H
#include <QObject>
#include <QPair>
class GPUTemperatureSource;
class TestGPUTemperatureSource : public QObject
{
Q_OBJECT
private slots:
// initialization
void initTestCase();
void cleanupTestCase();
// test
void test_sources();
void test_gputemp();
private:
GPUTemperatureSource *source = nullptr;
QString device;
QString src = "gpu/temperature";
QPair<float, float> temp = QPair<float, float>(0.0f, 120.0f);
};
#endif /* TESTGPUTEMPSOURCE_H */

View File

@ -1,96 +0,0 @@
/***************************************************************************
* 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 "testhddtempsource.h"
#include <QtTest>
#include "awtestlibrary.h"
#include "hddtempsource.h"
void TestHDDTemperatureSource::initTestCase()
{
AWTestLibrary::init();
devices = HDDTemperatureSource::allHdd();
hddtempSource = new HDDTemperatureSource(this, QStringList() << devices.join(',') << hddtempCmd);
smartctlSource = new HDDTemperatureSource(this, QStringList() << devices.join(',') << smartctlCmd);
}
void TestHDDTemperatureSource::cleanupTestCase()
{
delete hddtempSource;
delete smartctlSource;
}
void TestHDDTemperatureSource::test_sources()
{
if (devices.isEmpty())
QSKIP("No hdd devices found, test will be skipped");
std::for_each(devices.begin(), devices.end(), [](QString &device) { device.prepend("hdd/temperature"); });
QCOMPARE(hddtempSource->sources(), devices);
QCOMPARE(smartctlSource->sources(), devices);
}
void TestHDDTemperatureSource::test_hddtemp()
{
if (devices.isEmpty())
QSKIP("No hdd devices found, test will be skipped");
std::for_each(devices.begin(), devices.end(), [this](QString device) {
QSignalSpy spy(hddtempSource, SIGNAL(dataReceived(const QVariantHash &)));
float firstValue = hddtempSource->data(device).toFloat();
QVERIFY(spy.wait(5000));
QVariantHash arguments = spy.takeFirst().at(0).toHash();
device.remove("hdd/temperature");
float secondValue = arguments[device].toFloat();
QCOMPARE(firstValue, 0.0f);
QVERIFY((secondValue >= temp.first) && (secondValue <= temp.second));
});
}
void TestHDDTemperatureSource::test_smartctl()
{
if (devices.isEmpty())
QSKIP("No hdd devices found, test will be skipped");
std::for_each(devices.begin(), devices.end(), [this](QString &device) {
QSignalSpy spy(smartctlSource, SIGNAL(dataReceived(const QVariantHash &)));
float firstValue = smartctlSource->data(device).toFloat();
QVERIFY(spy.wait(5000));
QVariantHash arguments = spy.takeFirst().at(0).toHash();
device.remove("hdd/temperature");
float secondValue = arguments[device].toFloat();
QCOMPARE(firstValue, 0.0f);
QVERIFY((secondValue >= temp.first) && (secondValue <= temp.second));
});
}
QTEST_MAIN(TestHDDTemperatureSource);

View File

@ -1,51 +0,0 @@
/***************************************************************************
* 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 TESTHDDTEMPSOURCE_H
#define TESTHDDTEMPSOURCE_H
#include <QObject>
#include <QPair>
class HDDTemperatureSource;
class TestHDDTemperatureSource : public QObject
{
Q_OBJECT
private slots:
// initialization
void initTestCase();
void cleanupTestCase();
// test
void test_sources();
void test_hddtemp();
void test_smartctl();
private:
HDDTemperatureSource *hddtempSource = nullptr;
HDDTemperatureSource *smartctlSource = nullptr;
QStringList devices;
QString hddtempCmd = "sudo hddtemp";
QString smartctlCmd = "sudo smartctl -a";
QPair<float, float> temp = QPair<float, float>(0.0f, 120.0f);
};
#endif /* TESTHDDTEMPSOURCE_H */

View File

@ -54,7 +54,7 @@ const char STATIC_FUNCTIONS[] = "{{\n\n}},template{{\n\n}},aw_all<>{{}},aw_"
"count<>{{}},aw_keys<>{{}},aw_macro<>{{}},aw_" "count<>{{}},aw_keys<>{{}},aw_macro<>{{}},aw_"
"names<>{{}}"; "names<>{{}}";
const char STATIC_KEYS[] = "time,isotime,shorttime,longtime,tstime,ctime,uptime,cuptime,cpucl,cpu," const char STATIC_KEYS[] = "time,isotime,shorttime,longtime,tstime,ctime,uptime,cuptime,cpucl,cpu,"
"gputemp,gpu,memmb,memgb,memfreemb,memfreegb,memtotmb,memtotgb,memusedmb," "gpu,memmb,memgb,memfreemb,memfreegb,memtotmb,memtotgb,memusedmb,"
"memusedgb,mem,swapmb,swapgb,swapfreemb,swapfreegb,swaptotmb,swaptotgb," "memusedgb,mem,swapmb,swapgb,swapfreemb,swapfreegb,swaptotmb,swaptotgb,"
"swap,downunits,upunits,downkb,downtotkb,downtot,down,uptotkb,uptot,upkb," "swap,downunits,upunits,downkb,downtotkb,downtot,down,uptotkb,uptot,upkb,"
"up,netdev,ac,bat,batleft,batnow,batrate,battotal,album,artist,duration," "up,netdev,ac,bat,batleft,batnow,batrate,battotal,album,artist,duration,"