/*************************************************************************** * 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 "awkeys.h" #include #include #include #include #include #include #include #include #include #include "awtooltip.h" #include "extscript.h" #include "extupgrade.h" #include "graphicalitem.h" #include "version.h" AWKeys::AWKeys(QObject *parent) : QObject(parent) { // debug QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); QString debugEnv = environment.value(QString("DEBUG"), QString("no")); debug = (debugEnv == QString("yes")); } AWKeys::~AWKeys() { if (debug) qDebug() << PDEBUG; } void AWKeys::initKeys(const QString pattern, const QMap params, const QMap tooltipParams) { if (debug) qDebug() << PDEBUG; // clear extScripts.clear(); extUpgrade.clear(); graphicalItems.clear(); counts.clear(); keys.clear(); foundBars.clear(); foundKeys.clear(); toolTip = nullptr; // init extScripts = getExtScripts(); extUpgrade = getExtUpgrade(); graphicalItems = getGraphicalItems(); counts = getCounts(params); keys = dictKeys(); foundBars = findGraphicalItems(pattern); foundKeys = findKeys(pattern); toolTip = new AWToolTip(this, tooltipParams); ready = true; } bool AWKeys::isDebugEnabled() { if (debug) qDebug() << PDEBUG; return debug; } bool AWKeys::isReady() { if (debug) qDebug() << PDEBUG; return ready; } QString AWKeys::parsePattern(const QString pattern) { if (debug) qDebug() << PDEBUG; QString parsed = pattern; parsed.replace(QString("$$"), QString("$\\$\\")); for (int i=0; iimage(valueByKey(foundBars[i]).toFloat())); parsed.replace(QString("$\\$\\"), QString("$$")); return parsed; } QPixmap AWKeys::toolTipImage() { if(debug) qDebug() << PDEBUG; return toolTip->image(); } QStringList AWKeys::dictKeys() { if (debug) qDebug() << PDEBUG; QStringList allKeys; // time allKeys.append(QString("time")); allKeys.append(QString("isotime")); allKeys.append(QString("shorttime")); allKeys.append(QString("longtime")); allKeys.append(QString("ctime")); // uptime allKeys.append(QString("uptime")); allKeys.append(QString("cuptime")); // cpuclock for (int i=counts[QString("cpu")].toInt()-1; i>=0; i--) allKeys.append(QString("cpucl") + QString::number(i)); allKeys.append(QString("cpucl")); // cpu for (int i=counts[QString("cpu")].toInt()-1; i>=0; i--) allKeys.append(QString("cpu") + QString::number(i)); allKeys.append(QString("cpu")); // temperature for (int i=counts[QString("temp")].toInt()-1; i>=0; i--) allKeys.append(QString("temp") + QString::number(i)); for (int i=counts[QString("fan")].toInt()-1; i>=0; i--) allKeys.append(QString("fan") + QString::number(i)); // gputemp allKeys.append(QString("gputemp")); // gpu allKeys.append(QString("gpu")); // memory allKeys.append(QString("memmb")); allKeys.append(QString("memgb")); allKeys.append(QString("memfreemb")); allKeys.append(QString("memfreegb")); allKeys.append(QString("memtotmb")); allKeys.append(QString("memtotgb")); allKeys.append(QString("memusedmb")); allKeys.append(QString("memusedgb")); allKeys.append(QString("mem")); // swap allKeys.append(QString("swapmb")); allKeys.append(QString("swapgb")); allKeys.append(QString("swapfreemb")); allKeys.append(QString("swapfreegb")); allKeys.append(QString("swaptotmb")); allKeys.append(QString("swaptotgb")); allKeys.append(QString("swap")); // hdd for (int i=counts[QString("mount")].toInt()-1; i>=0; i--) { allKeys.append(QString("hddmb") + QString::number(i)); allKeys.append(QString("hddgb") + QString::number(i)); allKeys.append(QString("hddfreemb") + QString::number(i)); allKeys.append(QString("hddfreegb") + QString::number(i)); allKeys.append(QString("hddtotmb") + QString::number(i)); allKeys.append(QString("hddtotgb") + QString::number(i)); allKeys.append(QString("hdd") + QString::number(i)); } // hdd speed for (int i=counts[QString("disk")].toInt()-1; i>=0; i--) { allKeys.append(QString("hddr") + QString::number(i)); allKeys.append(QString("hddw") + QString::number(i)); } // hdd temp for (int i=counts[QString("hddtemp")].toInt()-1; i>=0; i--) { allKeys.append(QString("hddtemp") + QString::number(i)); allKeys.append(QString("hddtemp") + QString::number(i)); } // network allKeys.append(QString("down")); allKeys.append(QString("up")); allKeys.append(QString("netdev")); // battery allKeys.append(QString("ac")); for (int i=counts[QString("bat")].toInt()-1; i>=0; i--) allKeys.append(QString("bat") + QString::number(i)); allKeys.append(QString("bat")); // player allKeys.append(QString("album")); allKeys.append(QString("artist")); allKeys.append(QString("duration")); allKeys.append(QString("progress")); allKeys.append(QString("title")); // ps allKeys.append(QString("pscount")); allKeys.append(QString("pstotal")); allKeys.append(QString("ps")); // package manager for (int i=counts[QString("pkg")].toInt()-1; i>=0; i--) allKeys.append(QString("pkgcount") + QString::number(i)); // custom for (int i=counts[QString("custom")].toInt()-1; i>=0; i--) allKeys.append(QString("custom") + QString::number(i)); // desktop allKeys.append(QString("desktop")); allKeys.append(QString("ndesktop")); allKeys.append(QString("tdesktops")); return allKeys; } QStringList AWKeys::extScriptsInfo() { if (debug) qDebug() << PDEBUG; QStringList info; for (int i=0; ifileName()); info.append(extScripts[i]->name()); info.append(extScripts[i]->comment()); info.append(extScripts[i]->executable()); info.append(QVariant(extScripts[i]->isActive()).toString()); } return info; } QStringList AWKeys::extUpgradeInfo() { if (debug) qDebug() << PDEBUG; QStringList info; for (int i=0; ifileName()); info.append(extUpgrade[i]->name()); info.append(extUpgrade[i]->comment()); info.append(extUpgrade[i]->executable()); info.append(QVariant(extUpgrade[i]->isActive()).toString()); } return info; } QStringList AWKeys::graphicalItemsInfo() { if (debug) qDebug() << PDEBUG; QStringList info; for (int i=0; ifileName()); info.append(graphicalItems[i]->name() + graphicalItems[i]->bar()); info.append(graphicalItems[i]->comment()); } return info; } void AWKeys::setDataBySource(const QString sourceName, const QMap data, const QMap params) { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Source" << sourceName; // 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 netRecRegExp = QRegExp(QString("network/interfaces/.*/receiver/data")); QRegExp netTransRegExp = QRegExp(QString("network/interfaces/.*/transmitter/data")); QRegExp tempRegExp = QRegExp(QString("lmsensors/.*")); if (sourceName == QString("battery")) { // battery for (int i=0; isetData(QString("bat"), data[data.keys()[i]].toFloat(), data[QString("ac")].toBool()); } } } else if (sourceName == QString("cpu/system/TotalLoad")) { // cpu values[QString("cpu")] = QString("%1").arg(data[QString("value")].toFloat(), 5, 'f', 1); toolTip->setData(QString("cpu"), data[QString("value")].toFloat()); } 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); toolTip->setData(QString("cpucl"), data[QString("value")].toFloat()); } 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 for (int i=0; isetData(QString("mem"), values[QString("mem")].toFloat()); } else if (sourceName == QString("netdev")) { // network device values[QString("netdev")] = data[QString("value")].toString(); } else if (sourceName.contains(netRecRegExp)) { // download speed QString device = sourceName; device.remove(QString("network/interfaces/")).remove(QString("/receiver/data")); if (device == networkDevice(params[QString("customNetdev")].toString())) { values[QString("down")] = QString("%1").arg(data[QString("value")].toFloat(), 4, 'f', 0); toolTip->setData(QString("down"), data[QString("value")].toFloat()); } } else if (sourceName.contains(netTransRegExp)) { // upload speed QString device = sourceName; device.remove(QString("network/interfaces/")).remove(QString("/transmitter/data")); if (device == networkDevice(params[QString("customNetdev")].toString())) { values[QString("up")] = QString("%1").arg(data[QString("value")].toFloat(), 4, 'f', 0); toolTip->setData(QString("up"), data[QString("value")].toFloat()); } } else if (sourceName == QString("pkg")) { // package manager for (int i=0; isetData(QString("swap"), values[QString("swap")].toFloat()); } else if (sourceName.contains(tempRegExp)) { // temperature devices if (data[QString("units")].toString() == QString("rpm")) { for (int i=0; i rawInterfaceList = QNetworkInterface::allInterfaces(); for (int i=0; iname() + graphicalItems[i]->bar()); orderedKeys.sort(); QStringList selectedKeys; for (int i=orderedKeys.count()-1; i>=0; i--) if (pattern.contains(QString("$") + orderedKeys[i])) { if (debug) qDebug() << PDEBUG << ":" << "Found key" << orderedKeys[i]; selectedKeys.append(orderedKeys[i]); } return selectedKeys; } QStringList AWKeys::findKeys(const QString pattern) { QStringList selectedKeys; for (int i=0; i AWKeys::getCounts(const QMap params) { if (debug) qDebug() << PDEBUG; QMap awCounts; awCounts[QString("cpu")] = numberCpus(); awCounts[QString("custom")] = extScripts.count(); awCounts[QString("disk")] = params[QString("disk")].toString().split(QString("@@")).count(); awCounts[QString("fan")] = params[QString("fanDevice")].toString().split(QString("@@")).count(); awCounts[QString("hddtemp")] = params[QString("hdd")].toString().split(QString("@@")).count(); awCounts[QString("mount")] = params[QString("mount")].toString().split(QString("@@")).count(); awCounts[QString("pkg")] = extUpgrade.count(); awCounts[QString("temp")] = params[QString("tempDevice")].toString().split(QString("@@")).count(); return awCounts; } QList AWKeys::getExtScripts() { if (debug) qDebug() << PDEBUG; QList externalScripts; // create directory at $HOME QString localDir = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QString("/plasma_dataengine_extsysmon/scripts"); QDir localDirectory; if ((!localDirectory.exists(localDir)) && (localDirectory.mkpath(localDir))) if (debug) qDebug() << PDEBUG << ":" << "Created directory" << localDir; QStringList dirs = QStandardPaths::locateAll(QStandardPaths::DataLocation, QString("plasma_dataengine_extsysmon/scripts"), QStandardPaths::LocateDirectory); QStringList names; for (int i=0; i AWKeys::getExtUpgrade() { if (debug) qDebug() << PDEBUG; QList externalUpgrade; // create directory at $HOME QString localDir = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QString("/plasma_dataengine_extsysmon/upgrade"); QDir localDirectory; if ((!localDirectory.exists(localDir)) && (localDirectory.mkpath(localDir))) if (debug) qDebug() << PDEBUG << ":" << "Created directory" << localDir; QStringList dirs = QStandardPaths::locateAll(QStandardPaths::DataLocation, QString("plasma_dataengine_extsysmon/upgrade"), QStandardPaths::LocateDirectory); QStringList names; for (int i=0; i AWKeys::getGraphicalItems() { if (debug) qDebug() << PDEBUG; QList items; // create directory at $HOME QString localDir = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QString("/plasma_applet_awesome-widget/desktops"); QDir localDirectory; if (localDirectory.mkpath(localDir)) if (debug) qDebug() << PDEBUG << ":" << "Created directory" << localDir; QStringList dirs = QStandardPaths::locateAll(QStandardPaths::DataLocation, QString("plasma_applet_awesome-widget/desktops"), QStandardPaths::LocateDirectory); QStringList names; for (int i=0; iname() + graphicalItems[i]->bar()) != tag) continue; item = graphicalItems[i]; break; } return item; } QStringList AWKeys::getTimeKeys() { if (debug) qDebug() << PDEBUG; QStringList keys; keys.append(QString("dddd")); keys.append(QString("ddd")); keys.append(QString("dd")); keys.append(QString("d")); keys.append(QString("MMMM")); keys.append(QString("MMM")); keys.append(QString("MM")); keys.append(QString("M")); keys.append(QString("yyyy")); keys.append(QString("yy")); keys.append(QString("hh")); keys.append(QString("h")); keys.append(QString("mm")); keys.append(QString("m")); keys.append(QString("ss")); keys.append(QString("s")); return keys; }