diff --git a/sources/awesome-widget/package/contents/ui/main.qml b/sources/awesome-widget/package/contents/ui/main.qml index dfbf3c5..74ec204 100644 --- a/sources/awesome-widget/package/contents/ui/main.qml +++ b/sources/awesome-widget/package/contents/ui/main.qml @@ -95,7 +95,7 @@ Item { if (debug) console.debug("Update source", sourceName) systemmonitorDE.interval = plasmoid.configuration.interval - awKeys.setDataBySource(sourceName, data, settings) + awKeys.dataUpdateReceived(sourceName, data, settings) } onSourceAdded: { @@ -115,7 +115,7 @@ Item { if (debug) console.debug("Update source", sourceName) extsysmonDE.interval = plasmoid.configuration.interval - awKeys.setDataBySource(sourceName, data, settings) + awKeys.dataUpdateReceived(sourceName, data, settings) } } @@ -128,7 +128,7 @@ Item { onNewData: { if (debug) console.debug("Update source", sourceName) - awKeys.setDataBySource(sourceName, data, settings) + awKeys.dataUpdateReceived(sourceName, data, settings) } } diff --git a/sources/awesome-widget/package/contents/ui/widget.qml b/sources/awesome-widget/package/contents/ui/widget.qml index ee4a75d..91b73c0 100644 --- a/sources/awesome-widget/package/contents/ui/widget.qml +++ b/sources/awesome-widget/package/contents/ui/widget.qml @@ -68,6 +68,8 @@ Item { property alias cfg_text: textPattern.text + signal dropSource(string sourceName) + Column { id: pageColumn @@ -360,7 +362,7 @@ Item { onNewData: { if (debug) console.debug("Update source", sourceName) - awKeys.setDataBySource(sourceName, data, settings) + awKeys.dataUpdateReceived(sourceName, data, settings) } } @@ -372,7 +374,7 @@ Item { onNewData: { if (debug) console.debug("Update source", sourceName) - awKeys.setDataBySource(sourceName, data, settings) + awKeys.dataUpdateReceived(sourceName, data, settings) } } @@ -384,14 +386,22 @@ Item { onNewData: { if (debug) console.debug("Update source", sourceName) - awKeys.setDataBySource(sourceName, data, settings) + awKeys.dataUpdateReceived(sourceName, data, settings) } } Component.onCompleted: { if (debug) console.debug() + awKeys.dropSourceFromDataengine.connect(dropSource) // init submodule awKeys.initKeys(plasmoid.configuration.text) } + + onDropSource: { + if (debug) console.debug() + if (debug) console.debug("Source", sourceName) + + systemmonitorDE.disconnectSource(sourceName) + } } diff --git a/sources/awesome-widget/plugin/awkeys.cpp b/sources/awesome-widget/plugin/awkeys.cpp index 9236e08..529a90f 100644 --- a/sources/awesome-widget/plugin/awkeys.cpp +++ b/sources/awesome-widget/plugin/awkeys.cpp @@ -19,6 +19,7 @@ #include +#include #include #include #include @@ -337,308 +338,16 @@ QStringList AWKeys::getHddDevices() const } -void AWKeys::setDataBySource(const QString sourceName, const QVariantMap data, - const QVariantMap params) +void AWKeys::dataUpdateReceived(const QString sourceName, const QVariantMap data, + const QVariantMap params) { qCDebug(LOG_AW); qCDebug(LOG_AW) << "Source" << sourceName; qCDebug(LOG_AW) << "Data" << data; - if (sourceName == QString("update")) return emit(needToBeUpdated()); - - // regular expressions - QRegExp cpuRegExp = QRegExp(QString("cpu/cpu.*/TotalLoad")); - QRegExp cpuclRegExp = QRegExp(QString("cpu/cpu.*/clock")); - QRegExp hddrRegExp = QRegExp(QString("disk/.*/Rate/rblk")); - QRegExp hddwRegExp = QRegExp(QString("disk/.*/Rate/wblk")); - QRegExp mountFillRegExp = QRegExp(QString("partitions/.*/filllevel")); - QRegExp mountFreeRegExp = QRegExp(QString("partitions/.*/freespace")); - QRegExp mountUsedRegExp = QRegExp(QString("partitions/.*/usedspace")); - QRegExp netRegExp = QRegExp(QString("network/interfaces/.*/(receiver|transmitter)/data$")); - - if (sourceName == QString("battery")) { - // battery - foreach(QString key, data.keys()) { - if (key == QString("ac")) { - // notification - if ((values[QString("ac")] == params[QString("acOnline")].toString()) != data[QString("ac")].toBool()) { - if (data[QString("ac")].toBool()) - AWActions::sendNotification(QString("event"), i18n("AC online"), enablePopup); - else - AWActions::sendNotification(QString("event"), i18n("AC offline"), enablePopup); - } - // value - if (data[QString("ac")].toBool()) - values[QString("ac")] = params[QString("acOnline")].toString(); - else - values[QString("ac")] = params[QString("acOffline")].toString(); - } else - values[key] = QString("%1").arg(data[key].toFloat(), 3, 'f', 0); - } - } else if (sourceName == QString("cpu/system/TotalLoad")) { - // cpu - // notification - if ((data[QString("value")].toFloat() >= 90.0) && (values[QString("cpu")].toFloat() < 90.0)) - AWActions::sendNotification(QString("event"), i18n("High CPU load"), enablePopup); - // value - values[QString("cpu")] = QString("%1").arg(data[QString("value")].toFloat(), 5, 'f', 1); - } else if (sourceName.contains(cpuRegExp)) { - // cpus - QString number = sourceName; - number.remove(QString("cpu/cpu")).remove(QString("/TotalLoad")); - values[QString("cpu") + number] = QString("%1").arg(data[QString("value")].toFloat(), 5, 'f', 1); - } else if (sourceName == QString("cpu/system/AverageClock")) { - // cpucl - values[QString("cpucl")] = QString("%1").arg(data[QString("value")].toFloat(), 4, 'f', 0); - } else if (sourceName.contains(cpuclRegExp)) { - // cpucls - QString number = sourceName; - number.remove(QString("cpu/cpu")).remove(QString("/clock")); - values[QString("cpucl") + number] = QString("%1").arg(data[QString("value")].toFloat(), 4, 'f', 0); - } else if (sourceName == QString("custom")) { - // custom - foreach(QString key, data.keys()) values[key] = data[key].toString(); - } else if (sourceName == QString("desktop")) { - // desktops - values[QString("desktop")] = data[QString("currentName")].toString(); - values[QString("ndesktop")] = QString("%1").arg(data[QString("currentNumber")].toInt()); - values[QString("tdesktops")] = QString("%1").arg(data[QString("number")].toInt()); - } else if (sourceName.contains(hddrRegExp)) { - // read speed - QString device = sourceName; - device.remove(QString("/Rate/rblk")); - for (int i=0; i= 75.0) && (values[QString("gpu")].toFloat() < 75.0)) - AWActions::sendNotification(QString("event"), i18n("High GPU load"), enablePopup); - // value - values[QString("gpu")] = QString("%1").arg(data[QString("value")].toFloat(), 5, 'f', 1); - } else if (sourceName == QString("gputemp")) { - // gpu temperature - values[QString("gputemp")] = QString("%1").arg( - temperature(data[QString("value")].toFloat(), params[QString("tempUnits")].toString()), 4, 'f', 1); - } else if (sourceName.contains(mountFillRegExp)) { - // fill level - QString mount = sourceName; - mount.remove(QString("partitions")).remove(QString("/filllevel")); - for (int i=0; i= 90.0) && (values[QString("hdd%1").arg(i)].toFloat() < 90.0)) - AWActions::sendNotification(QString("event"), i18n("Free space on %1 less than 10%", mount), enablePopup); - values[QString("hdd%1").arg(i)] = QString("%1").arg(data[QString("value")].toFloat(), 5, 'f', 1); - break; - } - } else if (sourceName.contains(mountFreeRegExp)) { - // free space - QString mount = sourceName; - mount.remove(QString("partitions")).remove(QString("/freespace")); - for (int i=0; i= 90.0) && (values[QString("mem")].toFloat() < 90.0)) - AWActions::sendNotification(QString("event"), i18n("High memory usage"), enablePopup); - // value - values[QString("mem")] = QString("%1").arg(value, 5, 'f', 1); - } else if (sourceName == QString("netdev")) { - // network device - // notification - if (values[QString("netdev")] != data[QString("value")].toString()) - AWActions::sendNotification(QString("event"), i18n("Network device has been changed to %1", - data[QString("value")].toString()), - enablePopup); - // value - values[QString("netdev")] = data[QString("value")].toString(); - } else if (sourceName.contains(netRegExp)) { - // network speed - QString type = sourceName.contains(QString("receiver")) ? QString("down") : QString("up"); - // device name - QString device = sourceName.split(QChar('/'))[2]; - // values - float value = data[QString("value")].toFloat(); - QString simplifiedValue = value > 1000.0 ? - QString("%1").arg(value / 1024.0, 4, 'f', 1) : - QString("%1").arg(value, 4, 'f', 0); - // units - QString units; - if (translateStrings) - units = value > 1000.0 ? i18n("MB/s") : i18n("KB/s"); - else - units = value > 1000.0 ? QString("MB/s") : QString("KB/s"); - // update - for (int i=0; i 0.0) && (values[QString("swap")].toFloat() == 0.0)) - AWActions::sendNotification(QString("event"), i18n("Swap is used"), enablePopup); - // value - values[QString("swap")] = QString("%1").arg(value, 5, 'f', 1); - } else if (sourceName.startsWith(QString("lmsensors/"))) { - // temperature devices - for (int i=0; i QUEUE_LIMIT) { + qCWarning(LOG_AW) << "Messages queue" << queue-- << "more than limits" << QUEUE_LIMIT; + return; + } + + // regular expressions + QRegExp cpuRegExp = QRegExp(QString("cpu/cpu.*/TotalLoad")); + QRegExp cpuclRegExp = QRegExp(QString("cpu/cpu.*/clock")); + QRegExp hddrRegExp = QRegExp(QString("disk/.*/Rate/rblk")); + QRegExp hddwRegExp = QRegExp(QString("disk/.*/Rate/wblk")); + QRegExp mountFillRegExp = QRegExp(QString("partitions/.*/filllevel")); + QRegExp mountFreeRegExp = QRegExp(QString("partitions/.*/freespace")); + QRegExp mountUsedRegExp = QRegExp(QString("partitions/.*/usedspace")); + QRegExp netRegExp = QRegExp(QString("network/interfaces/.*/(receiver|transmitter)/data$")); + + if (sourceName == QString("battery")) { + // battery + foreach(QString key, data.keys()) { + if (key == QString("ac")) { + // notification + if ((values[QString("ac")] == params[QString("acOnline")].toString()) != data[QString("ac")].toBool()) { + if (data[QString("ac")].toBool()) + AWActions::sendNotification(QString("event"), i18n("AC online"), enablePopup); + else + AWActions::sendNotification(QString("event"), i18n("AC offline"), enablePopup); + } + // value + if (data[QString("ac")].toBool()) + values[QString("ac")] = params[QString("acOnline")].toString(); + else + values[QString("ac")] = params[QString("acOffline")].toString(); + } else + values[key] = QString("%1").arg(data[key].toFloat(), 3, 'f', 0); + } + } else if (sourceName == QString("cpu/system/TotalLoad")) { + // cpu + // notification + if ((data[QString("value")].toFloat() >= 90.0) && (values[QString("cpu")].toFloat() < 90.0)) + AWActions::sendNotification(QString("event"), i18n("High CPU load"), enablePopup); + // value + values[QString("cpu")] = QString("%1").arg(data[QString("value")].toFloat(), 5, 'f', 1); + } else if (sourceName.contains(cpuRegExp)) { + // cpus + QString number = sourceName; + number.remove(QString("cpu/cpu")).remove(QString("/TotalLoad")); + values[QString("cpu") + number] = QString("%1").arg(data[QString("value")].toFloat(), 5, 'f', 1); + } else if (sourceName == QString("cpu/system/AverageClock")) { + // cpucl + values[QString("cpucl")] = QString("%1").arg(data[QString("value")].toFloat(), 4, 'f', 0); + } else if (sourceName.contains(cpuclRegExp)) { + // cpucls + QString number = sourceName; + number.remove(QString("cpu/cpu")).remove(QString("/clock")); + values[QString("cpucl") + number] = QString("%1").arg(data[QString("value")].toFloat(), 4, 'f', 0); + } else if (sourceName == QString("custom")) { + // custom + foreach(QString key, data.keys()) values[key] = data[key].toString(); + } else if (sourceName == QString("desktop")) { + // desktops + values[QString("desktop")] = data[QString("currentName")].toString(); + values[QString("ndesktop")] = QString("%1").arg(data[QString("currentNumber")].toInt()); + values[QString("tdesktops")] = QString("%1").arg(data[QString("number")].toInt()); + } else if (sourceName.contains(hddrRegExp)) { + // read speed + QString device = sourceName; + device.remove(QString("/Rate/rblk")); + for (int i=0; i= 75.0) && (values[QString("gpu")].toFloat() < 75.0)) + AWActions::sendNotification(QString("event"), i18n("High GPU load"), enablePopup); + // value + values[QString("gpu")] = QString("%1").arg(data[QString("value")].toFloat(), 5, 'f', 1); + } else if (sourceName == QString("gputemp")) { + // gpu temperature + values[QString("gputemp")] = QString("%1").arg( + temperature(data[QString("value")].toFloat(), params[QString("tempUnits")].toString()), 4, 'f', 1); + } else if (sourceName.contains(mountFillRegExp)) { + // fill level + QString mount = sourceName; + mount.remove(QString("partitions")).remove(QString("/filllevel")); + for (int i=0; i= 90.0) && (values[QString("hdd%1").arg(i)].toFloat() < 90.0)) + AWActions::sendNotification(QString("event"), i18n("Free space on %1 less than 10%", mount), enablePopup); + values[QString("hdd%1").arg(i)] = QString("%1").arg(data[QString("value")].toFloat(), 5, 'f', 1); + break; + } + } else if (sourceName.contains(mountFreeRegExp)) { + // free space + QString mount = sourceName; + mount.remove(QString("partitions")).remove(QString("/freespace")); + for (int i=0; i= 90.0) && (values[QString("mem")].toFloat() < 90.0)) + AWActions::sendNotification(QString("event"), i18n("High memory usage"), enablePopup); + // value + values[QString("mem")] = QString("%1").arg(value, 5, 'f', 1); + } else if (sourceName == QString("netdev")) { + // network device + // notification + if (values[QString("netdev")] != data[QString("value")].toString()) + AWActions::sendNotification(QString("event"), i18n("Network device has been changed to %1", + data[QString("value")].toString()), + enablePopup); + // value + values[QString("netdev")] = data[QString("value")].toString(); + } else if (sourceName.contains(netRegExp)) { + // network speed + QString type = sourceName.contains(QString("receiver")) ? QString("down") : QString("up"); + // device name + QString device = sourceName.split(QChar('/'))[2]; + // values + float value = data[QString("value")].toFloat(); + QString simplifiedValue = value > 1000.0 ? + QString("%1").arg(value / 1024.0, 4, 'f', 1) : + QString("%1").arg(value, 4, 'f', 0); + // units + QString units; + if (translateStrings) + units = value > 1000.0 ? i18n("MB/s") : i18n("KB/s"); + else + units = value > 1000.0 ? QString("MB/s") : QString("KB/s"); + // update + for (int i=0; i 0.0) && (values[QString("swap")].toFloat() == 0.0)) + AWActions::sendNotification(QString("event"), i18n("Swap is used"), enablePopup); + // value + values[QString("swap")] = QString("%1").arg(value, 5, 'f', 1); + } else if (sourceName.startsWith(QString("lmsensors/"))) { + // temperature devices + for (int i=0; i *extScripts; ExtItemAggregator *extUpgrade; ExtItemAggregator *extWeather; + int queue = 0; QString pattern; QStringList foundBars, foundKeys, foundLambdas; QStringList timeKeys = QString(TIME_KEYS).split(QChar(',')); diff --git a/sources/libraries.cmake b/sources/libraries.cmake index cb34cf8..35c9ac0 100644 --- a/sources/libraries.cmake +++ b/sources/libraries.cmake @@ -1,13 +1,8 @@ +# required by translation packae find_package(Gettext REQUIRED) + +# main qt libraries find_package(Qt5 REQUIRED COMPONENTS Core DBus Network Script Qml Widgets) -find_package(ECM 0.0.11 REQUIRED NO_MODULE) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) -find_package(KF5 REQUIRED COMPONENTS I18n Notifications Plasma Service WindowSystem) - -include(KDEInstallDirs) -include(KDECMakeSettings) -include(KDECompilerSettings) - add_definitions( ${Qt5Core_DEFINITIONS} ${Qt5DBus_DEFINITIONS} ${Qt5Network_DEFINITIONS} ${Qt5Script_DEFINITIONS} ${Qt5Qml_DEFINITIONS} ${Qt5Widgets_DEFINITIONS} @@ -16,10 +11,18 @@ set(Qt_INCLUDE ${Qt5Core_INCLUDE_DIRS} ${Qt5DBus_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS} ${Qt5Script_INCLUDE_DIRS} ${Qt5Qml_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ) -set(Kf5_INCLUDE ${I18n_INCLUDE_DIR} ${Notifications_INCLUDE_DIR} ${Plasma_INCLUDE_DIR}) - set(Qt_LIBRARIES ${Qt5Core_LIBRARIES} ${Qt5DBus_LIBRARIES} ${Qt5Network_LIBRARIES} ${Qt5Script_LIBRARIES} ${Qt5Qml_LIBRARIES} ${Qt5Widgets_LIBRARIES} ) + +# kf5 libraries +find_package(ECM 0.0.11 REQUIRED NO_MODULE) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) +find_package(KF5 REQUIRED COMPONENTS I18n Notifications Plasma Service WindowSystem) +include(KDEInstallDirs) +include(KDECMakeSettings) +include(KDECompilerSettings) +set(Kf5_INCLUDE ${I18n_INCLUDE_DIR} ${Notifications_INCLUDE_DIR} ${Plasma_INCLUDE_DIR}) set(Kf5_LIBRARIES KF5::I18n KF5::Notifications KF5::Plasma KF5::WindowSystem) + diff --git a/sources/version.h.in b/sources/version.h.in index 958118c..c36d908 100644 --- a/sources/version.h.in +++ b/sources/version.h.in @@ -23,6 +23,8 @@ #define AWEWAPI 2 // available time keys #define TIME_KEYS "dddd,ddd,dd,d,MMMM,MMM,MM,M,yyyy,yy,hh,h,HH,H,mm,m,ss,s,t,ap,a,AP,A" +// messages queue limit +#define QUEUE_LIMIT 10 // links #define HOMEPAGE "https://arcanis.name/projects/awesome-widgets/"