mirror of
https://github.com/arcan1s/awesome-widgets.git
synced 2025-09-04 06:39:55 +00:00
one more optimization
The previous versions stored values as string, so any (even if they are not used) values being converted into string, and then (if required) being converted back to float/int/etc. I've changed the mechanism, so they are stored as QVariant (native value). Please note that it is possible that this rewrite may cause crash in some cases (if I've missed smth).
This commit is contained in:
@ -167,8 +167,8 @@ QString AWKeys::valueByKey(QString key) const
|
||||
{
|
||||
qCDebug(LOG_AW) << "Requested value for key" << key;
|
||||
|
||||
return values.value(key.remove(QRegExp(QString("^bar[0-9]{1,}"))),
|
||||
QString(""));
|
||||
key.remove(QRegExp(QString("^bar[0-9]{1,}")));
|
||||
return aggregator->formater(values[key], key);
|
||||
}
|
||||
|
||||
|
||||
@ -236,34 +236,26 @@ void AWKeys::calculateValues()
|
||||
QStringList mountDevices = keyOperator->devices(QString("mount"));
|
||||
for (auto device : mountDevices) {
|
||||
int index = mountDevices.indexOf(device);
|
||||
values[QString("hddtotmb%1").arg(index)] = QString("%1").arg(
|
||||
values[QString("hddfreemb%1").arg(index)].toFloat()
|
||||
+ values[QString("hddmb%1").arg(index)].toFloat(),
|
||||
5, 'f', 0);
|
||||
values[QString("hddtotgb%1").arg(index)] = QString("%1").arg(
|
||||
values[QString("hddfreegb%1").arg(index)].toFloat()
|
||||
+ values[QString("hddgb%1").arg(index)].toFloat(),
|
||||
5, 'f', 1);
|
||||
values[QString("hddtotmb%1").arg(index)]
|
||||
= values[QString("hddfreemb%1").arg(index)].toFloat()
|
||||
+ values[QString("hddmb%1").arg(index)].toFloat();
|
||||
values[QString("hddtotgb%1").arg(index)]
|
||||
= values[QString("hddfreegb%1").arg(index)].toFloat()
|
||||
+ values[QString("hddgb%1").arg(index)].toFloat();
|
||||
}
|
||||
|
||||
// memtot*
|
||||
values[QString("memtotmb")]
|
||||
= QString("%1").arg(values[QString("memusedmb")].toInt()
|
||||
+ values[QString("memfreemb")].toInt(),
|
||||
5);
|
||||
values[QString("memtotgb")]
|
||||
= QString("%1").arg(values[QString("memusedgb")].toFloat()
|
||||
+ values[QString("memfreegb")].toFloat(),
|
||||
5, 'f', 1);
|
||||
values[QString("memtotmb")] = values[QString("memusedmb")].toInt()
|
||||
+ values[QString("memfreemb")].toInt();
|
||||
values[QString("memtotgb")] = values[QString("memusedgb")].toFloat()
|
||||
+ values[QString("memfreegb")].toFloat();
|
||||
// mem
|
||||
values[QString("mem")]
|
||||
= QString("%1").arg(100.0 * values[QString("memmb")].toFloat()
|
||||
/ values[QString("memtotmb")].toFloat(),
|
||||
5, 'f', 1);
|
||||
values[QString("mem")] = 100.0f * values[QString("memmb")].toFloat()
|
||||
/ values[QString("memtotmb")].toFloat();
|
||||
|
||||
// up, down, upkb, downkb, upunits, downunits
|
||||
int netIndex = keyOperator->devices(QString("net"))
|
||||
.indexOf(values[QString("netdev")]);
|
||||
.indexOf(values[QString("netdev")].toString());
|
||||
values[QString("down")] = values[QString("down%1").arg(netIndex)];
|
||||
values[QString("downkb")] = values[QString("downkb%1").arg(netIndex)];
|
||||
values[QString("downunits")] = values[QString("downunits%1").arg(netIndex)];
|
||||
@ -272,28 +264,23 @@ void AWKeys::calculateValues()
|
||||
values[QString("upunits")] = values[QString("upunits%1").arg(netIndex)];
|
||||
|
||||
// swaptot*
|
||||
values[QString("swaptotmb")]
|
||||
= QString("%1").arg(values[QString("swapmb")].toInt()
|
||||
+ values[QString("swapfreemb")].toInt(),
|
||||
5);
|
||||
values[QString("swaptotgb")]
|
||||
= QString("%1").arg(values[QString("swapgb")].toFloat()
|
||||
+ values[QString("swapfreegb")].toFloat(),
|
||||
5, 'f', 1);
|
||||
values[QString("swaptotmb")] = values[QString("swapmb")].toInt()
|
||||
+ values[QString("swapfreemb")].toInt();
|
||||
values[QString("swaptotgb")] = values[QString("swapgb")].toFloat()
|
||||
+ values[QString("swapfreegb")].toFloat();
|
||||
// swap
|
||||
values[QString("swap")]
|
||||
= QString("%1").arg(100.0 * values[QString("swapmb")].toFloat()
|
||||
/ values[QString("swaptotmb")].toFloat(),
|
||||
5, 'f', 1);
|
||||
values[QString("swap")] = 100.0f * values[QString("swapmb")].toFloat()
|
||||
/ values[QString("swaptotmb")].toFloat();
|
||||
|
||||
// lambdas
|
||||
for (auto key : m_foundLambdas)
|
||||
values[key] = [this](QString key) {
|
||||
QJSEngine engine;
|
||||
// apply $this values
|
||||
key.replace(QString("$this"), values[key]);
|
||||
key.replace(QString("$this"), values[key].toString());
|
||||
for (auto lambdaKey : m_foundKeys)
|
||||
key.replace(QString("$%1").arg(lambdaKey), values[lambdaKey]);
|
||||
key.replace(QString("$%1").arg(lambdaKey),
|
||||
aggregator->formater(values[lambdaKey], lambdaKey));
|
||||
qCInfo(LOG_AW) << "Expression" << key;
|
||||
QJSValue result = engine.evaluate(key);
|
||||
if (result.isError()) {
|
||||
@ -315,17 +302,18 @@ QString AWKeys::parsePattern(QString pattern) const
|
||||
|
||||
// lambdas
|
||||
for (auto key : m_foundLambdas)
|
||||
pattern.replace(QString("${{%1}}").arg(key), values[key]);
|
||||
pattern.replace(QString("${{%1}}").arg(key), values[key].toString());
|
||||
|
||||
// main keys
|
||||
for (auto key : m_foundKeys)
|
||||
pattern.replace(QString("$%1").arg(key),
|
||||
[](QString key, QString value) {
|
||||
if ((!key.startsWith(QString("custom")))
|
||||
&& (!key.startsWith(QString("weather"))))
|
||||
value.replace(QString(" "), QString(" "));
|
||||
return value;
|
||||
}(key, values[key]));
|
||||
pattern.replace(QString("$%1").arg(key), [this](const QString &tag,
|
||||
const QVariant &value) {
|
||||
QString strValue = aggregator->formater(value, tag);
|
||||
if ((!tag.startsWith(QString("custom")))
|
||||
&& (!tag.startsWith(QString("weather"))))
|
||||
strValue.replace(QString(" "), QString(" "));
|
||||
return strValue;
|
||||
}(key, values[key]));
|
||||
|
||||
// bars
|
||||
for (auto bar : m_foundBars) {
|
||||
@ -338,7 +326,8 @@ QString AWKeys::parsePattern(QString pattern) const
|
||||
return QVariant::fromValue<QList<float>>(data);
|
||||
}(dataAggregator->getData(key))));
|
||||
else
|
||||
pattern.replace(QString("$%1").arg(bar), item->image(values[key]));
|
||||
pattern.replace(QString("$%1").arg(bar),
|
||||
item->image(values[key].toFloat()));
|
||||
}
|
||||
|
||||
// prepare strings
|
||||
@ -368,10 +357,11 @@ void AWKeys::setDataBySource(const QString &sourceName, const QVariantMap &data)
|
||||
|
||||
m_mutex.lock();
|
||||
// HACK workaround for time values which are stored in the different path
|
||||
QVariant value = sourceName == QString("Local") ? data[QString("DateTime")]
|
||||
: data[QString("value")];
|
||||
std::for_each(tags.cbegin(), tags.cend(), [this, value](const QString tag) {
|
||||
values[tag] = aggregator->formater(value, tag);
|
||||
});
|
||||
std::for_each(tags.cbegin(), tags.cend(),
|
||||
[this, &data, &sourceName](const QString &tag) {
|
||||
values[tag] = sourceName == QString("Local")
|
||||
? data[QString("DateTime")]
|
||||
: data[QString("value")];
|
||||
});
|
||||
m_mutex.unlock();
|
||||
}
|
||||
|
Reference in New Issue
Block a user