Libksysguard

SensorGroup.cpp
1/*
2 SPDX-FileCopyrightText: 2020 Marco Martin <mart@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7#include "SensorGroup_p.h"
8
9#include <KLocalizedString>
10#include <QDebug>
11#include <QRegularExpression>
12
13using namespace Qt::StringLiterals;
14
15namespace KSysGuard
16{
17SensorGroup::SensorGroup()
18{
19 retranslate();
20}
21
22SensorGroup::~SensorGroup()
23{
24}
25
26void SensorGroup::retranslate()
27{
28 m_sensorNames.clear();
29 m_segmentNames.clear();
30
31 m_sensorNames[u"cpu/cpu\\d+/usage"_s] = i18nc("Total load sensor of all cores", "[Group] Total Usage");
32 m_sensorNames[u"cpu/cpu\\d+/user"_s] = i18nc("All cores user load sensors", "[Group] User Usage");
33 m_sensorNames[u"cpu/cpu\\d+/system"_s] = i18nc("All cores user system sensors", "[Group] System Usage");
34 m_sensorNames[u"cpu/cpu\\d+/wait"_s] = i18nc("All cores wait load sensors", "[Group] Wait Usage");
35 m_sensorNames[u"cpu/cpu\\d+/frequency"_s] = i18nc("All cores clock frequency sensors", "[Group] Clock Frequency");
36 m_sensorNames[u"cpu/cpu\\d+/temperature"_s] = i18nc("All cores temperature sensors", "[Group] Temperature");
37 m_sensorNames[u"cpu/cpu\\d+/name"_s] = i18nc("All cores names", "[Group] Name");
38
39 m_sensorNames[u"gpu/gpu\\d+/usage"_s] = i18nc("GPU group sensor", "[Group] Total Usage");
40 m_sensorNames[u"gpu/gpu\\d+/usedVram"_s] = i18nc("GPU group sensor", "[Group] Video Memory Used");
41 m_sensorNames[u"gpu/gpu\\d+/totalVram"_s] = i18nc("GPU group sensor", "[Group] Total Video Memory");
42 m_sensorNames[u"gpu/gpu\\d+/name"_s] = i18nc("GPU group sensor", "[Group] Name");
43
44 m_sensorNames[u"partitions/(?!all).*/usedspace"_s] = i18n("[Group] Used");
45 m_sensorNames[u"partitions/(?!all).*/freespace"_s] = i18n("[Group] Available");
46 m_sensorNames[u"partitions/(?!all).*/filllevel"_s] = i18n("[Group] Percentage Used");
47 m_sensorNames[u"partitions/(?!all).*/total"_s] = i18n("[Group] Total Size");
48
49 m_sensorNames[u"network/(?!all).*/network"_s] = i18n("[Group] Network Name");
50 m_sensorNames[u"network/(?!all).*/ipv4address"_s] = i18n("[Group] IPv4 Address");
51 m_sensorNames[u"network/(?!all).*/ipv6address"_s] = i18n("[Group] IPv6 Address");
52 m_sensorNames[u"network/(?!all).*/signal"_s] = i18n("[Group] Signal Strength");
53 m_sensorNames[u"network/(?!all).*/download"_s] = i18n("[Group] Download Rate");
54 m_sensorNames[u"network/(?!all).*/downloadBits"_s] = i18n("[Group] Download Rate");
55 m_sensorNames[u"network/(?!all).*/totalDownload"_s] = i18n("[Group] Total Downloaded");
56 m_sensorNames[u"network/(?!all).*/upload"_s] = i18n("[Group] Upload Rate");
57 m_sensorNames[u"network/(?!all).*/uploadBits"_s] = i18n("[Group] Upload Rate");
58 m_sensorNames[u"network/(?!all).*/totalUpload"_s] = i18n("[Group] Total Uploaded");
59
60 m_sensorNames[u"disk/(?!all).*/name"_s] = i18n("[Group] Name");
61 m_sensorNames[u"disk/(?!all).*/total"_s] = i18n("[Group] Total Space");
62 m_sensorNames[u"disk/(?!all).*/used"_s] = i18n("[Group] Used Space");
63 m_sensorNames[u"disk/(?!all).*/free"_s] = i18n("[Group] Free Space");
64 m_sensorNames[u"disk/(?!all).*/read"_s] = i18n("[Group] Read Rate");
65 m_sensorNames[u"disk/(?!all).*/write"_s] = i18n("[Group] Write Rate");
66 m_sensorNames[u"disk/(?!all).*/usedPercent"_s] = i18n("[Group] Percentage Used");
67 m_sensorNames[u"disk/(?!all).*/freePercent"_s] = i18n("[Group] Percentage Free");
68
69 m_sensorNames[u"power/(?!all).*/name"_s] = i18nc("Power group sensor", "[Group] Name");
70 m_sensorNames[u"power/(?!all).*/charge"_s] = i18nc("Power group sensor", "[Group] Charge");
71 m_sensorNames[u"power/(?!all).*/chargePercentage"_s] = i18nc("Power group sensor", "[Group] Charge Percentage");
72 m_sensorNames[u"power/(?!all).*/chargeRate"_s] = i18nc("Power group sensor", "[Group] Charging Rate");
73 m_sensorNames[u"power/(?!all).*/capacity"_s] = i18nc("Power group sensor", "[Group] Current Capacity");
74 m_sensorNames[u"power/(?!all).*/design"_s] = i18nc("Power group sensor", "[Group] Design Capacity");
75 m_sensorNames[u"power/(?!all).*/health"_s] = i18nc("Power group sensor", "[Group] Health");
76
77 m_segmentNames[u"cpu/cpu\\d+"_s] = i18n("[Group] CPU");
78 m_segmentNames[u"gpu/gpu\\d+"_s] = i18n("[Group] GPU");
79 m_segmentNames[u"network/(?!all).*"_s] = i18nc("Network group title", "[Group] Network Device");
80 m_segmentNames[u"disk/(?!all).*"_s] = i18n("[Group] Disk");
81 m_segmentNames[u"power/(?!all).*"_s] = i18nc("Power group title", "[Group] Power");
82}
83
84QString SensorGroup::groupRegexForId(QString key /*Intentional copy*/)
85{
86 static const QRegularExpression cpuExpr(u"cpu/cpu\\d+/(.*)"_s);
87 static const QRegularExpression gpuExpr(u"gpu/gpu\\d+/(.*)"_s);
88 static const QRegularExpression netExpr(u"network/(?!all).*/(.*)$"_s);
89 static const QRegularExpression partitionsExpr(u"partitions/(?!all).*/(.*)$"_s);
90 static const QRegularExpression diskExpr(u"disk/(?!all).*/(.*)"_s);
91 static const QRegularExpression powerExpr(u"power/(?!all).*/(.*)"_s);
92
93 if (key.contains(cpuExpr)) {
94 key.replace(cpuExpr, u"cpu/cpu\\d+/\\1"_s);
95 } else if (key.contains(gpuExpr)) {
96 key.replace(gpuExpr, u"gpu/gpu\\d+/\\1"_s);
97 } else if (key.contains(netExpr)) {
98 key.replace(netExpr, u"network/(?!all).*/\\1"_s);
99 } else if (key.contains(partitionsExpr)) {
100 key.replace(partitionsExpr, u"partitions/(?!all).*/\\1"_s);
101 } else if (key.contains(diskExpr)) {
102 key.replace(diskExpr, u"disk/(?!all).*/\\1"_s);
103 } else if (key.contains(powerExpr)) {
104 key.replace(powerExpr, u"power/(?!all).*/\\1"_s);
105 } else {
106 return QString{};
107 }
108
109 // Only return the result if we actually have a proper name for it.
110 // This avoids us showing unmapped raw regex in the sensor tree model.
111 if (m_sensorNames.contains(key)) {
112 return key;
113 }
114
115 return QString();
116}
117
118QString SensorGroup::sensorNameForRegEx(const QString &expr)
119{
120 if (m_sensorNames.contains(expr)) {
121 return m_sensorNames.value(expr);
122 }
123
124 return expr;
125}
126
127QString SensorGroup::segmentNameForRegEx(const QString &expr)
128{
129 if (m_segmentNames.contains(expr)) {
130 return m_segmentNames.value(expr);
131 }
132
133 return expr;
134}
135
136} // namespace KSysGuard
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
QString & replace(QChar before, QChar after, Qt::CaseSensitivity cs)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Apr 11 2025 11:47:10 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.