work with extendedsysmon

* fix mpris info getting
* replace qmap to qhash if possible
* some at()/[] repalcements
* add time logging
This commit is contained in:
arcan1s 2015-08-03 00:01:14 +03:00
parent 6fbe897b27
commit 7405b2ba1d
5 changed files with 115 additions and 110 deletions

View File

@ -17,7 +17,7 @@ optdepends=("amarok: for music player monitor"
"mpd: for music player monitor" "mpd: for music player monitor"
"nvidia-utils: for GPU monitor" "nvidia-utils: for GPU monitor"
"qmmp: for music player monitor") "qmmp: for music player monitor")
makedepends=('cmake' 'extra-cmake-modules') makedepends=('cmake' 'extra-cmake-modules' 'git')
source=(${_pkgname}::git+https://github.com/arcan1s/awesome-widgets/) source=(${_pkgname}::git+https://github.com/arcan1s/awesome-widgets/)
install=${pkgname}.install install=${pkgname}.install
md5sums=('SKIP') md5sums=('SKIP')

@ -1 +1 @@
Subproject commit 294a590bb966fd79eb2e93a7b02377ca57731cd5 Subproject commit 75e4a0df83478802bba53345486b42c56713fe09

View File

@ -16,7 +16,8 @@ include_directories(
file(GLOB SUBPROJECT_DESKTOP_IN *.desktop) file(GLOB SUBPROJECT_DESKTOP_IN *.desktop)
file(RELATIVE_PATH SUBPROJECT_DESKTOP ${CMAKE_SOURCE_DIR} ${SUBPROJECT_DESKTOP_IN}) file(RELATIVE_PATH SUBPROJECT_DESKTOP ${CMAKE_SOURCE_DIR} ${SUBPROJECT_DESKTOP_IN})
file(GLOB_RECURSE SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp) file(GLOB_RECURSE SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp
${PROJECT_TRDPARTY_DIR}/pdebug/*.cpp)
set(TASK_HEADER ${PROJECT_TRDPARTY_DIR}/task/task.h) set(TASK_HEADER ${PROJECT_TRDPARTY_DIR}/task/task.h)
file(GLOB SUBPROJECT_CONF *.conf) file(GLOB SUBPROJECT_CONF *.conf)

View File

@ -35,6 +35,7 @@
#include <QStandardPaths> #include <QStandardPaths>
#include <pdebug/pdebug.h> #include <pdebug/pdebug.h>
#include <pdebug/pdebug-time.h>
#include <task/taskadds.h> #include <task/taskadds.h>
#include "extquotes.h" #include "extquotes.h"
@ -48,6 +49,7 @@ ExtendedSysMon::ExtendedSysMon(QObject* parent, const QVariantList &args)
: Plasma::DataEngine(parent, args) : Plasma::DataEngine(parent, args)
{ {
Q_UNUSED(args) Q_UNUSED(args)
qInstallMessageHandler(debugString);
// debug // debug
QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); QProcessEnvironment environment = QProcessEnvironment::systemEnvironment();
@ -82,7 +84,7 @@ QStringList ExtendedSysMon::getAllHdd() const
QStringList allDevices = QDir(QString("/dev")).entryList(QDir::System, QDir::Name); QStringList allDevices = QDir(QString("/dev")).entryList(QDir::System, QDir::Name);
QStringList devices = allDevices.filter(QRegExp(QString("^[hms]d[a-z]$"))); QStringList devices = allDevices.filter(QRegExp(QString("^[hms]d[a-z]$")));
for (int i=0; i<devices.count(); i++) for (int i=0; i<devices.count(); i++)
devices[i] = QString("/dev/%1").arg(devices[i]); devices[i] = QString("/dev/%1").arg(devices.at(i));
if (debug) qDebug() << PDEBUG << ":" << "Device list" << devices; if (debug) qDebug() << PDEBUG << ":" << "Device list" << devices;
return devices; return devices;
@ -114,12 +116,12 @@ QString ExtendedSysMon::getAutoMpris() const
QDBusMessage listServices = QDBusConnection::sessionBus().interface()->call(QDBus::BlockWithGui, QString("ListNames")); QDBusMessage listServices = QDBusConnection::sessionBus().interface()->call(QDBus::BlockWithGui, QString("ListNames"));
if (listServices.arguments().isEmpty()) return QString(); if (listServices.arguments().isEmpty()) return QString();
QStringList arguments = listServices.arguments()[0].toStringList(); QStringList arguments = listServices.arguments().at(0).toStringList();
for (int i=0; i<arguments.count(); i++) { for (int i=0; i<arguments.count(); i++) {
if (debug) qDebug() << PDEBUG << ":" << "Service found" << arguments[i]; if (debug) qDebug() << PDEBUG << ":" << "Service found" << arguments.at(i);
if (!arguments[i].startsWith(QString("org.mpris.MediaPlayer2."))) continue; if (!arguments.at(i).startsWith(QString("org.mpris.MediaPlayer2."))) continue;
QString service = arguments[i]; QString service = arguments.at(i);
service.remove(QString("org.mpris.MediaPlayer2.")); service.remove(QString("org.mpris.MediaPlayer2."));
return service; return service;
} }
@ -160,7 +162,7 @@ void ExtendedSysMon::readConfiguration()
QString("plasma-dataengine-extsysmon.conf")); QString("plasma-dataengine-extsysmon.conf"));
if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName; if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName;
QSettings settings(fileName, QSettings::IniFormat); QSettings settings(fileName, QSettings::IniFormat);
QMap<QString, QString> rawConfig; QHash<QString, QString> rawConfig;
settings.beginGroup(QString("Configuration")); settings.beginGroup(QString("Configuration"));
rawConfig[QString("ACPIPATH")] = settings.value(QString("ACPIPATH"), QString("/sys/class/power_supply/")).toString(); rawConfig[QString("ACPIPATH")] = settings.value(QString("ACPIPATH"), QString("/sys/class/power_supply/")).toString();
@ -177,7 +179,7 @@ void ExtendedSysMon::readConfiguration()
} }
QMap<QString, QString> ExtendedSysMon::updateConfiguration(QMap<QString, QString> rawConfig) const QHash<QString, QString> ExtendedSysMon::updateConfiguration(QHash<QString, QString> rawConfig) const
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -200,9 +202,9 @@ QMap<QString, QString> ExtendedSysMon::updateConfiguration(QMap<QString, QString
QStringList devices; QStringList devices;
QRegExp diskRegexp = QRegExp("^/dev/[hms]d[a-z]$"); QRegExp diskRegexp = QRegExp("^/dev/[hms]d[a-z]$");
for (int i=0; i<deviceList.count(); i++) for (int i=0; i<deviceList.count(); i++)
if ((QFile::exists(deviceList[i])) && if ((QFile::exists(deviceList.at(i))) &&
(diskRegexp.indexIn(deviceList[i]) > -1)) (diskRegexp.indexIn(deviceList.at(i)) > -1))
devices.append(deviceList[i]); devices.append(deviceList.at(i));
if (devices.isEmpty()) if (devices.isEmpty())
rawConfig[QString("HDDDEV")] = allHddDevices.join(QChar(',')); rawConfig[QString("HDDDEV")] = allHddDevices.join(QChar(','));
else else
@ -215,17 +217,17 @@ QMap<QString, QString> ExtendedSysMon::updateConfiguration(QMap<QString, QString
for (int i=0; i<rawConfig.keys().count(); i++) for (int i=0; i<rawConfig.keys().count(); i++)
if (debug) qDebug() << PDEBUG << ":" << if (debug) qDebug() << PDEBUG << ":" <<
rawConfig.keys()[i] + QString("=") + rawConfig[rawConfig.keys()[i]]; rawConfig.keys().at(i) + QString("=") + rawConfig[rawConfig.keys().at(i)];
return rawConfig; return rawConfig;
} }
QVariantMap ExtendedSysMon::getBattery(const QString acpiPath) const QVariantHash ExtendedSysMon::getBattery(const QString acpiPath) const
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "ACPI path" << acpiPath; if (debug) qDebug() << PDEBUG << ":" << "ACPI path" << acpiPath;
QVariantMap battery; QVariantHash battery;
battery[QString("ac")] = false; battery[QString("ac")] = false;
battery[QString("bat")] = 0; battery[QString("bat")] = 0;
@ -244,8 +246,8 @@ QVariantMap ExtendedSysMon::getBattery(const QString acpiPath) const
QDir::Dirs | QDir::NoDotAndDotDot, QDir::Dirs | QDir::NoDotAndDotDot,
QDir::Name); QDir::Name);
for (int i=0; i<batDevices.count(); i++) { for (int i=0; i<batDevices.count(); i++) {
QFile currentLevelFile(QString("%1/%2/energy_now").arg(acpiPath).arg(batDevices[i])); QFile currentLevelFile(QString("%1/%2/energy_now").arg(acpiPath).arg(batDevices.at(i)));
QFile fullLevelFile(QString("%1/%2/energy_full").arg(acpiPath).arg(batDevices[i])); QFile fullLevelFile(QString("%1/%2/energy_full").arg(acpiPath).arg(batDevices.at(i)));
if ((currentLevelFile.open(QIODevice::ReadOnly)) && if ((currentLevelFile.open(QIODevice::ReadOnly)) &&
(fullLevelFile.open(QIODevice::ReadOnly))) { (fullLevelFile.open(QIODevice::ReadOnly))) {
float batCurrent = QString(currentLevelFile.readLine()).trimmed().toFloat(); float batCurrent = QString(currentLevelFile.readLine()).trimmed().toFloat();
@ -263,19 +265,18 @@ QVariantMap ExtendedSysMon::getBattery(const QString acpiPath) const
} }
QVariantMap ExtendedSysMon::getCurrentDesktop() const QVariantHash ExtendedSysMon::getCurrentDesktop() const
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
int number = KWindowSystem::currentDesktop(); int number = KWindowSystem::currentDesktop();
int total = KWindowSystem::numberOfDesktops(); int total = KWindowSystem::numberOfDesktops();
QVariantMap currentDesktop; QVariantHash currentDesktop;
currentDesktop[QString("currentName")] = KWindowSystem::desktopName(number); currentDesktop[QString("currentName")] = KWindowSystem::desktopName(number);
currentDesktop[QString("currentNumber")] = number; currentDesktop[QString("currentNumber")] = number;
QStringList list; currentDesktop[QString("list")] = QStringList();
for (int i=1; i<total+1; i++) for (int i=1; i<total+1; i++)
list.append(KWindowSystem::desktopName(i)); currentDesktop[QString("list")].toStringList().append(KWindowSystem::desktopName(i));
currentDesktop[QString("list")] = list.join(QString(";;"));
currentDesktop[QString("number")] = total; currentDesktop[QString("number")] = total;
return currentDesktop; return currentDesktop;
@ -303,7 +304,7 @@ float ExtendedSysMon::getGpu(const QString device) const
QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed();
if (configuration[QString("GPUDEV")] == QString("nvidia")) if (configuration[QString("GPUDEV")] == QString("nvidia"))
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) { for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
if (qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i].contains(QString("<gpu_util>"))) { if (qoutput.split(QChar('\n'), QString::SkipEmptyParts).at(i).contains(QString("<gpu_util>"))) {
QString load = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i] QString load = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i]
.remove(QString("<gpu_util>")) .remove(QString("<gpu_util>"))
.remove(QString("</gpu_util>")) .remove(QString("</gpu_util>"))
@ -313,8 +314,8 @@ float ExtendedSysMon::getGpu(const QString device) const
} }
else if (configuration[QString("GPUDEV")] == QString("ati")) else if (configuration[QString("GPUDEV")] == QString("ati"))
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) { for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
if (qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i].contains(QString("load"))) { if (qoutput.split(QChar('\n'), QString::SkipEmptyParts).at(i).contains(QString("load"))) {
QString load = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i] QString load = qoutput.split(QChar('\n'), QString::SkipEmptyParts).at(i)
.split(QChar(' '), QString::SkipEmptyParts)[3] .split(QChar(' '), QString::SkipEmptyParts)[3]
.remove(QChar('%')); .remove(QChar('%'));
value = load.toFloat(); value = load.toFloat();
@ -346,7 +347,7 @@ float ExtendedSysMon::getGpuTemp(const QString device) const
QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output); QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output);
if (configuration[QString("GPUDEV")] == QString("nvidia")) if (configuration[QString("GPUDEV")] == QString("nvidia"))
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) { for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
if (qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i].contains(QString("<gpu_temp>"))) { if (qoutput.split(QChar('\n'), QString::SkipEmptyParts).at(i).contains(QString("<gpu_temp>"))) {
QString temp = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i] QString temp = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i]
.remove(QString("<gpu_temp>")) .remove(QString("<gpu_temp>"))
.remove(QString("C</gpu_temp>")); .remove(QString("C</gpu_temp>"));
@ -355,9 +356,9 @@ float ExtendedSysMon::getGpuTemp(const QString device) const
} }
else if (configuration[QString("GPUDEV")] == QString("ati")) else if (configuration[QString("GPUDEV")] == QString("ati"))
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) { for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
if (qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i].contains(QString("Temperature"))) { if (qoutput.split(QChar('\n'), QString::SkipEmptyParts).at(i).contains(QString("Temperature"))) {
QString temp = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i] QString temp = qoutput.split(QChar('\n'), QString::SkipEmptyParts).at(i)
.split(QChar(' '), QString::SkipEmptyParts)[4]; .split(QChar(' '), QString::SkipEmptyParts).at(4);
value = temp.toFloat(); value = temp.toFloat();
} }
} }
@ -383,14 +384,14 @@ float ExtendedSysMon::getHddTemp(const QString cmd, const QString device) const
QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed();
if (smartctl) { if (smartctl) {
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) { for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
if (!qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i].startsWith(QString("194"))) continue; if (!qoutput.split(QChar('\n'), QString::SkipEmptyParts).at(i).startsWith(QString("194"))) continue;
if (qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i].split(QChar(' '), QString::SkipEmptyParts).count() < 9) break; if (qoutput.split(QChar('\n'), QString::SkipEmptyParts).at(i).split(QChar(' '), QString::SkipEmptyParts).count() < 9) break;
value = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i].split(QChar(' '), QString::SkipEmptyParts)[9].toFloat(); value = qoutput.split(QChar('\n'), QString::SkipEmptyParts).at(i).split(QChar(' '), QString::SkipEmptyParts).at(9).toFloat();
break; break;
} }
} else { } else {
if (qoutput.split(QChar(':'), QString::SkipEmptyParts).count() >= 3) { if (qoutput.split(QChar(':'), QString::SkipEmptyParts).count() >= 3) {
QString temp = qoutput.split(QChar(':'), QString::SkipEmptyParts)[2]; QString temp = qoutput.split(QChar(':'), QString::SkipEmptyParts).at(2);
temp.remove(QChar(0260)).remove(QChar('C')); temp.remove(QChar(0260)).remove(QChar('C'));
value = temp.toFloat(); value = temp.toFloat();
} }
@ -407,10 +408,10 @@ QString ExtendedSysMon::getNetworkDevice() const
QString device = QString("lo"); QString device = QString("lo");
QList<QNetworkInterface> rawInterfaceList = QNetworkInterface::allInterfaces(); QList<QNetworkInterface> rawInterfaceList = QNetworkInterface::allInterfaces();
for (int i=0; i<rawInterfaceList.count(); i++) for (int i=0; i<rawInterfaceList.count(); i++)
if ((rawInterfaceList[i].flags().testFlag(QNetworkInterface::IsUp)) && if ((rawInterfaceList.at(i).flags().testFlag(QNetworkInterface::IsUp)) &&
(!rawInterfaceList[i].flags().testFlag(QNetworkInterface::IsLoopBack)) && (!rawInterfaceList.at(i).flags().testFlag(QNetworkInterface::IsLoopBack)) &&
(!rawInterfaceList[i].flags().testFlag(QNetworkInterface::IsPointToPoint))) { (!rawInterfaceList.at(i).flags().testFlag(QNetworkInterface::IsPointToPoint))) {
device = rawInterfaceList[i].name(); device = rawInterfaceList.at(i).name();
break; break;
} }
@ -418,7 +419,7 @@ QString ExtendedSysMon::getNetworkDevice() const
} }
QVariantMap ExtendedSysMon::getPlayerInfo(const QString playerName, const QString mpdAddress, QVariantHash ExtendedSysMon::getPlayerInfo(const QString playerName, const QString mpdAddress,
const QString mpdPort, QString mpris) const const QString mpdPort, QString mpris) const
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -426,7 +427,7 @@ QVariantMap ExtendedSysMon::getPlayerInfo(const QString playerName, const QStrin
if (debug) qDebug() << PDEBUG << ":" << "MPD" << QString("%1:%2").arg(mpdAddress).arg(mpdPort); if (debug) qDebug() << PDEBUG << ":" << "MPD" << QString("%1:%2").arg(mpdAddress).arg(mpdPort);
if (debug) qDebug() << PDEBUG << ":" << "MPRIS" << mpris; if (debug) qDebug() << PDEBUG << ":" << "MPRIS" << mpris;
QVariantMap info; QVariantHash info;
info[QString("album")] = QString("unknown"); info[QString("album")] = QString("unknown");
info[QString("artist")] = QString("unknown"); info[QString("artist")] = QString("unknown");
info[QString("duration")] = QString("0"); info[QString("duration")] = QString("0");
@ -447,12 +448,12 @@ QVariantMap ExtendedSysMon::getPlayerInfo(const QString playerName, const QStrin
} }
QVariantMap ExtendedSysMon::getPlayerMpdInfo(const QString mpdAddress, const QString mpdPort) const QVariantHash ExtendedSysMon::getPlayerMpdInfo(const QString mpdAddress, const QString mpdPort) const
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "MPD" << QString("%1:%2").arg(mpdAddress).arg(mpdPort); if (debug) qDebug() << PDEBUG << ":" << "MPD" << QString("%1:%2").arg(mpdAddress).arg(mpdPort);
QVariantMap info; QVariantHash info;
info[QString("album")] = QString("unknown"); info[QString("album")] = QString("unknown");
info[QString("artist")] = QString("unknown"); info[QString("artist")] = QString("unknown");
info[QString("duration")] = QString("0"); info[QString("duration")] = QString("0");
@ -470,16 +471,16 @@ QVariantMap ExtendedSysMon::getPlayerMpdInfo(const QString mpdAddress, const QSt
QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed();
QString qstr = QString(""); QString qstr = QString("");
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) { for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
qstr = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i]; qstr = qoutput.split(QChar('\n'), QString::SkipEmptyParts).at(i);
if (qstr.split(QString(": "), QString::SkipEmptyParts).count() > 1) { if (qstr.split(QString(": "), QString::SkipEmptyParts).count() > 1) {
if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Album")) if (qstr.split(QString(": "), QString::SkipEmptyParts).at(0) == QString("Album"))
info[QString("album")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); info[QString("album")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Artist")) else if (qstr.split(QString(": "), QString::SkipEmptyParts).at(0) == QString("Artist"))
info[QString("artist")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); info[QString("artist")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("time")) { else if (qstr.split(QString(": "), QString::SkipEmptyParts).at(0) == QString("time")) {
info[QString("duration")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed().split(QString(":"))[0]; info[QString("duration")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed().split(QString(":"))[0];
info[QString("progress")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed().split(QString(":"))[1]; info[QString("progress")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed().split(QString(":"))[1];
} else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Title")) } else if (qstr.split(QString(": "), QString::SkipEmptyParts).at(0) == QString("Title"))
info[QString("title")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); info[QString("title")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
} }
} }
@ -488,57 +489,60 @@ QVariantMap ExtendedSysMon::getPlayerMpdInfo(const QString mpdAddress, const QSt
} }
QVariantMap ExtendedSysMon::getPlayerMprisInfo(const QString mpris) const QVariantHash ExtendedSysMon::getPlayerMprisInfo(const QString mpris) const
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << "MPRIS" << mpris; if (debug) qDebug() << PDEBUG << "MPRIS" << mpris;
QVariantMap info; QVariantHash info;
info[QString("album")] = QString("unknown"); info[QString("album")] = QString("unknown");
info[QString("artist")] = QString("unknown"); info[QString("artist")] = QString("unknown");
info[QString("duration")] = 0; info[QString("duration")] = 0;
info[QString("progress")] = 0; info[QString("progress")] = 0;
info[QString("title")] = QString("unknown"); info[QString("title")] = QString("unknown");
// init
QDBusArgument arg;
QDBusConnection bus = QDBusConnection::sessionBus(); QDBusConnection bus = QDBusConnection::sessionBus();
QDBusMessage response, request; // comes from the following request:
QVariantMap map; // qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2.Player Metadata
// or the same but using dbus-send:
// general information // dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata'
request = QDBusMessage::createMethodCall(QString("org.mpris.MediaPlayer2.%1").arg(mpris), QVariantList args = QVariantList() << QString("org.mpris.MediaPlayer2.Player") << QString("Metadata");
QString("/Player"), QDBusMessage request = QDBusMessage::createMethodCall(QString("org.mpris.MediaPlayer2.%1").arg(mpris),
QString(""), QString("/org/mpris/MediaPlayer2"),
QString("GetMetadata")); QString(""),
response = bus.call(request, QDBus::BlockWithGui); QString("Get"));
if (response.arguments().size() == 0) { request.setArguments(args);
QDBusMessage response = bus.call(request, QDBus::BlockWithGui);
if ((response.type() != QDBusMessage::ReplyMessage) || (response.arguments().isEmpty())) {
if (debug) qDebug() << PDEBUG << ":" << "Error message" << response.errorMessage(); if (debug) qDebug() << PDEBUG << ":" << "Error message" << response.errorMessage();
} else { } else {
arg = response.arguments()[0].value<QDBusArgument>(); // another portion of dirty magic
arg >> map; QVariantHash map = qdbus_cast<QVariantHash>(response.arguments().at(0)
info[QString("album")] = map[QString("album")]; .value<QDBusVariant>().variant()
info[QString("artist")] = map[QString("artist")]; .value<QDBusArgument>());
info[QString("duration")] = map[QString("time")]; info[QString("album")] = map.value(QString("xesam:album"), QString("unknown"));
info[QString("title")] = map[QString("title")]; // artist is array
info[QString("artist")] = map.value(QString("xesam:artist"), QString("unknown")).toString();
info[QString("duration")] = map.value(QString("mpris:length"), 0).toInt() / (1000 * 1000);
info[QString("title")] = map.value(QString("xesam:title"), QString("unknown"));
} }
// position // position
request = QDBusMessage::createMethodCall(QString("org.mpris.MediaPlayer2.%1").arg(mpris), args[1] = QString("Position");
QString("/Player"), request.setArguments(args);
QString(""),
QString("PositionGet"));
response = bus.call(request, QDBus::BlockWithGui); response = bus.call(request, QDBus::BlockWithGui);
if (response.arguments().size() == 0) { if ((response.type() != QDBusMessage::ReplyMessage) || (response.arguments().isEmpty())) {
if (debug) qDebug() << PDEBUG << ":" << "Error message" << response.errorMessage(); if (debug) qDebug() << PDEBUG << ":" << "Error message" << response.errorMessage();
} else } else
info[QString("progress")] = response.arguments()[0].toInt() / 1000; // this cast is simpler than the previous one ;)
info[QString("progress")] = response.arguments().at(0).value<QDBusVariant>()
.variant().toLongLong() / (1000 * 1000);
return info; return info;
} }
QVariantMap ExtendedSysMon::getPsStats() const QVariantHash ExtendedSysMon::getPsStats() const
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -548,16 +552,16 @@ QVariantMap ExtendedSysMon::getPsStats() const
QStringList running; QStringList running;
for (int i=0; i<directories.count(); i++) { for (int i=0; i<directories.count(); i++) {
QFile statusFile(QString("/proc/%1/status").arg(directories[i])); QFile statusFile(QString("/proc/%1/status").arg(directories.at(i)));
if (!statusFile.open(QIODevice::ReadOnly)) continue; if (!statusFile.open(QIODevice::ReadOnly)) continue;
QFile cmdFile(QString("/proc/%1/cmdline").arg(directories[i])); QFile cmdFile(QString("/proc/%1/cmdline").arg(directories.at(i)));
if (!cmdFile.open(QIODevice::ReadOnly)) continue; if (!cmdFile.open(QIODevice::ReadOnly)) continue;
QString output = statusFile.readAll(); QString output = statusFile.readAll();
if (output.contains(QString("running"))) running.append(cmdFile.readAll()); if (output.contains(QString("running"))) running.append(cmdFile.readAll());
} }
QVariantMap psStats; QVariantHash psStats;
psStats[QString("pscount")] = running.count(); psStats[QString("pscount")] = running.count();
psStats[QString("ps")] = running.join(QString(",")); psStats[QString("ps")] = running.join(QString(","));
psStats[QString("pstotal")] = directories.count(); psStats[QString("pstotal")] = directories.count();
@ -581,17 +585,17 @@ bool ExtendedSysMon::updateSourceEvent(const QString &source)
if (debug) qDebug() << PDEBUG << ":" << "Source" << source; if (debug) qDebug() << PDEBUG << ":" << "Source" << source;
if (source == QString("battery")) { if (source == QString("battery")) {
QVariantMap battery = getBattery(configuration[QString("ACPIPATH")]); QVariantHash battery = getBattery(configuration[QString("ACPIPATH")]);
for (int i=0; i<battery.keys().count(); i++) for (int i=0; i<battery.keys().count(); i++)
setData(source, battery.keys()[i], battery[battery.keys()[i]]); setData(source, battery.keys().at(i), battery[battery.keys().at(i)]);
} else if (source == QString("custom")) { } else if (source == QString("custom")) {
for (int i=0; i<externalScripts->items().count(); i++) for (int i=0; i<externalScripts->items().count(); i++)
setData(source, externalScripts->items()[i]->tag(QString("custom")), setData(source, externalScripts->items().at(i)->tag(QString("custom")),
externalScripts->items()[i]->run()[QString("value")]); externalScripts->items().at(i)->run()[QString("value")]);
} else if (source == QString("desktop")) { } else if (source == QString("desktop")) {
QVariantMap desktop = getCurrentDesktop(); QVariantHash desktop = getCurrentDesktop();
for (int i=0; i<desktop.keys().count(); i++) for (int i=0; i<desktop.keys().count(); i++)
setData(source, desktop.keys()[i], desktop[desktop.keys()[i]]); setData(source, desktop.keys().at(i), desktop[desktop.keys().at(i)]);
} else if (source == QString("gpu")) { } else if (source == QString("gpu")) {
setData(source, QString("value"), getGpu(configuration[QString("GPUDEV")])); setData(source, QString("value"), getGpu(configuration[QString("GPUDEV")]));
} else if (source == QString("gputemp")) { } else if (source == QString("gputemp")) {
@ -600,40 +604,40 @@ bool ExtendedSysMon::updateSourceEvent(const QString &source)
QStringList deviceList = configuration[QString("HDDDEV")].split(QChar(','), QString::SkipEmptyParts); QStringList deviceList = configuration[QString("HDDDEV")].split(QChar(','), QString::SkipEmptyParts);
QStringList allHddDevices = getAllHdd(); QStringList allHddDevices = getAllHdd();
for (int i=0; i<allHddDevices.count(); i++) for (int i=0; i<allHddDevices.count(); i++)
setData(source, allHddDevices[i], deviceList.contains(allHddDevices[i]) ? setData(source, allHddDevices.at(i), deviceList.contains(allHddDevices.at(i)) ?
getHddTemp(configuration[QString("HDDTEMPCMD")], allHddDevices[i]) : getHddTemp(configuration[QString("HDDTEMPCMD")], allHddDevices.at(i)) :
0.0); 0.0);
} else if (source == QString("netdev")) { } else if (source == QString("netdev")) {
setData(source, QString("value"), getNetworkDevice()); setData(source, QString("value"), getNetworkDevice());
} else if (source == QString("pkg")) { } else if (source == QString("pkg")) {
for (int i=0; i<externalUpgrade->items().count(); i++) for (int i=0; i<externalUpgrade->items().count(); i++)
setData(source, externalUpgrade->items()[i]->tag(QString("pkgcount")), setData(source, externalUpgrade->items().at(i)->tag(QString("pkgcount")),
externalUpgrade->items()[i]->run()[QString("value")]); externalUpgrade->items().at(i)->run()[QString("value")]);
} else if (source == QString("player")) { } else if (source == QString("player")) {
QVariantMap player = getPlayerInfo(configuration[QString("PLAYER")], QVariantHash player = getPlayerInfo(configuration[QString("PLAYER")],
configuration[QString("MPDADDRESS")], configuration[QString("MPDADDRESS")],
configuration[QString("MPDPORT")], configuration[QString("MPDPORT")],
configuration[QString("MPRIS")]); configuration[QString("MPRIS")]);
for (int i=0; i<player.keys().count(); i++) for (int i=0; i<player.keys().count(); i++)
setData(source, player.keys()[i], player[player.keys()[i]]); setData(source, player.keys().at(i), player[player.keys().at(i)]);
} else if (source == QString("ps")) { } else if (source == QString("ps")) {
QVariantMap ps = getPsStats(); QVariantHash ps = getPsStats();
for (int i=0; i<ps.keys().count(); i++) for (int i=0; i<ps.keys().count(); i++)
setData(source, ps.keys()[i], ps[ps.keys()[i]]); setData(source, ps.keys().at(i), ps[ps.keys().at(i)]);
} else if (source == QString("quotes")) { } else if (source == QString("quotes")) {
for (int i=0; i<externalQuotes->items().count(); i++) { for (int i=0; i<externalQuotes->items().count(); i++) {
QVariantMap data = externalQuotes->items()[i]->run(); QVariantMap data = externalQuotes->items().at(i)->run();
for (int j=0; j<data.keys().count(); j++) for (int j=0; j<data.keys().count(); j++)
setData(source, externalQuotes->items()[i]->tag(data.keys()[j]), setData(source, externalQuotes->items().at(i)->tag(data.keys()[j]),
data[data.keys()[j]]); data[data.keys()[j]]);
} }
} else if (source == QString("update")) { } else if (source == QString("update")) {
setData(source, QString("value"), true); setData(source, QString("value"), true);
} else if (source == QString("weather")) { } else if (source == QString("weather")) {
for (int i=0; i<externalWeather->items().count(); i++) { for (int i=0; i<externalWeather->items().count(); i++) {
QVariantMap data = externalWeather->items()[i]->run(); QVariantMap data = externalWeather->items().at(i)->run();
for (int j=0; j<data.keys().count(); j++) for (int j=0; j<data.keys().count(); j++)
setData(source, externalWeather->items()[i]->tag(data.keys()[j]), setData(source, externalWeather->items().at(i)->tag(data.keys()[j]),
data[data.keys()[j]]); data[data.keys()[j]]);
} }
} }

View File

@ -36,20 +36,20 @@ public:
explicit ExtendedSysMon(QObject *parent, const QVariantList &args); explicit ExtendedSysMon(QObject *parent, const QVariantList &args);
~ExtendedSysMon(); ~ExtendedSysMon();
// update functions // update functions
QVariantMap getBattery(const QString acpiPath) const; QVariantHash getBattery(const QString acpiPath) const;
QVariantMap getCurrentDesktop() const; QVariantHash getCurrentDesktop() const;
float getGpu(const QString device) const; float getGpu(const QString device) const;
float getGpuTemp(const QString device) const; float getGpuTemp(const QString device) const;
float getHddTemp(const QString cmd, const QString device) const; float getHddTemp(const QString cmd, const QString device) const;
QString getNetworkDevice() const; QString getNetworkDevice() const;
QVariantMap getPlayerInfo(const QString playerName, QVariantHash getPlayerInfo(const QString playerName,
const QString mpdAddress = QString(), const QString mpdAddress = QString(),
const QString mpdPort = QString(), const QString mpdPort = QString(),
const QString mpris = QString()) const; const QString mpris = QString()) const;
QVariantMap getPlayerMpdInfo(const QString mpdAddress = QString(), QVariantHash getPlayerMpdInfo(const QString mpdAddress = QString(),
const QString mpdPort = QString()) const; const QString mpdPort = QString()) const;
QVariantMap getPlayerMprisInfo(const QString mpris = QString()) const; QVariantHash getPlayerMprisInfo(const QString mpris = QString()) const;
QVariantMap getPsStats() const; QVariantHash getPsStats() const;
protected: protected:
bool sourceRequestEvent(const QString &source); bool sourceRequestEvent(const QString &source);
@ -58,7 +58,7 @@ protected:
private: private:
// configuration // configuration
QMap<QString, QString> configuration; QHash<QString, QString> configuration;
ExtItemAggregator<ExtQuotes> *externalQuotes; ExtItemAggregator<ExtQuotes> *externalQuotes;
ExtItemAggregator<ExtScript> *externalScripts; ExtItemAggregator<ExtScript> *externalScripts;
ExtItemAggregator<ExtUpgrade> *externalUpgrade; ExtItemAggregator<ExtUpgrade> *externalUpgrade;
@ -69,7 +69,7 @@ private:
QString getAutoGpu() const; QString getAutoGpu() const;
QString getAutoMpris() const; QString getAutoMpris() const;
void readConfiguration(); void readConfiguration();
QMap<QString, QString> updateConfiguration(QMap<QString, QString> rawConfig) const; QHash<QString, QString> updateConfiguration(QHash<QString, QString> rawConfig) const;
}; };