diff --git a/sources/ext-sysmon/extsysmon.cpp b/sources/ext-sysmon/extsysmon.cpp index f3c513e..bf8c384 100644 --- a/sources/ext-sysmon/extsysmon.cpp +++ b/sources/ext-sysmon/extsysmon.cpp @@ -23,350 +23,383 @@ #include #include -#include -#include +#include ExtendedSysMon::ExtendedSysMon(QObject* parent, const QVariantList& args) - : Plasma::DataEngine(parent, args) + : Plasma::DataEngine(parent, args) { - Q_UNUSED(args) + Q_UNUSED(args) - setMinimumPollingInterval(333); - readConfiguration(); + setMinimumPollingInterval(333); + readConfiguration(); } + +QString ExtendedSysMon::getAllHdd() +{ + QProcess command; + QStringList devices; + QString qoutput = QString(""); + QString dev; + command.start("find /dev -name [hs]d[a-z]"); + command.waitForFinished(-1); + qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput()); + for (int i=0; itoUnicode(command.readAllStandardOutput()); + if (qoutput.toLower().contains("nvidia")) + gpu = QString("nvidia"); + else if (qoutput.toLower().contains("radeon")) + gpu = QString("ati"); + return gpu; +} + + QStringList ExtendedSysMon::sources() const { - QStringList source; - source.append(QString("gpu")); - source.append(QString("gputemp")); - source.append(QString("hddtemp")); - source.append(QString("player")); - source.append(QString("custom")); - return source; + QStringList source; + source.append(QString("gpu")); + source.append(QString("gputemp")); + source.append(QString("hddtemp")); + source.append(QString("pkg")); + source.append(QString("player")); + source.append(QString("ps")); + source.append(QString("custom")); + return source; } + bool ExtendedSysMon::readConfiguration() { - // pre-setup - FILE *f_out; - f_out = popen("lspci 2> /dev/null", "r"); - char device[256]; - QString dev; - while (fgets(device, 256, f_out) != NULL) { - dev = QString(device); - if (dev.toLower().contains("nvidia")) - gpuDev = QString("nvidia"); - else if (dev.toLower().contains("radeon")) - gpuDev = QString("ati"); - } - pclose(f_out); - - f_out = popen("ls -1 /dev/sd[a-z] 2> /dev/null ; ls -1 /dev/hd[a-z] 2> /dev/null", "r"); - while (fgets(device, 256, f_out) != NULL) { - dev = QString(device).split("\n")[0]; - if (dev[0] == '/') - hddDev.append(dev); - } - pclose(f_out); - - mpdAddress = QString("localhost"); - mpdPort = QString("6600"); - - customCommand = QString("wget -qO- http://ifconfig.me/ip"); - - QString fileStr; - // FIXME: define configuration file - QString confFileName = QString(getenv("HOME")) + QString("/.kde4/share/config/extsysmon.conf"); - QFile confFile(confFileName); - bool exists = confFile.open(QIODevice::ReadOnly); - if (!exists) { - confFileName = QString("/usr/share/config/extsysmon.conf"); - confFile.setFileName(confFileName); - exists = confFile.open(QIODevice::ReadOnly); - if (!exists) - return false; - } - - while (true) { - fileStr = QString(confFile.readLine()); - if (fileStr[0] != '#') { - if (fileStr.split(QString("="), QString::SkipEmptyParts).count() == 2) { - if (fileStr.split(QString("="), QString::SkipEmptyParts)[0] == QString("GPUDEV")) { - if (fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed() == QString("ati")) - gpuDev = fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed(); - else if (fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed() == QString("nvidia")) - gpuDev = fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed(); - else if (fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed() != QString("auto")) - gpuDev = QString("ignore"); - } - else if (fileStr.split(QString("="), QString::SkipEmptyParts)[0] == QString("HDDDEV")) { - if (fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed() != QString("all")) { - hddDev.clear(); - for (int i=0; itoUnicode(command.readAllStandardOutput()).trimmed(); + return qoutput; +} + + +float ExtendedSysMon::getGpu(const QString device) +{ + float gpu = 0.0; + if ((device != QString("nvidia")) && (device != QString("ati"))) + return gpu; + QProcess command; + QString qoutput; + + if (device == QString("nvidia")) { + command.start(QString("nvidia-smi -q -d UTILIZATION")); + command.waitForFinished(-1); + qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput()); + for (int i=0; itoUnicode(command.readAllStandardOutput()); + for (int i=0; itoUnicode(command.readAllStandardOutput()); + for (int i=0; itoUnicode(command.readAllStandardOutput()); + for (int i=0; itoUnicode(command.readAllStandardOutput()).trimmed(); + if (qoutput.split(QChar(':'), QString::SkipEmptyParts).count() >= 3) { + QString temp = qoutput.split(QChar(':'), QString::SkipEmptyParts)[2]; + temp.remove(QChar(0260)).remove(QChar('C')); + hddTemp = temp.toFloat(); + } + return hddTemp; +} + + +QStringList ExtendedSysMon::getPlayerInfo(const QString playerName, + const QString mpdAddress, + const QString mpdPort) +{ + QStringList info; + // album + info.append(QString("unknown")); + // artist + info.append(QString("unknown")); + // progress + info.append(QString("0")); + // duration + info.append(QString("0")); + // title + info.append(QString("unknown")); + if ((playerName != QString("amarok")) || + (playerName != QString("mpd")) || + (playerName != QString("qmmp"))) + return info; + QProcess command; + QString qoutput = QString(""); + QString qstr; + if (playerName == QString("amarok")) { + // amarok + command.start("qdbus org.kde.amarok /Player GetMetadata"); + command.waitForFinished(-1); + qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput()); + for (int i=0; i 1) { + if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("album")) + info[0] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); + else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("artist")) + info[1] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); + else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("time")) + info[3] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); + else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("title")) + info[4] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); + } + } + command.start("qdbus org.kde.amarok /Player PositionGet"); + command.waitForFinished(-1); + qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput()); + for (int i=0; itoUnicode(command.readAllStandardOutput()); + for (int i=0; i 1) { + if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Album")) + info[0] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); + else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Artist")) + info[1] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); + else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("time")) { + info[3] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed().split(QString(":"))[0]; + info[2] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed().split(QString(":"))[1]; + } + else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Title")) + info[4] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); + } + } + } + else if (playerName == QString("qmmp")) { + // qmmp + command.start("qmmp --status"); + command.waitForFinished(-1); + qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput()); + for (int i=0; i /dev/null | grep Gpu | tail -n1", "r"); - fgets (output, 256, f_out); - if ((output[0] == '\0') || - (QString(output).split(QString(" "), QString::SkipEmptyParts).count() < 2)) - value = QString(" N\\A"); - else { - out = QString(output).split(QString(" "), QString::SkipEmptyParts)[2]; - sprintf (val, "%5.1f", out.left(out.count()-2).toFloat(&ok)); - value = QString(val); - } - pclose(f_out); + QString key; + if (source == QString("gpu")) { + key = QString("GPU"); + float value = getGpu(configuration[QString("GPUDEV")]); + setData(source, key, value); } - else if (gpuDev == QString("ati")) { - f_out = popen("aticonfig --od-getclocks 2> /dev/null | grep load | tail -n1", "r"); - fgets (output, 256, f_out); - if ((output[0] == '\0') || - (QString(output).split(QString(" "), QString::SkipEmptyParts).count() < 3)) - value = QString(" N\\A"); - else { - out = QString(output).split(QString(" "), QString::SkipEmptyParts)[3]; - sprintf (val, "%5.1f", out.left(out.count()-2).toFloat(&ok)); - value = QString(val); - } - pclose(f_out); + else if (source == QString("gputemp")) { + key = QString("GPUTemp"); + float value = getGpuTemp(configuration[QString("GPUDEV")]); + setData(source, key, value); } - else { - value = QString(" N\\A"); - } - if (ok == false) - value = QString(" N\\A"); - value = value.split(QString(","), QString::SkipEmptyParts).join(QString(".")); - setData(source, key, value); - } - else if (source == QString("gputemp")) { - key = QString("GPUTemp"); - if (gpuDev == QString("nvidia")) { - f_out = popen("nvidia-smi -q -d TEMPERATURE 2> /dev/null | grep Gpu | tail -n1", "r"); - fgets (output, 256, f_out); - if ((output[0] == '\0') || - (QString(output).split(QString(" "), QString::SkipEmptyParts).count() < 2)) - value = QString(" N\\A"); - else { - out = QString(output).split(QString(" "), QString::SkipEmptyParts)[2]; - sprintf (val, "%4.1f", out.toFloat(&ok)); - value = QString(val); - } - pclose(f_out); - } - else if (gpuDev == QString("ati")) { - f_out = popen("aticonfig --od-gettemperature 2> /dev/null | grep Temperature | tail -n1", "r"); - fgets (output, 256, f_out); - if ((output[0] == '\0') || - (QString(output).split(QString(" "), QString::SkipEmptyParts).count() < 4)) - value = QString(" N\\A"); - else { - out = QString(output).split(QString(" "), QString::SkipEmptyParts)[4]; - sprintf (val, "%4.1f", out.toFloat(&ok)); - value = QString(val); - } - pclose(f_out); - } - else { - value = QString(" N\\A"); - } - if (ok == false) - value = QString(" N\\A"); - value = value.split(QString(","), QString::SkipEmptyParts).join(QString(".")); - setData(source, key, value); - } - else if (source == QString("hddtemp")) { - char command[256], *dev; - QByteArray qb; - for (int i=0; i /dev/null", dev); - f_out = popen(command, "r"); - fgets(output, 256, f_out); - if ((output[0] == '\0') || - (QString(output).split(QString(":"), QString::SkipEmptyParts).count() < 3)) - value = QString(" N\\A"); - else { - out = QString(output).split(QString(":"), QString::SkipEmptyParts)[2]; - sprintf (val, "%4.1f", out.left(out.count()-4).toFloat(&ok)); - value = QString(val); - } - pclose(f_out); - if (ok == false) - value = QString(" N\\A"); - value = value.split(QString(","), QString::SkipEmptyParts).join(QString(".")); - setData(source, hddDev[i], value); - } - } - else if (source == QString("player")) { - QProcess player; - QString qoutput; - QString value_album, value_artist, value_progress, value_duration, qstr; - // qmmp - qoutput = QString(""); - value = QString("N\\A"); - value_album = QString("N\\A"); - value_artist = QString("N\\A"); - value_progress = QString("0"); - value_duration = QString("0"); - player.start("qmmp --status"); - player.waitForFinished(-1); - qoutput = QTextCodec::codecForMib(106)->toUnicode(player.readAllStandardOutput()); - for (int i=0; itoUnicode(player.readAllStandardOutput()); - for (int i=0; i 1) { - if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("album")) - value_album = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("artist")) - value_artist = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("time")) - value_duration = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("title")) - value = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - } + else if (source == QString("player")) { + QStringList value; + // amarok + value = getPlayerInfo(QString("amarok")); + key = QString("amarok_album"); + setData(source, key, value[0]); + key = QString("amarok_artist"); + setData(source, key, value[1]); + key = QString("amarok_progress"); + setData(source, key, value[2]); + key = QString("amarok_duration"); + setData(source, key, value[3]); + key = QString("amarok_title"); + setData(source, key, value[4]); + // mpd + value = getPlayerInfo(QString("mpd"), + configuration[QString("MPDADDRESS")], + configuration[QString("MPDPORT")]); + key = QString("mpd_album"); + setData(source, key, value[0]); + key = QString("mpd_artist"); + setData(source, key, value[1]); + key = QString("mpd_progress"); + setData(source, key, value[2]); + key = QString("mpd_duration"); + setData(source, key, value[3]); + key = QString("mpd_title"); + setData(source, key, value[4]); + // qmmp + value = getPlayerInfo(QString("qmmp")); + key = QString("qmmp_album"); + setData(source, key, value[0]); + key = QString("qmmp_artist"); + setData(source, key, value[1]); + key = QString("qmmp_progress"); + setData(source, key, value[2]); + key = QString("qmmp_duration"); + setData(source, key, value[3]); + key = QString("qmmp_title"); + setData(source, key, value[4]); } - player.start("qdbus org.kde.amarok /Player PositionGet"); - player.waitForFinished(-1); - qoutput = player.readAllStandardOutput(); - for (int i=0; i /dev/null\"", \ - mpdAddress.toUtf8().data(), mpdPort.toUtf8().data()); - qoutput = QString(""); - player.start(QString(commandStr)); - player.waitForFinished(-1); - qoutput = QTextCodec::codecForMib(106)->toUnicode(player.readAllStandardOutput()); - for (int i=0; i 1) { - if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Album")) - value_album = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Artist")) - value_artist = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("time")) { - value_duration = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed().split(QString(":"))[0]; - value_progress = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed().split(QString(":"))[1]; - } - else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Title")) - value = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - } - } - key = QString("mpd_album"); - setData(source, key, value_album); - key = QString("mpd_artist"); - setData(source, key, value_artist); - key = QString("mpd_progress"); - setData(source, key, value_progress); - key = QString("mpd_duration"); - setData(source, key, value_duration); - key = QString("mpd_title"); - setData(source, key, value); - } - else if (source == QString("custom")) { - QProcess custom; - custom.start(QString("bash -c \"") + QString(customCommand) + QString("\"")); - custom.waitForFinished(-1); - value = QTextCodec::codecForMib(106)->toUnicode(custom.readAllStandardOutput()).trimmed(); - key = QString("custom"); - setData(source, key, value); - } - return true; + return true; } + K_EXPORT_PLASMA_DATAENGINE(extsysmon, ExtendedSysMon) #include "extsysmon.moc" diff --git a/sources/ext-sysmon/extsysmon.h b/sources/ext-sysmon/extsysmon.h index f59da75..fb59c30 100644 --- a/sources/ext-sysmon/extsysmon.h +++ b/sources/ext-sysmon/extsysmon.h @@ -22,22 +22,31 @@ class ExtendedSysMon : public Plasma::DataEngine { - Q_OBJECT + Q_OBJECT public: - ExtendedSysMon(QObject *parent, const QVariantList &args); + ExtendedSysMon(QObject *parent, const QVariantList &args); + // update functions + QString getCustomCmd(const QString cmd); + float getGpu(const QString device); + float getGpuTemp(const QString device); + float getHddTemp(const QString device); + QStringList getPlayerInfo(const QString playerName, + const QString mpdAddress = 0, + const QString mpdPort = 0); protected: - bool sourceRequestEvent(const QString &name); - bool updateSourceEvent(const QString &source); - bool readConfiguration(); - QStringList sources() const; -// main configuration - QStringList hddDev; - QString gpuDev; - QString mpdAddress; - QString mpdPort; - QString customCommand; + bool readConfiguration(); + bool sourceRequestEvent(const QString &name); + bool updateSourceEvent(const QString &source); + QStringList sources() const; + +private: + // configuration + QMap configuration; + // reread configuration + QString getAllHdd(); + QString getAutoGpu(); }; #endif /* EXTSYSMON_H */ diff --git a/sources/ptm/contents/code/configdef.py b/sources/ptm/contents/code/configdef.py index 1f61e84..0079a44 100644 --- a/sources/ptm/contents/code/configdef.py +++ b/sources/ptm/contents/code/configdef.py @@ -81,6 +81,7 @@ class ConfigDefinition: deConfigFile.write("MPDADDRESS=" + str(self.configpage.ui.lineEdit_mpdaddress.text()) + "\n") deConfigFile.write("MPDPORT=" + str(self.configpage.ui.spinBox_mpdport.value()) + "\n") deConfigFile.write("CUSTOM=" + str(self.configpage.ui.lineEdit_customCommand.text()) + "\n") + deConfigFile.write("PKGCMD=" + str(self.configpage.ui.comboBox_pkgCommand.currentText()) + "\n") except: pass @@ -173,7 +174,7 @@ class ConfigDefinition: self.configpage.ui.kcolorcombo_up.setColor(QColor(str(settings.get('up_color', '#ff00ff')))) deSettings = {'GPUDEV':'auto', 'HDDDEV':'all', 'MPDADDRESS':'localhost', - 'MPDPORT':'6600', 'CUSTOM':'wget -qO- http://ifconfig.me/ip'} + 'MPDPORT':'6600', 'CUSTOM':'wget -qO- http://ifconfig.me/ip', 'PKGCMD':'pacman -Qu'} dataengineConfig = unicode(KGlobal.dirs().localkdedir()) + "/share/config/extsysmon.conf" try: with open(dataengineConfig, 'r') as deConfigFile: @@ -197,6 +198,8 @@ class ConfigDefinition: self.configpage.ui.spinBox_mpdport.setValue(int(deSettings['MPDPORT'])) self.configpage.ui.spinBox_mpdport.setValue(int(deSettings['MPDPORT'])) self.configpage.ui.lineEdit_customCommand.setText(deSettings['CUSTOM']) + index = self.configpage.ui.comboBox_pkgCommand.findText(deSettings['PKGCMD']) + self.configpage.ui.comboBox_pkgCommand.setCurrentIndex(index) labelOrder = str(settings.get('label_order', '1345')) for label in self.defaults['order'].keys(): diff --git a/sources/ptm/contents/code/configwindow.py b/sources/ptm/contents/code/configwindow.py index 21f90ee..745f6b1 100644 --- a/sources/ptm/contents/code/configwindow.py +++ b/sources/ptm/contents/code/configwindow.py @@ -40,7 +40,8 @@ class ConfigWindow(QWidget): 'hdd':self.ui.checkBox_hdd, 'hddtemp':self.ui.checkBox_hddTemp, 'mem':self.ui.checkBox_mem, 'net':self.ui.checkBox_net, 'swap':self.ui.checkBox_swap, 'temp':self.ui.checkBox_temp, - 'uptime':self.ui.checkBox_uptime, 'player':self.ui.checkBox_player, + 'uptime':self.ui.checkBox_uptime, 'pkg':self.ui.checkBox_pkg, + 'player':self.ui.checkBox_player, 'ps':self.ui.checkBox_ps, 'time':self.ui.checkBox_time} self.lineedits = {'bat':self.ui.lineEdit_bat, 'cpu':self.ui.lineEdit_cpu, 'cpuclock':self.ui.lineEdit_cpuclock, 'custom':self.ui.lineEdit_custom, @@ -48,7 +49,8 @@ class ConfigWindow(QWidget): 'hdd':self.ui.lineEdit_hdd, 'hddtemp':self.ui.lineEdit_hddTemp, 'mem':self.ui.lineEdit_mem, 'net':self.ui.lineEdit_net, 'swap':self.ui.lineEdit_swap, 'temp':self.ui.lineEdit_temp, - 'uptime':self.ui.lineEdit_uptime, 'player':self.ui.lineEdit_player, + 'uptime':self.ui.lineEdit_uptime, 'pkg':self.ui.lineEdit_pkg, + 'player':self.ui.lineEdit_player, 'ps':self.ui.lineEdit_ps, 'time':self.ui.lineEdit_time} self.sliders = {'bat':self.ui.slider_bat, 'cpu':self.ui.slider_cpu, 'cpuclock':self.ui.slider_cpuclock, 'custom':self.ui.slider_custom, @@ -56,7 +58,8 @@ class ConfigWindow(QWidget): 'hdd':self.ui.slider_hdd, 'hddtemp':self.ui.slider_hddTemp, 'mem':self.ui.slider_mem, 'net':self.ui.slider_net, 'swap':self.ui.slider_swap, 'temp':self.ui.slider_temp, - 'uptime':self.ui.slider_uptime, 'player':self.ui.slider_player, + 'uptime':self.ui.slider_uptime, 'pkg':self.ui.slider_pkg, + 'player':self.ui.slider_player, 'ps':self.ui.slider_ps, 'time':self.ui.slider_time} QObject.connect(self.ui.checkBox_netdev, SIGNAL("stateChanged(int)"), self.setNetdevEnabled) diff --git a/sources/ptm/contents/code/dataengine.py b/sources/ptm/contents/code/dataengine.py index 2f688f2..1476eb1 100644 --- a/sources/ptm/contents/code/dataengine.py +++ b/sources/ptm/contents/code/dataengine.py @@ -66,6 +66,9 @@ class DataEngine: dataEngines['system'].connectSource("network/interfaces/" + names['net'] + "/receiver/data", self.parent, interval) if (bools['player'] > 0): dataEngines['ext'].connectSource("player", self.parent, interval) + if (bools['ps'] > 0): + dataEngines['system'].connectSource("ps", self.parent, interval) + dataEngines['system'].connectSource("pscount", self.parent, interval) if (bools['swap'] > 0): dataEngines['system'].connectSource("mem/swap/free", self.parent, interval) dataEngines['system'].connectSource("mem/swap/used", self.parent, interval) @@ -191,6 +194,17 @@ class DataEngine: updatedData['value']['progress'] = str(data[QString(u'qmmp_progress')].toUtf8()).decode("utf-8") updatedData['value']['time'] = str(data[QString(u'qmmp_duration')].toUtf8()).decode("utf-8") updatedData['value']['title'] = str(data[QString(u'qmmp_title')].toUtf8()).decode("utf-8") + elif (sourceName == "ps"): + print data[QString(u'value')] +# updatedData['name'] = "ps" +# updatedData['type'] = "num" +# value = data[QString(u'value')].toInt()[0] +# updatedData['value'] = value + elif (sourceName == "pscount"): + updatedData['name'] = "ps" + updatedData['type'] = "num" + value = data[QString(u'value')].toInt()[0] + updatedData['value'] = value elif (sourceName == "mem/swap/free"): updatedData['name'] = "swap" updatedData['type'] = "free" @@ -285,6 +299,9 @@ class DataEngine: dataEngines['system'].disconnectSource("network/interfaces/" + keys['net'] + "/receiver/data", self.parent) elif (name == "player"): dataEngines['ext'].disconnectSource("player", self.parent) + elif (name == "ps"): + dataEngines['system'].disconnectSource("ps", self.parent) + dataEngines['system'].disconnectSource("pscount", self.parent) elif (name == "swap"): dataEngines['system'].disconnectSource("mem/swap/used", self.parent) dataEngines['system'].disconnectSource("mem/swap/free", self.parent) diff --git a/sources/ptm/contents/code/main.py b/sources/ptm/contents/code/main.py index 91f44f6..9d376d2 100644 --- a/sources/ptm/contents/code/main.py +++ b/sources/ptm/contents/code/main.py @@ -132,29 +132,30 @@ class pyTextWidget(plasmascript.Applet): self.ptm['defaults']['confBool'] = {'bat':'batBool', 'cpu':'cpuBool', 'cpuclock':'cpuclockBool', 'custom':'customBool', 'gpu':'gpuBool', 'gputemp':'gputempBool', 'hdd':'hddBool', 'hddtemp':'hddtempBool', - 'mem':'memBool', 'net':'netBool', 'swap':'swapBool', 'temp':'tempBool', - 'uptime':'uptimeBool', 'player':'playerBool', 'time':'timeBool'} + 'mem':'memBool', 'net':'netBool', 'pkg':'pkgBool', 'player':'playerBool', + 'ps':'psBool', 'swap':'swapBool', 'temp':'tempBool', 'uptime':'uptimeBool', + 'time':'timeBool'} self.ptm['defaults']['confColor'] = {'cpu':'cpu_color', 'cpuclock':'cpuclock_color', 'down':'down_color', 'mem':'mem_color', 'swap':'swap_color', 'up':'up_color'} self.ptm['defaults']['confFormat'] = {'bat':'batFormat', 'cpu':'cpuFormat', 'cpuclock':'cpuclockFormat', 'custom':'customFormat', 'gpu':'gpuFormat', 'gputemp':'gputempFormat', 'hdd':'hddFormat', 'hddtemp':'hddtempFormat', - 'mem':'memFormat', 'net':'netFormat', 'player':'playerFormat', - 'swap':'swapFormat', 'temp':'tempFormat', 'time':'timeFormat', - 'uptime':'uptimeFormat'} + 'mem':'memFormat', 'net':'netFormat', 'pkg':'pkgFormat', + 'player':'playerFormat', 'ps':'psFormat', 'swap':'swapFormat', + 'temp':'tempFormat', 'time':'timeFormat', 'uptime':'uptimeFormat'} self.ptm['defaults']['bool'] = {'bat':0, 'cpu':2, 'cpuclock':0, 'custom':0, - 'gpu':0, 'gputemp':0, 'hdd':0, 'hddtemp':0, 'mem':2, 'net':2, 'player':0, - 'swap':2, 'temp':0, 'time':0, 'uptime':0} + 'gpu':0, 'gputemp':0, 'hdd':0, 'hddtemp':0, 'mem':2, 'net':2, 'pkg':0, + 'player':0, 'ps':0, 'swap':2, 'temp':0, 'time':0, 'uptime':0} self.ptm['defaults']['format'] = {'bat':'[bat: $bat%$ac]', 'cpu':'[cpu: $cpu%]', 'cpuclock':'[mhz: $cpucl]', 'custom':'[$custom]', 'gpu':'[gpu: $gpu%]', 'gputemp':'[gpu temp: $gputemp°C]', 'hdd':'[hdd: $hdd0%]', 'hddtemp':'[hdd temp: $hddtemp0°C]', 'mem':'[mem: $mem%]', - 'net':'[$netdev: $down/$upKB/s]', 'player':'[$artist - $title]', - 'swap':'[swap: $swap%]', 'temp':'[temp: $temp0°C]', - 'time':'[$time]', 'uptime':'[uptime: $uptime]'} - self.ptm['defaults']['order'] = {'6':'bat', '1':'cpu', '7':'cpuclock', 'f':'custom', '9':'gpu', - 'a':'gputemp', 'b':'hdd', 'c':'hddtemp', '3':'mem', '5':'net', '4':'swap', '2':'temp', - '8':'uptime', 'd':'player', 'e':'time'} + 'net':'[$netdev: $down/$upKB/s]', 'pkg':'[upgrade: $pkgcount]', + 'player':'[$artist - $title]', 'ps':'[proc: $pscount]', 'swap':'[swap: $swap%]', + 'temp':'[temp: $temp0°C]', 'time':'[$time]', 'uptime':'[uptime: $uptime]'} + self.ptm['defaults']['order'] = {'1':'cpu', '2':'temp', '3':'mem', '4':'swap', '5':'net', + '6':'bat', '7':'cpuclock', '8':'uptime', '9':'gpu', 'a':'gputemp', 'b':'hdd', + 'c':'hddtemp', 'd':'player', 'e':'time', 'f':'custom', 'g':'ps', 'h':'pkg'} # labels self.ptm['labels'] = {} self.ptm['layout'] = QGraphicsLinearLayout(Qt.Horizontal, self.applet) @@ -185,6 +186,7 @@ class pyTextWidget(plasmascript.Applet): self.ptm['values']['mem'] = {'app':0.0, 'used':0.0, 'free':1.0} self.ptm['values']['net'] = {"up":0.0, "down":0.0} self.ptm['values']['player'] = {} + self.ptm['values']['ps'] = {'list':[], 'num':0} self.ptm['values']['swap'] = {'used':0.0, 'free':1.0} self.ptm['values']['temp'] = {} # variables @@ -227,6 +229,8 @@ class pyTextWidget(plasmascript.Applet): self.memText() if (self.ptm['vars']['bools']['net'] > 0): self.netText() + if (self.ptm['vars']['bools']['ps'] > 0): + self.psText() if (self.ptm['vars']['bools']['swap'] > 0): self.swapText() if (self.ptm['vars']['bools']['temp'] > 0): @@ -416,6 +420,16 @@ class pyTextWidget(plasmascript.Applet): self.setText("net", text) + def psText(self): + """function to set ps text""" + line = self.ptm['vars']['formats']['ps'] + if (line.split('$pscount')[0] != 0): + ps = "%i" % (self.ptm['values']['ps']['num']) + line = line.split('$pscount')[0] + ps + line.split('$pscount')[1] + text = self.ptm['vars']['app']['format'][0] + line + self.ptm['vars']['app']['format'][1] + self.setText("ps", text) + + def swapText(self): """function to set swap text""" line = self.ptm['vars']['formats']['swap'] diff --git a/sources/ptm/contents/code/ptmnotify.py b/sources/ptm/contents/code/ptmnotify.py index 8a3268d..3228999 100644 --- a/sources/ptm/contents/code/ptmnotify.py +++ b/sources/ptm/contents/code/ptmnotify.py @@ -208,6 +208,8 @@ class PTMNotify: return self.createText("network") elif (name == "player"): return self.createText("player") + elif (name == "ps"): + return self.createText("system") elif (name == "swap"): return self.createText("memory") elif (name == "temp"): diff --git a/sources/ptm/contents/ui/configwindow.ui b/sources/ptm/contents/ui/configwindow.ui index 69d7924..fd80e5e 100644 --- a/sources/ptm/contents/ui/configwindow.ui +++ b/sources/ptm/contents/ui/configwindow.ui @@ -66,7 +66,7 @@ 0 0 526 - 552 + 624 @@ -114,7 +114,7 @@ $custom - custom time format 1 - 15 + 17 1 @@ -170,7 +170,7 @@ $custom - custom format 1 - 15 + 17 1 @@ -236,7 +236,7 @@ $cpuN - load CPU for core N, % 1 - 15 + 17 1 @@ -302,7 +302,7 @@ $cpuclN - CPU clock for core N, MHz 1 - 15 + 17 1 @@ -360,7 +360,7 @@ $cpuclN - CPU clock for core N, MHz 1 - 15 + 17 1 @@ -418,7 +418,7 @@ $cpuclN - CPU clock for core N, MHz 1 - 15 + 17 1 @@ -476,7 +476,7 @@ $cpuclN - CPU clock for core N, MHz 1 - 15 + 17 1 @@ -539,7 +539,7 @@ $memgb - RAM usage, GB 1 - 15 + 17 1 @@ -602,7 +602,7 @@ $swapgb - swap usage, GB 1 - 15 + 17 1 @@ -641,7 +641,9 @@ $swapgb - swap usage, GB - $hddN - usage for mount point N (from 0), %. Example: $hdd0 + $hddN - usage for mount point N (from 0), %. Example: $hdd0 +$hddmbN - usage for mount point N (from 0), MB. Example: $hddmb0 +$hddgbN - usage for mount point N (from 0), GB. Example: $hddgb0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -660,7 +662,7 @@ $swapgb - swap usage, GB 1 - 15 + 17 1 @@ -718,7 +720,7 @@ $swapgb - swap usage, GB 1 - 15 + 17 1 @@ -781,7 +783,7 @@ $netdev - current network device 1 - 15 + 17 1 @@ -840,7 +842,7 @@ $ac - AC status 1 - 15 + 17 1 @@ -902,7 +904,7 @@ $title - song title 1 - 15 + 17 1 @@ -920,6 +922,138 @@ $title - song title + + + + + + + 120 + 0 + + + + PS + + + true + + + true + + + + + + + $cpu - total load CPU, % +$cpu0 - load CPU for core 0, % +... +$cpu9 - load CPU for core 9, % +... +$cpuN - load CPU for core N, % + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 120 + 16777215 + + + + 1 + + + 17 + + + 1 + + + 15 + + + Qt::Horizontal + + + QSlider::TicksAbove + + + + + + + + + + + + 120 + 0 + + + + Package manager + + + true + + + true + + + + + + + $cpu - total load CPU, % +$cpu0 - load CPU for core 0, % +... +$cpu9 - load CPU for core 9, % +... +$cpuN - load CPU for core N, % + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 120 + 16777215 + + + + 1 + + + 17 + + + 1 + + + 16 + + + Qt::Horizontal + + + QSlider::TicksAbove + + + + + @@ -960,13 +1094,13 @@ $title - song title 1 - 15 + 17 1 - 15 + 17 Qt::Horizontal @@ -1012,7 +1146,7 @@ $title - song title 0 0 - 328 + 526 611 @@ -1522,8 +1656,8 @@ del - remove item 0 0 - 326 - 227 + 544 + 504 @@ -1856,8 +1990,8 @@ del - remove item 0 0 - 326 - 190 + 544 + 540 @@ -2190,8 +2324,8 @@ del - remove item 0 0 - 326 - 161 + 544 + 540 @@ -2382,6 +2516,56 @@ del - remove item + + + + + + + 120 + 0 + + + + Package manager + + + + + + + + 0 + 0 + + + + true + + + + pacman -Qu + + + + + apt-show-versions -u -b + + + + + aptitude search '~U' + + + + + yum list updates + + + + + + @@ -2457,6 +2641,12 @@ del - remove item checkBox_player lineEdit_player slider_player + checkBox_ps + lineEdit_ps + slider_ps + checkBox_pkg + lineEdit_pkg + slider_pkg checkBox_custom lineEdit_custom slider_custom