From 707fa727c5ccbbb5774a4643322f01b65c5180a9 Mon Sep 17 00:00:00 2001 From: Evgeniy Alekseev Date: Fri, 28 Jul 2017 04:57:07 +0300 Subject: [PATCH 1/2] split awkeysaggregator class --- .../plugin/awdataenginemapper.cpp | 448 ++++++++++++++++++ .../plugin/awdataenginemapper.h | 55 +++ .../plugin/awkeysaggregator.cpp | 390 +-------------- .../awesome-widget/plugin/awkeysaggregator.h | 10 +- sources/test/CMakeLists.txt | 2 + 5 files changed, 520 insertions(+), 385 deletions(-) create mode 100644 sources/awesome-widget/plugin/awdataenginemapper.cpp create mode 100644 sources/awesome-widget/plugin/awdataenginemapper.h diff --git a/sources/awesome-widget/plugin/awdataenginemapper.cpp b/sources/awesome-widget/plugin/awdataenginemapper.cpp new file mode 100644 index 0000000..afcf602 --- /dev/null +++ b/sources/awesome-widget/plugin/awdataenginemapper.cpp @@ -0,0 +1,448 @@ +/*************************************************************************** + * 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 "awdataenginemapper.h" + +#include + +#include "awdebug.h" +#include "awformatterhelper.h" + + +AWDataEngineMapper::AWDataEngineMapper(QObject *_parent, + AWFormatterHelper *_custom) + : QObject(_parent) + , m_customFormatters(_custom) +{ + qCDebug(LOG_AW) << __PRETTY_FUNCTION__; + + // default formatters + // memory + m_formatter["mem"] = AWKeysAggregator::FormatterType::Float; + m_formatter["memtotmb"] = AWKeysAggregator::FormatterType::MemMBFormat; + m_formatter["memtotgb"] = AWKeysAggregator::FormatterType::MemGBFormat; + // network + m_formatter["down"] = AWKeysAggregator::FormatterType::NetSmartFormat; + m_formatter["downkb"] = AWKeysAggregator::FormatterType::Integer; + m_formatter["downtot"] = AWKeysAggregator::FormatterType::MemMBFormat; + m_formatter["downtotkb"] = AWKeysAggregator::FormatterType::Integer; + m_formatter["downunits"] = AWKeysAggregator::FormatterType::NetSmartUnits; + m_formatter["up"] = AWKeysAggregator::FormatterType::NetSmartFormat; + m_formatter["upkb"] = AWKeysAggregator::FormatterType::Integer; + m_formatter["uptot"] = AWKeysAggregator::FormatterType::MemMBFormat; + m_formatter["uptotkb"] = AWKeysAggregator::FormatterType::Integer; + m_formatter["upunits"] = AWKeysAggregator::FormatterType::NetSmartUnits; + // swap + m_formatter["swap"] = AWKeysAggregator::FormatterType::Float; + m_formatter["swaptotmb"] = AWKeysAggregator::FormatterType::MemMBFormat; + m_formatter["swaptotgb"] = AWKeysAggregator::FormatterType::MemGBFormat; +} + + +AWDataEngineMapper::~AWDataEngineMapper() +{ + qCDebug(LOG_AW) << __PRETTY_FUNCTION__; +} + + +AWKeysAggregator::FormatterType +AWDataEngineMapper::formatter(const QString &_key) const +{ + qCDebug(LOG_AW) << "Get formatter for key" << _key; + + return m_formatter.value(_key, AWKeysAggregator::FormatterType::NoFormat); +} + + +QStringList AWDataEngineMapper::keysFromSource(const QString &_source) const +{ + qCDebug(LOG_AW) << "Search for source" << _source; + + return m_map.values(_source); +} + + +// HACK units required to define should the value be calculated as temperature +// or fan data +QStringList AWDataEngineMapper::registerSource(const QString &_source, + const QString &_units, + const QStringList &_keys) +{ + qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; + + // regular expressions + QRegExp cpuRegExp = QRegExp("cpu/cpu.*/TotalLoad"); + QRegExp cpuclRegExp = QRegExp("cpu/cpu.*/clock"); + QRegExp hddrRegExp = QRegExp("disk/.*/Rate/rblk"); + QRegExp hddwRegExp = QRegExp("disk/.*/Rate/wblk"); + QRegExp mountFillRegExp = QRegExp("partitions/.*/filllevel"); + QRegExp mountFreeRegExp = QRegExp("partitions/.*/freespace"); + QRegExp mountUsedRegExp = QRegExp("partitions/.*/usedspace"); + QRegExp netRegExp + = QRegExp("network/interfaces/.*/(receiver|transmitter)/data$"); + QRegExp netTotalRegExp + = QRegExp("network/interfaces/.*/(receiver|transmitter)/dataTotal$"); + + if (_source == "battery/ac") { + // AC + m_map[_source] = "ac"; + m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat; + } else if (_source.startsWith("battery/")) { + // battery stats + QString key = _source; + key.remove("battery/"); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree; + } else if (_source == "cpu/system/TotalLoad") { + // cpu + m_map[_source] = "cpu"; + m_formatter["cpu"] = AWKeysAggregator::FormatterType::Float; + } else if (_source.contains(cpuRegExp)) { + // cpus + QString key = _source; + key.remove("cpu/").remove("/TotalLoad"); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::Float; + } else if (_source == "cpu/system/AverageClock") { + // cpucl + m_map[_source] = "cpucl"; + m_formatter["cpucl"] = AWKeysAggregator::FormatterType::Integer; + } else if (_source.contains(cpuclRegExp)) { + // cpucls + QString key = _source; + key.remove("cpu/cpu").remove("/clock"); + key = QString("cpucl%1").arg(key); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::Integer; + } else if (_source.startsWith("custom")) { + // custom + QString key = _source; + key.remove("custom/"); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; + } else if (_source == "desktop/current/name") { + // current desktop name + m_map[_source] = "desktop"; + m_formatter["desktop"] = AWKeysAggregator::FormatterType::NoFormat; + } else if (_source == "desktop/current/number") { + // current desktop number + m_map[_source] = "ndesktop"; + m_formatter["ndesktop"] = AWKeysAggregator::FormatterType::NoFormat; + } else if (_source == "desktop/total/number") { + // desktop count + m_map[_source] = "tdesktops"; + m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat; + } else if (_source.contains(hddrRegExp)) { + // read speed + QString device = _source; + device.remove("/Rate/rblk"); + int index = m_devices["disk"].indexOf(device); + if (index > -1) { + QString key = QString("hddr%1").arg(index); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::Integer; + } + } else if (_source.contains(hddwRegExp)) { + // write speed + QString device = _source; + device.remove("/Rate/wblk"); + int index = m_devices["disk"].indexOf(device); + if (index > -1) { + QString key = QString("hddw%1").arg(index); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::Integer; + } + } else if (_source == "gpu/load") { + // gpu load + m_map[_source] = "gpu"; + m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float; + } else if (_source == "gpu/temperature") { + // gpu temperature + m_map[_source] = "gputemp"; + m_formatter["gputemp"] = AWKeysAggregator::FormatterType::Temperature; + } else if (_source.contains(mountFillRegExp)) { + // fill level + QString device = _source; + device.remove("partitions").remove("/filllevel"); + int index = m_devices["mount"].indexOf(device); + if (index > -1) { + QString key = QString("hdd%1").arg(index); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::Float; + // additional keys + m_formatter[QString("hddtotmb%1").arg(index)] + = AWKeysAggregator::FormatterType::MemMBFormat; + m_formatter[QString("hddtotgb%1").arg(index)] + = AWKeysAggregator::FormatterType::MemGBFormat; + } + } else if (_source.contains(mountFreeRegExp)) { + // free space + QString device = _source; + device.remove("partitions").remove("/freespace"); + int index = m_devices["mount"].indexOf(device); + if (index > -1) { + // mb + QString key = QString("hddfreemb%1").arg(index); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat; + // gb + key = QString("hddfreegb%1").arg(index); + m_map.insertMulti(_source, key); + m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat; + } + } else if (_source.contains(mountUsedRegExp)) { + // used + QString device = _source; + device.remove("partitions").remove("/usedspace"); + int index = m_devices["mount"].indexOf(device); + if (index > -1) { + // mb + QString key = QString("hddmb%1").arg(index); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat; + // gb + key = QString("hddgb%1").arg(index); + m_map.insertMulti(_source, key); + m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat; + } + } else if (_source.startsWith("hdd/temperature")) { + // hdd temperature + QString device = _source; + device.remove("hdd/temperature"); + int index = m_devices["hdd"].indexOf(device); + if (index > -1) { + QString key = QString("hddtemp%1").arg(index); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; + } + } else if (_source.startsWith("cpu/system/loadavg")) { + // load average + QString time = _source; + time.remove("cpu/system/loadavg"); + QString key = QString("la%1").arg(time); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::FloatTwoSymbols; + } else if (_source == "mem/physical/application") { + // app memory + // mb + m_map[_source] = "memmb"; + m_formatter["memmb"] = AWKeysAggregator::FormatterType::MemMBFormat; + // gb + m_map.insertMulti(_source, "memgb"); + m_formatter["memgb"] = AWKeysAggregator::FormatterType::MemGBFormat; + } else if (_source == "mem/physical/free") { + // free memory + // mb + m_map[_source] = "memfreemb"; + m_formatter["memfreemb"] = AWKeysAggregator::FormatterType::MemMBFormat; + // gb + m_map.insertMulti(_source, "memfreegb"); + m_formatter["memfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat; + } else if (_source == "mem/physical/used") { + // used memory + // mb + m_map[_source] = "memusedmb"; + m_formatter["memusedmb"] = AWKeysAggregator::FormatterType::MemMBFormat; + // gb + m_map.insertMulti(_source, "memusedgb"); + m_formatter["memusedgb"] = AWKeysAggregator::FormatterType::MemGBFormat; + } else if (_source == "network/current/name") { + // network device + m_map[_source] = "netdev"; + m_formatter["netdev"] = AWKeysAggregator::FormatterType::NoFormat; + } else if (_source.startsWith("network/response")) { + // network response + QString key = _source; + key.remove("network/"); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; + } else if (_source.contains(netRegExp)) { + // network speed + QString type = _source.contains("receiver") ? "down" : "up"; + int index = m_devices["net"].indexOf(_source.split('/')[2]); + if (index > -1) { + // kb + QString key = QString("%1kb%2").arg(type).arg(index); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::Integer; + // smart + key = QString("%1%2").arg(type).arg(index); + m_map.insertMulti(_source, key); + m_formatter[key] = AWKeysAggregator::FormatterType::NetSmartFormat; + // units + key = QString("%1units%2").arg(type).arg(index); + m_map.insertMulti(_source, key); + m_formatter[key] = AWKeysAggregator::FormatterType::NetSmartUnits; + } + } else if (_source.contains(netTotalRegExp)) { + // network data total + QString type = _source.contains("receiver") ? "down" : "up"; + int index = m_devices["net"].indexOf(_source.split('/')[2]); + if (index > -1) { + // kb + QString key = QString("%1totkb%2").arg(type).arg(index); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::Integer; + // mb + key = QString("%1tot%2").arg(type).arg(index); + m_map.insertMulti(_source, key); + m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat; + } + } else if (_source.startsWith("upgrade")) { + // package manager + QString key = _source; + key.remove("upgrade/"); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree; + } else if (_source.startsWith("player")) { + // player + QString key = _source; + key.remove("player/"); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; + } else if (_source == "ps/running/count") { + // running processes count + m_map[_source] = "pscount"; + m_formatter["pscount"] = AWKeysAggregator::FormatterType::NoFormat; + } else if (_source == "ps/running/list") { + // list of running processes + m_map[_source] = "ps"; + m_formatter["ps"] = AWKeysAggregator::FormatterType::List; + } else if (_source == "ps/total/count") { + // total processes count + m_map[_source] = "pstot"; + m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat; + } else if (_source.startsWith("quotes")) { + // quotes + QString key = _source; + key.remove("quotes/"); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::Quotes; + } else if (_source == "mem/swap/free") { + // free swap + // mb + m_map[_source] = "swapfreemb"; + m_formatter["swapfreemb"] + = AWKeysAggregator::FormatterType::MemMBFormat; + // gb + m_map.insertMulti(_source, "swapfreegb"); + m_formatter["swapfreegb"] + = AWKeysAggregator::FormatterType::MemGBFormat; + } else if (_source == "mem/swap/used") { + // used swap + // mb + m_map[_source] = "swapmb"; + m_formatter["swapmb"] = AWKeysAggregator::FormatterType::MemMBFormat; + // gb + m_map.insertMulti(_source, "swapgb"); + m_formatter["swapgb"] = AWKeysAggregator::FormatterType::MemGBFormat; + } else if (_source.startsWith("lmsensors/")) { + // temperature + int index = m_devices["temp"].indexOf(_source); + // HACK on DE initialization there are no units key + if (_units.isEmpty()) + return QStringList({QString("temp%1").arg(index)}); + if (index > -1) { + QString key = QString("temp%1").arg(index); + m_map[_source] = key; + m_formatter[key] + = _units == "°C" ? AWKeysAggregator::FormatterType::Temperature + : AWKeysAggregator::FormatterType::Integer; + } + } else if (_source == "Local") { + // time + m_map[_source] = "time"; + m_formatter["time"] = AWKeysAggregator::FormatterType::Time; + // custom time + m_map.insertMulti(_source, "ctime"); + m_formatter["ctime"] = AWKeysAggregator::FormatterType::TimeCustom; + // ISO time + m_map.insertMulti(_source, "isotime"); + m_formatter["isotime"] = AWKeysAggregator::FormatterType::TimeISO; + // long time + m_map.insertMulti(_source, "longtime"); + m_formatter["longtime"] = AWKeysAggregator::FormatterType::TimeLong; + // short time + m_map.insertMulti(_source, "shorttime"); + m_formatter["shorttime"] = AWKeysAggregator::FormatterType::TimeShort; + // timestamp + m_map.insertMulti(_source, "tstime"); + m_formatter["tstime"] = AWKeysAggregator::FormatterType::Timestamp; + } else if (_source == "system/uptime") { + // uptime + m_map[_source] = "uptime"; + m_formatter["uptime"] = AWKeysAggregator::FormatterType::Uptime; + // custom uptime + m_map.insertMulti(_source, "cuptime"); + m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom; + } else if (_source.startsWith("weather/temperature")) { + // temperature + QString key = _source; + key.remove("weather/"); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; + } else if (_source.startsWith("weather/")) { + // other weather + QString key = _source; + key.remove("weather/"); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; + } else if (_source.startsWith("load/load")) { + // load source + QString key = _source; + key.remove("load/"); + m_map[_source] = key; + m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; + } + + QStringList foundKeys = keysFromSource(_source); + + // rewrite formatters for custom ones + QStringList customFormattersKeys; + if (m_customFormatters) + customFormattersKeys = m_customFormatters->definedFormatters(); + qCInfo(LOG_AW) << "Looking for formatters" << foundKeys << "in" + << customFormattersKeys; + for (auto &key : foundKeys) { + if (!customFormattersKeys.contains(key)) + continue; + m_formatter[key] = AWKeysAggregator::FormatterType::Custom; + } + + // drop key from dictionary if no one user requested key required it + qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys; + bool required + = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), + [&_keys](const QString &key) { + return _keys.contains(key); + }); + if (!required) { + m_map.remove(_source); + for (auto &key : foundKeys) + m_formatter.remove(key); + } + + return keysFromSource(_source); +} + + +void AWDataEngineMapper::setDevices(const QHash &_devices) +{ + qCDebug(LOG_AW) << "Devices" << _devices; + + m_devices = _devices; +} diff --git a/sources/awesome-widget/plugin/awdataenginemapper.h b/sources/awesome-widget/plugin/awdataenginemapper.h new file mode 100644 index 0000000..e070f23 --- /dev/null +++ b/sources/awesome-widget/plugin/awdataenginemapper.h @@ -0,0 +1,55 @@ +/*************************************************************************** + * This file is part of awesome-widgets * + * * + * awesome-widgets is free software: you can redistribute it and/or * + * modify it under the terms of the GNU General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * awesome-widgets is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * + ***************************************************************************/ + + +#ifndef AWDATAENGINEMAPPER_H +#define AWDATAENGINEMAPPER_H + +#include +#include + +#include "awkeysaggregator.h" + + +class AWFormatterHelper; + +class AWDataEngineMapper : public QObject +{ + Q_OBJECT + +public: + explicit AWDataEngineMapper(QObject *_parent = nullptr, + AWFormatterHelper *_custom = nullptr); + virtual ~AWDataEngineMapper(); + // get methods + AWKeysAggregator::FormatterType formatter(const QString &_key) const; + QStringList keysFromSource(const QString &_source) const; + // set methods + QStringList registerSource(const QString &_source, const QString &_units, + const QStringList &_keys); + void setDevices(const QHash &_devices); + +private: + AWFormatterHelper *m_customFormatters = nullptr; + // variables + QHash m_devices; + QHash m_formatter; + QHash m_map; +}; + + +#endif /* AWDATAENGINEMAPPER_H */ diff --git a/sources/awesome-widget/plugin/awkeysaggregator.cpp b/sources/awesome-widget/plugin/awkeysaggregator.cpp index c018cf2..b099019 100644 --- a/sources/awesome-widget/plugin/awkeysaggregator.cpp +++ b/sources/awesome-widget/plugin/awkeysaggregator.cpp @@ -21,10 +21,11 @@ #include #include -#include +#include "awdataenginemapper.h" #include "awdebug.h" #include "awformatterhelper.h" +#include "version.h" AWKeysAggregator::AWKeysAggregator(QObject *_parent) @@ -33,31 +34,12 @@ AWKeysAggregator::AWKeysAggregator(QObject *_parent) qCDebug(LOG_AW) << __PRETTY_FUNCTION__; m_customFormatters = new AWFormatterHelper(nullptr); + m_mapper = new AWDataEngineMapper(this, m_customFormatters); // sort time keys + m_timeKeys = QString(TIME_KEYS).split(','); m_timeKeys.sort(); std::reverse(m_timeKeys.begin(), m_timeKeys.end()); - - // default formatters - // memory - m_formatter["mem"] = FormatterType::Float; - m_formatter["memtotmb"] = FormatterType::MemMBFormat; - m_formatter["memtotgb"] = FormatterType::MemGBFormat; - // network - m_formatter["down"] = FormatterType::NetSmartFormat; - m_formatter["downkb"] = FormatterType::Integer; - m_formatter["downtot"] = FormatterType::MemMBFormat; - m_formatter["downtotkb"] = FormatterType::Integer; - m_formatter["downunits"] = FormatterType::NetSmartUnits; - m_formatter["up"] = FormatterType::NetSmartFormat; - m_formatter["upkb"] = FormatterType::Integer; - m_formatter["uptot"] = FormatterType::MemMBFormat; - m_formatter["uptotkb"] = FormatterType::Integer; - m_formatter["upunits"] = FormatterType::NetSmartUnits; - // swap - m_formatter["swap"] = FormatterType::Float; - m_formatter["swaptotmb"] = FormatterType::MemMBFormat; - m_formatter["swaptotgb"] = FormatterType::MemGBFormat; } @@ -81,7 +63,7 @@ QString AWKeysAggregator::formatter(const QVariant &_data, QString output; QLocale loc = m_translate ? QLocale::system() : QLocale::c(); // case block - switch (m_formatter[_key]) { + switch (m_mapper->formatter(_key)) { case FormatterType::Float: output = QString("%1").arg(_data.toFloat(), 5, 'f', 1); break; @@ -173,8 +155,9 @@ QString AWKeysAggregator::formatter(const QVariant &_data, QString("%1").arg(minutes, 2, 10, QChar('0'))); source.replace("$m", QString("%1").arg(minutes)); return source; - }(m_formatter[_key] == FormatterType::Uptime ? "$ddd$hhh$mmm" - : m_customUptime, + }(m_mapper->formatter(_key) == FormatterType::Uptime + ? "$ddd$hhh$mmm" + : m_customUptime, static_cast(_data.toFloat())); break; case FormatterType::NoFormat: @@ -198,7 +181,7 @@ QStringList AWKeysAggregator::keysFromSource(const QString &_source) const { qCDebug(LOG_AW) << "Search for source" << _source; - return m_map.values(_source); + return m_mapper->keysFromSource(_source); } @@ -238,7 +221,7 @@ void AWKeysAggregator::setDevices(const QHash &_devices) { qCDebug(LOG_AW) << "Devices" << _devices; - m_devices = _devices; + m_mapper->setDevices(_devices); } @@ -258,364 +241,13 @@ void AWKeysAggregator::setTranslate(const bool _translate) } -// HACK units required to define should the value be calculated as temperature -// or fan data QStringList AWKeysAggregator::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) { qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; - // regular expressions - QRegExp cpuRegExp = QRegExp("cpu/cpu.*/TotalLoad"); - QRegExp cpuclRegExp = QRegExp("cpu/cpu.*/clock"); - QRegExp hddrRegExp = QRegExp("disk/.*/Rate/rblk"); - QRegExp hddwRegExp = QRegExp("disk/.*/Rate/wblk"); - QRegExp mountFillRegExp = QRegExp("partitions/.*/filllevel"); - QRegExp mountFreeRegExp = QRegExp("partitions/.*/freespace"); - QRegExp mountUsedRegExp = QRegExp("partitions/.*/usedspace"); - QRegExp netRegExp - = QRegExp("network/interfaces/.*/(receiver|transmitter)/data$"); - QRegExp netTotalRegExp - = QRegExp("network/interfaces/.*/(receiver|transmitter)/dataTotal$"); - - if (_source == "battery/ac") { - // AC - m_map[_source] = "ac"; - m_formatter["ac"] = FormatterType::ACFormat; - } else if (_source.startsWith("battery/")) { - // battery stats - QString key = _source; - key.remove("battery/"); - m_map[_source] = key; - m_formatter[key] = FormatterType::IntegerThree; - } else if (_source == "cpu/system/TotalLoad") { - // cpu - m_map[_source] = "cpu"; - m_formatter["cpu"] = FormatterType::Float; - } else if (_source.contains(cpuRegExp)) { - // cpus - QString key = _source; - key.remove("cpu/").remove("/TotalLoad"); - m_map[_source] = key; - m_formatter[key] = FormatterType::Float; - } else if (_source == "cpu/system/AverageClock") { - // cpucl - m_map[_source] = "cpucl"; - m_formatter["cpucl"] = FormatterType::Integer; - } else if (_source.contains(cpuclRegExp)) { - // cpucls - QString key = _source; - key.remove("cpu/cpu").remove("/clock"); - key = QString("cpucl%1").arg(key); - m_map[_source] = key; - m_formatter[key] = FormatterType::Integer; - } else if (_source.startsWith("custom")) { - // custom - QString key = _source; - key.remove("custom/"); - m_map[_source] = key; - m_formatter[key] = FormatterType::NoFormat; - } else if (_source == "desktop/current/name") { - // current desktop name - m_map[_source] = "desktop"; - m_formatter["desktop"] = FormatterType::NoFormat; - } else if (_source == "desktop/current/number") { - // current desktop number - m_map[_source] = "ndesktop"; - m_formatter["ndesktop"] = FormatterType::NoFormat; - } else if (_source == "desktop/total/number") { - // desktop count - m_map[_source] = "tdesktops"; - m_formatter["tdesktops"] = FormatterType::NoFormat; - } else if (_source.contains(hddrRegExp)) { - // read speed - QString device = _source; - device.remove("/Rate/rblk"); - int index = m_devices["disk"].indexOf(device); - if (index > -1) { - QString key = QString("hddr%1").arg(index); - m_map[_source] = key; - m_formatter[key] = FormatterType::Integer; - } - } else if (_source.contains(hddwRegExp)) { - // write speed - QString device = _source; - device.remove("/Rate/wblk"); - int index = m_devices["disk"].indexOf(device); - if (index > -1) { - QString key = QString("hddw%1").arg(index); - m_map[_source] = key; - m_formatter[key] = FormatterType::Integer; - } - } else if (_source == "gpu/load") { - // gpu load - m_map[_source] = "gpu"; - m_formatter["gpu"] = FormatterType::Float; - } else if (_source == "gpu/temperature") { - // gpu temperature - m_map[_source] = "gputemp"; - m_formatter["gputemp"] = FormatterType::Temperature; - } else if (_source.contains(mountFillRegExp)) { - // fill level - QString device = _source; - device.remove("partitions").remove("/filllevel"); - int index = m_devices["mount"].indexOf(device); - if (index > -1) { - QString key = QString("hdd%1").arg(index); - m_map[_source] = key; - m_formatter[key] = FormatterType::Float; - // additional keys - m_formatter[QString("hddtotmb%1").arg(index)] - = FormatterType::MemMBFormat; - m_formatter[QString("hddtotgb%1").arg(index)] - = FormatterType::MemGBFormat; - } - } else if (_source.contains(mountFreeRegExp)) { - // free space - QString device = _source; - device.remove("partitions").remove("/freespace"); - int index = m_devices["mount"].indexOf(device); - if (index > -1) { - // mb - QString key = QString("hddfreemb%1").arg(index); - m_map[_source] = key; - m_formatter[key] = FormatterType::MemMBFormat; - // gb - key = QString("hddfreegb%1").arg(index); - m_map.insertMulti(_source, key); - m_formatter[key] = FormatterType::MemGBFormat; - } - } else if (_source.contains(mountUsedRegExp)) { - // used - QString device = _source; - device.remove("partitions").remove("/usedspace"); - int index = m_devices["mount"].indexOf(device); - if (index > -1) { - // mb - QString key = QString("hddmb%1").arg(index); - m_map[_source] = key; - m_formatter[key] = FormatterType::MemMBFormat; - // gb - key = QString("hddgb%1").arg(index); - m_map.insertMulti(_source, key); - m_formatter[key] = FormatterType::MemGBFormat; - } - } else if (_source.startsWith("hdd/temperature")) { - // hdd temperature - QString device = _source; - device.remove("hdd/temperature"); - int index = m_devices["hdd"].indexOf(device); - if (index > -1) { - QString key = QString("hddtemp%1").arg(index); - m_map[_source] = key; - m_formatter[key] = FormatterType::Temperature; - } - } else if (_source.startsWith("cpu/system/loadavg")) { - // load average - QString time = _source; - time.remove("cpu/system/loadavg"); - QString key = QString("la%1").arg(time); - m_map[_source] = key; - m_formatter[key] = FormatterType::FloatTwoSymbols; - } else if (_source == "mem/physical/application") { - // app memory - // mb - m_map[_source] = "memmb"; - m_formatter["memmb"] = FormatterType::MemMBFormat; - // gb - m_map.insertMulti(_source, "memgb"); - m_formatter["memgb"] = FormatterType::MemGBFormat; - } else if (_source == "mem/physical/free") { - // free memory - // mb - m_map[_source] = "memfreemb"; - m_formatter["memfreemb"] = FormatterType::MemMBFormat; - // gb - m_map.insertMulti(_source, "memfreegb"); - m_formatter["memfreegb"] = FormatterType::MemGBFormat; - } else if (_source == "mem/physical/used") { - // used memory - // mb - m_map[_source] = "memusedmb"; - m_formatter["memusedmb"] = FormatterType::MemMBFormat; - // gb - m_map.insertMulti(_source, "memusedgb"); - m_formatter["memusedgb"] = FormatterType::MemGBFormat; - } else if (_source == "network/current/name") { - // network device - m_map[_source] = "netdev"; - m_formatter["netdev"] = FormatterType::NoFormat; - } else if (_source.startsWith("network/response")) { - // network response - QString key = _source; - key.remove("network/"); - m_map[_source] = key; - m_formatter[key] = FormatterType::NoFormat; - } else if (_source.contains(netRegExp)) { - // network speed - QString type = _source.contains("receiver") ? "down" : "up"; - int index = m_devices["net"].indexOf(_source.split('/')[2]); - if (index > -1) { - // kb - QString key = QString("%1kb%2").arg(type).arg(index); - m_map[_source] = key; - m_formatter[key] = FormatterType::Integer; - // smart - key = QString("%1%2").arg(type).arg(index); - m_map.insertMulti(_source, key); - m_formatter[key] = FormatterType::NetSmartFormat; - // units - key = QString("%1units%2").arg(type).arg(index); - m_map.insertMulti(_source, key); - m_formatter[key] = FormatterType::NetSmartUnits; - } - } else if (_source.contains(netTotalRegExp)) { - // network data total - QString type = _source.contains("receiver") ? "down" : "up"; - int index = m_devices["net"].indexOf(_source.split('/')[2]); - if (index > -1) { - // kb - QString key = QString("%1totkb%2").arg(type).arg(index); - m_map[_source] = key; - m_formatter[key] = FormatterType::Integer; - // mb - key = QString("%1tot%2").arg(type).arg(index); - m_map.insertMulti(_source, key); - m_formatter[key] = FormatterType::MemMBFormat; - } - } else if (_source.startsWith("upgrade")) { - // package manager - QString key = _source; - key.remove("upgrade/"); - m_map[_source] = key; - m_formatter[key] = FormatterType::IntegerThree; - } else if (_source.startsWith("player")) { - // player - QString key = _source; - key.remove("player/"); - m_map[_source] = key; - m_formatter[key] = FormatterType::NoFormat; - } else if (_source == "ps/running/count") { - // running processes count - m_map[_source] = "pscount"; - m_formatter["pscount"] = FormatterType::NoFormat; - } else if (_source == "ps/running/list") { - // list of running processes - m_map[_source] = "ps"; - m_formatter["ps"] = FormatterType::List; - } else if (_source == "ps/total/count") { - // total processes count - m_map[_source] = "pstot"; - m_formatter["pstot"] = FormatterType::NoFormat; - } else if (_source.startsWith("quotes")) { - // quotes - QString key = _source; - key.remove("quotes/"); - m_map[_source] = key; - m_formatter[key] = FormatterType::Quotes; - } else if (_source == "mem/swap/free") { - // free swap - // mb - m_map[_source] = "swapfreemb"; - m_formatter["swapfreemb"] = FormatterType::MemMBFormat; - // gb - m_map.insertMulti(_source, "swapfreegb"); - m_formatter["swapfreegb"] = FormatterType::MemGBFormat; - } else if (_source == "mem/swap/used") { - // used swap - // mb - m_map[_source] = "swapmb"; - m_formatter["swapmb"] = FormatterType::MemMBFormat; - // gb - m_map.insertMulti(_source, "swapgb"); - m_formatter["swapgb"] = FormatterType::MemGBFormat; - } else if (_source.startsWith("lmsensors/")) { - // temperature - int index = m_devices["temp"].indexOf(_source); - // HACK on DE initialization there are no units key - if (_units.isEmpty()) - return QStringList({QString("temp%1").arg(index)}); - if (index > -1) { - QString key = QString("temp%1").arg(index); - m_map[_source] = key; - m_formatter[key] = _units == "°C" ? FormatterType::Temperature - : FormatterType::Integer; - } - } else if (_source == "Local") { - // time - m_map[_source] = "time"; - m_formatter["time"] = FormatterType::Time; - // custom time - m_map.insertMulti(_source, "ctime"); - m_formatter["ctime"] = FormatterType::TimeCustom; - // ISO time - m_map.insertMulti(_source, "isotime"); - m_formatter["isotime"] = FormatterType::TimeISO; - // long time - m_map.insertMulti(_source, "longtime"); - m_formatter["longtime"] = FormatterType::TimeLong; - // short time - m_map.insertMulti(_source, "shorttime"); - m_formatter["shorttime"] = FormatterType::TimeShort; - // timestamp - m_map.insertMulti(_source, "tstime"); - m_formatter["tstime"] = FormatterType::Timestamp; - } else if (_source == "system/uptime") { - // uptime - m_map[_source] = "uptime"; - m_formatter["uptime"] = FormatterType::Uptime; - // custom uptime - m_map.insertMulti(_source, "cuptime"); - m_formatter["cuptime"] = FormatterType::UptimeCustom; - } else if (_source.startsWith("weather/temperature")) { - // temperature - QString key = _source; - key.remove("weather/"); - m_map[_source] = key; - m_formatter[key] = FormatterType::Temperature; - } else if (_source.startsWith("weather/")) { - // other weather - QString key = _source; - key.remove("weather/"); - m_map[_source] = key; - m_formatter[key] = FormatterType::NoFormat; - } else if (_source.startsWith("load/load")) { - // load source - QString key = _source; - key.remove("load/"); - m_map[_source] = key; - m_formatter[key] = FormatterType::Temperature; - } - - QStringList foundKeys = keysFromSource(_source); - - // rewrite formatters for custom ones - QStringList customFormattersKeys; - if (m_customFormatters) - customFormattersKeys = m_customFormatters->definedFormatters(); - qCInfo(LOG_AW) << "Looking for fprmatters" << foundKeys << "in" - << customFormattersKeys; - for (auto &key : foundKeys) { - if (!customFormattersKeys.contains(key)) - continue; - m_formatter[key] = FormatterType::Custom; - } - - // drop key from dictionary if no one user requested key required it - qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys; - bool required - = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), - [&_keys](const QString &key) { - return _keys.contains(key); - }); - if (!required) { - m_map.remove(_source); - for (auto &key : foundKeys) - m_formatter.remove(key); - } - - return keysFromSource(_source); + return m_mapper->registerSource(_source, _units, _keys); } diff --git a/sources/awesome-widget/plugin/awkeysaggregator.h b/sources/awesome-widget/plugin/awkeysaggregator.h index 6157dc0..d6d5d1a 100644 --- a/sources/awesome-widget/plugin/awkeysaggregator.h +++ b/sources/awesome-widget/plugin/awkeysaggregator.h @@ -22,9 +22,9 @@ #include #include -#include "version.h" class AWFormatterHelper; +class AWDataEngineMapper; class AWKeysAggregator : public QObject { @@ -37,6 +37,7 @@ class AWKeysAggregator : public QObject Q_PROPERTY(QString tempUnits MEMBER m_tempUnits WRITE setTempUnits); Q_PROPERTY(bool translate MEMBER m_translate WRITE setTranslate); +public: enum class FormatterType { // general formatters Custom, @@ -65,7 +66,6 @@ class AWKeysAggregator : public QObject UptimeCustom }; -public: explicit AWKeysAggregator(QObject *_parent = nullptr); virtual ~AWKeysAggregator(); void initFormatters(); @@ -88,15 +88,13 @@ public slots: private: float temperature(const float temp) const; AWFormatterHelper *m_customFormatters = nullptr; - QStringList m_timeKeys = QString(TIME_KEYS).split(','); + AWDataEngineMapper *m_mapper = nullptr; + QStringList m_timeKeys; // variables QString m_acOffline; QString m_acOnline; QString m_customTime; QString m_customUptime; - QHash m_devices; - QHash m_formatter; - QHash m_map; QString m_tempUnits; bool m_translate = false; }; diff --git a/sources/test/CMakeLists.txt b/sources/test/CMakeLists.txt index 045d319..b06bd64 100644 --- a/sources/test/CMakeLists.txt +++ b/sources/test/CMakeLists.txt @@ -47,6 +47,7 @@ foreach (TEST_MODULE ${TEST_MODULES}) ${CMAKE_CURRENT_SOURCE_DIR}/../awesome-widget/plugin/awcustomkeyshelper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../awesome-widget/plugin/awdataaggregator.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../awesome-widget/plugin/awdataengineaggregator.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/../awesome-widget/plugin/awdataenginemapper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../awesome-widget/plugin/awdbusadaptor.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../awesome-widget/plugin/awformatterhelper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../awesome-widget/plugin/awkeycache.cpp @@ -58,6 +59,7 @@ foreach (TEST_MODULE ${TEST_MODULES}) ${PROJECT_TRDPARTY_DIR}/fontdialog/fontdialog.cpp) elseif (TEST_MODULE MATCHES "awpatternfunctions") set(${TEST_MODULE}_SOURCES ${${TEST_MODULE}_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/../awesome-widget/plugin/awabstractpairhelper.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/../awesome-widget/plugin/awdataenginemapper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../awesome-widget/plugin/awformatterhelper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../awesome-widget/plugin/awkeysaggregator.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../awesome-widget/plugin/awpatternfunctions.cpp) From 081f7a3c88f443f8db8780f01ce7f03ea1a2b60b Mon Sep 17 00:00:00 2001 From: Evgeniy Alekseev Date: Thu, 3 Aug 2017 01:47:10 +0300 Subject: [PATCH 2/2] release 3.3.3 --- .docker/Dockerfile-ubuntu-amd64 | 12 +++++++++ ...ckerfile-ubuntu => Dockerfile-ubuntu-i386} | 2 +- .docker/build-ubuntu-package.sh | 16 ++++++++++++ CHANGELOG | 7 ++++++ packages/PKGBUILD | 4 +-- patches/fix-mpris-engine.patch | 25 ------------------- patches/qt5.5-qstringlist-and-qinfo.patch | 9 ++++--- sources/CMakeLists.txt | 2 +- .../awesome-widget/package/metadata.desktop | 2 +- .../desktop-panel/package/metadata.desktop | 2 +- 10 files changed, 46 insertions(+), 35 deletions(-) create mode 100644 .docker/Dockerfile-ubuntu-amd64 rename .docker/{Dockerfile-ubuntu => Dockerfile-ubuntu-i386} (90%) create mode 100755 .docker/build-ubuntu-package.sh delete mode 100644 patches/fix-mpris-engine.patch diff --git a/.docker/Dockerfile-ubuntu-amd64 b/.docker/Dockerfile-ubuntu-amd64 new file mode 100644 index 0000000..0484b44 --- /dev/null +++ b/.docker/Dockerfile-ubuntu-amd64 @@ -0,0 +1,12 @@ +FROM multiarch/ubuntu-core:amd64-xenial + +RUN apt-get update +# toolchain +RUN apt-get install -y cmake extra-cmake-modules g++ git gettext +# kf5 and qt5 libraries +RUN apt-get install -y libkf5i18n-dev libkf5notifications-dev libkf5service-dev \ + libkf5windowsystem-dev plasma-framework-dev qtbase5-dev qtdeclarative5-dev \ + plasma-framework + +# required by tests +RUN apt-get install -y xvfb diff --git a/.docker/Dockerfile-ubuntu b/.docker/Dockerfile-ubuntu-i386 similarity index 90% rename from .docker/Dockerfile-ubuntu rename to .docker/Dockerfile-ubuntu-i386 index ee841fa..4fa8923 100644 --- a/.docker/Dockerfile-ubuntu +++ b/.docker/Dockerfile-ubuntu-i386 @@ -1,4 +1,4 @@ -FROM ubuntu:16.04 +FROM multiarch/ubuntu-core:i386-xenial RUN apt-get update # toolchain diff --git a/.docker/build-ubuntu-package.sh b/.docker/build-ubuntu-package.sh new file mode 100755 index 0000000..a0427fa --- /dev/null +++ b/.docker/build-ubuntu-package.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +set -e + +rm -rf build-ubuntu +mkdir build-ubuntu + +# patches +git apply patches/qt5.6-qversionnumber.patch +git apply patches/qt5.5-qstringlist-and-qinfo.patch + +# build +cd build-ubuntu +cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_BUILD_TYPE=Optimization -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_FUTURE=ON -DBUILD_DEB_PACKAGE=ON ../sources +make package + diff --git a/CHANGELOG b/CHANGELOG index 481a189..252848f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,10 @@ +Ver.3.3.3: ++ add custom keys support (#101) +* DBus interface improvements +* rename tags (up|down|ps)total.* to (up|down|ps)tot.* +- fix issue with invalid (up|down)total($|kb) calculation (#127) +- fix issue with wrong applet identation (#125) + Ver.3.3.2: - fix bug with invalid DP colour configuration - fix bug with invalid HTML tags operation diff --git a/packages/PKGBUILD b/packages/PKGBUILD index 34e20d3..5ce62ec 100644 --- a/packages/PKGBUILD +++ b/packages/PKGBUILD @@ -2,7 +2,7 @@ pkgname=plasma5-applet-awesome-widgets _pkgname=awesome-widgets -pkgver=3.3.2 +pkgver=3.3.3 pkgrel=1 pkgdesc="Collection of minimalistic Plasmoids which look like Awesome WM widgets (ex-PyTextMonitor)" arch=('i686' 'x86_64') @@ -17,7 +17,7 @@ optdepends=("catalyst: for GPU monitor" makedepends=('cmake' 'extra-cmake-modules' 'python') source=(https://github.com/arcan1s/awesome-widgets/releases/download/V.${pkgver}/${_pkgname}-${pkgver}-src.tar.xz) install=${pkgname}.install -md5sums=('490c62c8085e532f9428f7534eff5ddd') +md5sums=('ce2413868cbb230e358e75a15975a1e5') backup=('etc/xdg/plasma-dataengine-extsysmon.conf') prepare() { diff --git a/patches/fix-mpris-engine.patch b/patches/fix-mpris-engine.patch deleted file mode 100644 index 342a32e..0000000 --- a/patches/fix-mpris-engine.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/sources/extsysmonsources/playersource.cpp b/sources/extsysmonsources/playersource.cpp -index b8a0ec1..17d90bc 100644 ---- a/sources/extsysmonsources/playersource.cpp -+++ b/sources/extsysmonsources/playersource.cpp -@@ -73,8 +73,10 @@ QString PlayerSource::getAutoMpris() const - { - QDBusMessage listServices = QDBusConnection::sessionBus().interface()->call( - QDBus::BlockWithGui, "ListNames"); -- if (listServices.arguments().isEmpty()) -+ if (listServices.arguments().isEmpty()) { -+ qCWarning(LOG_ESS) << "Could not find any DBus service"; - return ""; -+ } - QStringList arguments = listServices.arguments().first().toStringList(); - - for (auto &arg : arguments) { -@@ -353,7 +355,7 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString &_mpris) const - = QVariantList({"org.mpris.MediaPlayer2.Player", "Metadata"}); - QDBusMessage request = QDBusMessage::createMethodCall( - QString("org.mpris.MediaPlayer2.%1").arg(_mpris), -- "/org/mpris/MediaPlayer2", "", "Get"); -+ "/org/mpris/MediaPlayer2", "org.freedesktop.DBus.Properties", "Get"); - request.setArguments(args); - QDBusMessage response - = bus.call(request, QDBus::BlockWithGui, REQUEST_TIMEOUT); diff --git a/patches/qt5.5-qstringlist-and-qinfo.patch b/patches/qt5.5-qstringlist-and-qinfo.patch index 3b9e19d..c350a88 100644 --- a/patches/qt5.5-qstringlist-and-qinfo.patch +++ b/patches/qt5.5-qstringlist-and-qinfo.patch @@ -1,14 +1,15 @@ diff --git a/sources/awdebug.h b/sources/awdebug.h -index 8447c65..9f8e298 100644 +index 8447c65..4eef49a 100644 --- a/sources/awdebug.h +++ b/sources/awdebug.h -@@ -23,10 +23,14 @@ +@@ -23,10 +23,15 @@ #include "version.h" +#ifndef qCInfo +#define qCInfo qCDebug +#endif ++ + namespace AWDebug { @@ -19,7 +20,7 @@ index 8447c65..9f8e298 100644 "fatal}FF%{endif}][%{category}][%{function}] " "%{message}"; diff --git a/sources/awesome-widget/plugin/awkeysaggregator.h b/sources/awesome-widget/plugin/awkeysaggregator.h -index d29672e..f15a729 100644 +index d6d5d1a..ee301df 100644 --- a/sources/awesome-widget/plugin/awkeysaggregator.h +++ b/sources/awesome-widget/plugin/awkeysaggregator.h @@ -21,6 +21,7 @@ @@ -28,5 +29,5 @@ index d29672e..f15a729 100644 #include +#include - #include "version.h" + class AWFormatterHelper; diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index f012425..f7209f0 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -15,7 +15,7 @@ set(PROJECT_CONTACT "esalexeev@gmail.com") set(PROJECT_LICENSE "GPL3") set(PROJECT_VERSION_MAJOR "3") set(PROJECT_VERSION_MINOR "3") -set(PROJECT_VERSION_PATCH "2") +set(PROJECT_VERSION_PATCH "3") set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") # append git version if any set(PROJECT_COMMIT_SHA "Commit hash" CACHE INTERNAL "") diff --git a/sources/awesome-widget/package/metadata.desktop b/sources/awesome-widget/package/metadata.desktop index 286ef22..7a33208 100644 --- a/sources/awesome-widget/package/metadata.desktop +++ b/sources/awesome-widget/package/metadata.desktop @@ -20,7 +20,7 @@ X-Plasma-RemoteLocation= X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis X-KDE-PluginInfo-Email=esalexeev@gmail.com X-KDE-PluginInfo-Name=org.kde.plasma.awesomewidget -X-KDE-PluginInfo-Version=3.3.2 +X-KDE-PluginInfo-Version=3.3.3 X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ X-KDE-PluginInfo-Category=System Information X-KDE-PluginInfo-Depends= diff --git a/sources/desktop-panel/package/metadata.desktop b/sources/desktop-panel/package/metadata.desktop index daef904..8620000 100644 --- a/sources/desktop-panel/package/metadata.desktop +++ b/sources/desktop-panel/package/metadata.desktop @@ -20,7 +20,7 @@ X-Plasma-RemoteLocation= X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis X-KDE-PluginInfo-Email=esalexeev@gmail.com X-KDE-PluginInfo-Name=org.kde.plasma.desktoppanel -X-KDE-PluginInfo-Version=3.3.2 +X-KDE-PluginInfo-Version=3.3.3 X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ X-KDE-PluginInfo-Category=System Information X-KDE-PluginInfo-Depends=