/*************************************************************************** * This file is part of pytextmonitor * * * * pytextmonitor 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. * * * * pytextmonitor 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 pytextmonitor. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ #include "extsysmon.h" #include #include #include #include #include ExtendedSysMon::ExtendedSysMon(QObject* parent, const QVariantList& args) : Plasma::DataEngine(parent, args) { Q_UNUSED(args) 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("pkg")); source.append(QString("player")); source.append(QString("ps")); source.append(QString("custom")); return source; } bool ExtendedSysMon::readConfiguration() { // pre-setup configuration[QString("GPUDEV")] = QString("auto"); configuration[QString("HDDDEV")] = QString("all"); configuration[QString("MPDADDRESS")] = QString("localhost"); configuration[QString("MPDPORT")] = QString("6600"); configuration[QString("CUSTOM")] = QString("wget -qO- http://ifconfig.me/ip"); configuration[QString("PKGCMD")] = QString("pacman -Qu"); QString fileStr; // FIXME: define configuration file QFile confFile(QString(getenv("HOME")) + QString("/.kde4/share/config/extsysmon.conf")); bool exists = confFile.open(QIODevice::ReadOnly); if (!exists) { confFile.setFileName("/usr/share/config/extsysmon.conf"); exists = confFile.open(QIODevice::ReadOnly); if (!exists) return false; } while (true) { fileStr = QString(confFile.readLine()).trimmed(); if (fileStr[0] != '#') { if (fileStr.contains(QString("="))) configuration[fileStr.split(QString("="))[0]] = fileStr.split(QString("="))[1]; } if (confFile.atEnd()) break; } confFile.close(); if (configuration[QString("GPUDEV")] == QString("auto")) configuration[QString("GPUDEV")] = getAutoGpu(); if (configuration[QString("HDDDEV")] == QString("all")) configuration[QString("HDDDEV")] = getAllHdd(); return true; } QString ExtendedSysMon::getCustomCmd(const QString cmd) { QProcess command; QString qoutput = QString(""); command.start(QString("bash -c \"") + cmd + QString("\"")); command.waitForFinished(-1); qoutput = QTextCodec::codecForMib(106)->toUnicode(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