From 8055647f344bb990228dfc8a9054804ee1936605 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Tue, 10 Feb 2015 18:50:36 +0300 Subject: [PATCH] * remove panel hidding functions (comment in) * remove ps calls from DE. Now processes are reading from /proc * remove qdbus calls from DE. Now mpris information is reading using native DBus functions * update graphicalitem in KDE4 TODO: * widgets resizing * tests and optimizations * update DE configuration for KDE4 package --- sources/awesome-widget-kde4/graphicalitem.cpp | 8 - .../package/contents/ui/advanced.qml | 32 +-- .../package/contents/ui/main.qml | 2 +- sources/desktop-panel-kf5/plugin/dpadds.cpp | 9 +- sources/extsysmon/CMakeLists.txt | 9 +- sources/extsysmon/extsysmon.cpp | 194 +++++++++++------- sources/extsysmon/extsysmon.h | 5 +- 7 files changed, 148 insertions(+), 111 deletions(-) diff --git a/sources/awesome-widget-kde4/graphicalitem.cpp b/sources/awesome-widget-kde4/graphicalitem.cpp index 8a90ec7..1df9aaf 100644 --- a/sources/awesome-widget-kde4/graphicalitem.cpp +++ b/sources/awesome-widget-kde4/graphicalitem.cpp @@ -77,11 +77,7 @@ QString GraphicalItem::image(const float value) view->resize(m_width + 5.0, m_height + 5.0); // paint -<<<<<<< HEAD switch(m_type) { -======= - switch (_type) { ->>>>>>> 685c0390b48c75d113024c3b5e19450ec251a0a4 case Vertical: pen.setWidth(m_width); // inactive @@ -208,11 +204,7 @@ QString GraphicalItem::strType() if (debug) qDebug() << PDEBUG; QString value; -<<<<<<< HEAD switch(m_type) { -======= - switch (_type) { ->>>>>>> 685c0390b48c75d113024c3b5e19450ec251a0a4 case Vertical: value = QString("Vertical"); break; diff --git a/sources/desktop-panel-kf5/package/contents/ui/advanced.qml b/sources/desktop-panel-kf5/package/contents/ui/advanced.qml index 6ea741d..9cf7605 100644 --- a/sources/desktop-panel-kf5/package/contents/ui/advanced.qml +++ b/sources/desktop-panel-kf5/package/contents/ui/advanced.qml @@ -182,22 +182,22 @@ Item { } } - Row { - height: implicitHeight - width: parent.width - QtControls.Label { - height: parent.height - width: parent.width * 2 / 5 - horizontalAlignment: Text.AlignRight - verticalAlignment: Text.AlignVCenter - text: i18n("Panels to be hidden") - } - QtControls.Button { - width: parent.width * 3 / 5 - text: i18n("Edit panels") - onClicked: cfg_panels = DPAdds.editPanelsToContol(plasmoid.configuration.panels) - } - } +// Row { +// height: implicitHeight +// width: parent.width +// QtControls.Label { +// height: parent.height +// width: parent.width * 2 / 5 +// horizontalAlignment: Text.AlignRight +// verticalAlignment: Text.AlignVCenter +// text: i18n("Panels to be hidden") +// } +// QtControls.Button { +// width: parent.width * 3 / 5 +// text: i18n("Edit panels") +// onClicked: cfg_panels = DPAdds.editPanelsToContol(plasmoid.configuration.panels) +// } +// } } QtDialogs.ColorDialog { diff --git a/sources/desktop-panel-kf5/package/contents/ui/main.qml b/sources/desktop-panel-kf5/package/contents/ui/main.qml index fd236f8..622451d 100644 --- a/sources/desktop-panel-kf5/package/contents/ui/main.qml +++ b/sources/desktop-panel-kf5/package/contents/ui/main.qml @@ -147,7 +147,7 @@ Item { Plasmoid.onActivated: { if (debug) console.log("[main::onActivated]") - DPAdds.changePanelsState() +// DPAdds.changePanelsState() } Plasmoid.onUserConfiguringChanged: { diff --git a/sources/desktop-panel-kf5/plugin/dpadds.cpp b/sources/desktop-panel-kf5/plugin/dpadds.cpp index 13cd374..b6a6f18 100644 --- a/sources/desktop-panel-kf5/plugin/dpadds.cpp +++ b/sources/desktop-panel-kf5/plugin/dpadds.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include #include @@ -459,13 +458,11 @@ QList DPAdds::getPanels() { if (debug) qDebug() << PDEBUG; - ScriptEngine *env = new ScriptEngine(this); - Plasma::Corona *corona = env->corona(); // Plasma::Corona *corona = new Plasma::Corona(this); QList panels; - for (int i=0; icontainments().count(); i++) - if (corona->containments()[i]->containmentType() == Plasma::Types::ContainmentType::PanelContainment) - panels.append(corona->containments()[i]); +// for (int i=0; icontainments().count(); i++) +// if (corona->containments()[i]->containmentType() == Plasma::Types::ContainmentType::PanelContainment) +// panels.append(corona->containments()[i]); // delete corona; return panels; diff --git a/sources/extsysmon/CMakeLists.txt b/sources/extsysmon/CMakeLists.txt index 1b3800a..57a7bc6 100644 --- a/sources/extsysmon/CMakeLists.txt +++ b/sources/extsysmon/CMakeLists.txt @@ -11,7 +11,7 @@ if (BUILD_KDE4) add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS}) set (KDE_INCLUDE ${KDE4_INCLUDES}) else () - find_package (Qt5 REQUIRED COMPONENTS Network Widgets) + find_package (Qt5 REQUIRED COMPONENTS DBus Network 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 Plasma Service WindowSystem) @@ -20,8 +20,10 @@ else () include (KDECMakeSettings) include (KDECompilerSettings) - add_definitions (${Qt5Core_DEFINITIONS} ${Qt5Network_DEFINITIONS} ${Qt5Widgets_DEFINITIONS}) + add_definitions (${Qt5Core_DEFINITIONS} ${Qt5DBus_DEFINITIONS} + ${Qt5Network_DEFINITIONS} ${Qt5Widgets_DEFINITIONS}) set (Qt_INCLUDE ${Qt5Core_INCLUDE_DIRS} + ${Qt5DBus_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS}) set (KDE_INCLUDE ${Plasma_INCLUDE_DIR}) @@ -57,7 +59,8 @@ else () qt5_wrap_cpp (TASK_MOC_SOURCE ${TASK_HEADER}) qt5_wrap_ui (SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) add_library (${PLUGIN_NAME} MODULE ${SUBPROJECT_SOURCE} ${SUBPROJECT_UI_HEADER} ${TASK_MOC_SOURCE}) - target_link_libraries (${PLUGIN_NAME} ${Plasma_LIBRARIES} KF5::WindowSystem ${Qt5Network_LIBRARIES} ${Qt5Widgets_LIBRARIES}) + target_link_libraries (${PLUGIN_NAME} ${Plasma_LIBRARIES} KF5::WindowSystem + ${Qt5DBus_LIBRARIES} ${Qt5Network_LIBRARIES} ${Qt5Widgets_LIBRARIES}) kcoreaddons_desktop_to_json (${PLUGIN_NAME} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP}) endif () diff --git a/sources/extsysmon/extsysmon.cpp b/sources/extsysmon/extsysmon.cpp index 41d641a..8861946 100644 --- a/sources/extsysmon/extsysmon.cpp +++ b/sources/extsysmon/extsysmon.cpp @@ -21,6 +21,10 @@ #include #include +#include +#include +#include +#include #include #include #include @@ -100,20 +104,17 @@ QString ExtendedSysMon::getAutoMpris() { if (debug) qDebug() << PDEBUG; - QString mpris; - QString cmd = QString("bash -c \"qdbus 'org.mpris.MediaPlayer2.*'\""); - if (debug) qDebug() << PDEBUG << ":" << "cmd" << cmd; - TaskResult process = runTask(cmd); - if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; + QDBusMessage listServices = QDBusConnection::sessionBus().interface()->call(QDBus::BlockWithGui, QString("ListNames")); + QList arguments = listServices.arguments(); - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); - if (qoutput.split(QChar('\n'))[0].split(QChar('.')).count() > 3) - mpris = qoutput.split(QChar('\n'))[0].split(QChar('.'))[3]; + for (int i=0; i ExtendedSysMon::getPlayerInfo(const QString playerName, info[QString("duration")] = QString("0"); info[QString("progress")] = QString("0"); info[QString("title")] = QString("unknown"); - QString cmd; + if (playerName == QString("mpd")) // mpd - cmd = QString("bash -c \"echo 'currentsong\nstatus\nclose' | curl --connect-timeout 1 -fsm 3 telnet://%1:%2\"") - .arg(mpdAddress) - .arg(mpdPort); + return getPlayerMpdInfo(mpdAddress, mpdPort); else if (playerName == QString("mpris")) { // players which supports mpris - if (mpris == QString("auto")) - mpris = getAutoMpris(); + if (mpris == QString("auto")) mpris = getAutoMpris(); if (mpris.isEmpty()) return info; - cmd = QString("bash -c \"qdbus org.mpris.%1 /Player GetMetadata && qdbus org.mpris.%1 /Player PositionGet\"") - .arg(mpris); + return getPlayerMprisInfo(mpris); } + + return info; +} + + +QMap ExtendedSysMon::getPlayerMpdInfo(const QString mpdAddress, + const QString mpdPort) +{ + if (debug) qDebug() << PDEBUG; + if (debug) qDebug() << PDEBUG << ":" << "MPD" << mpdAddress + QString(":") + mpdPort; + + QMap info; + info[QString("album")] = QString("unknown"); + info[QString("artist")] = QString("unknown"); + info[QString("duration")] = QString("0"); + info[QString("progress")] = QString("0"); + info[QString("title")] = QString("unknown"); + + QString cmd = QString("bash -c \"echo 'currentsong\nstatus\nclose' | curl --connect-timeout 1 -fsm 3 telnet://%1:%2\"") + .arg(mpdAddress) + .arg(mpdPort); if (debug) qDebug() << PDEBUG << ":" << "cmd" << cmd; TaskResult process = runTask(cmd); if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; @@ -528,38 +546,70 @@ QMap ExtendedSysMon::getPlayerInfo(const QString playerName, QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); QString qstr = QString(""); - if (playerName == QString("mpd")) - for (int i=0; i 1) { - if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Album")) - info[QString("album")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Artist")) - info[QString("artist")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("time")) { - 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]; - } else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Title")) - info[QString("title")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - } - } - else if (playerName == QString("mpris")) - for (int i=0; i 1) { - if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("album")) - info[QString("album")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("artist")) - info[QString("artist")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("time")) - info[QString("duration")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("title")) - info[QString("title")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); - } else { - int time = qstr.toInt() / 1000; - info[QString("progress")] = QString::number(time); - } + for (int i=0; i 1) { + if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Album")) + info[QString("album")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); + else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Artist")) + info[QString("artist")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); + else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("time")) { + 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]; + } else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Title")) + info[QString("title")] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed(); } + } + + return info; +} + + +QMap ExtendedSysMon::getPlayerMprisInfo(const QString mpris) +{ + if (debug) qDebug() << PDEBUG; + if (debug) qDebug() << PDEBUG << "MPRIS" << mpris; + + QMap info; + info[QString("album")] = QString("unknown"); + info[QString("artist")] = QString("unknown"); + info[QString("duration")] = 0; + info[QString("progress")] = 0; + info[QString("title")] = QString("unknown"); + + // init + QDBusArgument arg; + QDBusConnection bus = QDBusConnection::sessionBus(); + QDBusMessage response, request; + QVariantMap map; + + // general information + request = QDBusMessage::createMethodCall(QString("org.mpris.MediaPlayer2.%1").arg(mpris), + QString("/Player"), + QString(""), + QString("GetMetadata")); + response = bus.call(request, QDBus::BlockWithGui); + if (response.arguments().size() == 0) { + if (debug) qDebug() << PDEBUG << ":" << "Error message" << response.errorMessage(); + } else { + arg = response.arguments()[0].value(); + arg >> map; + info[QString("album")] = map[QString("album")]; + info[QString("artist")] = map[QString("artist")]; + info[QString("duration")] = map[QString("time")]; + info[QString("title")] = map[QString("title")]; + } + + // position + request = QDBusMessage::createMethodCall(QString("org.mpris.MediaPlayer2.%1").arg(mpris), + QString("/Player"), + QString(""), + QString("PositionGet")); + response = bus.call(request, QDBus::BlockWithGui); + if (response.arguments().size() == 0) { + if (debug) qDebug() << PDEBUG << ":" << "Error message" << response.errorMessage(); + } else + info[QString("progress")] = response.arguments()[0].toInt() / 1000; return info; } @@ -569,32 +619,24 @@ QMap ExtendedSysMon::getPsStats() { if (debug) qDebug() << PDEBUG; + QStringList allDirectories = QDir(QString("/proc")).entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); + QStringList directories = allDirectories.filter(QRegExp(QString("(\\d+)"))); + QStringList running; + + for (int i=0; i psStats; - QString cmd, qoutput; - cmd = QString("ps --no-headers -o command"); - if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; - TaskResult process = runTask(cmd); - if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; - - qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); - QStringList psList; - for (int i=0; itoUnicode(process.output).trimmed(); - psStats[QString("pstotal")] = qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); + psStats[QString("pscount")] = running.count(); + psStats[QString("ps")] = running.join(QString(",")); + psStats[QString("pstotal")] = directories.count(); return psStats; } diff --git a/sources/extsysmon/extsysmon.h b/sources/extsysmon/extsysmon.h index a545f2b..1cc2d94 100644 --- a/sources/extsysmon/extsysmon.h +++ b/sources/extsysmon/extsysmon.h @@ -45,7 +45,10 @@ public: QMap getPlayerInfo(const QString playerName, const QString mpdAddress = 0, const QString mpdPort = 0, - QString mpris = 0); + const QString mpris = 0); + QMap getPlayerMpdInfo(const QString mpdAddress = 0, + const QString mpdPort = 0); + QMap getPlayerMprisInfo(const QString mpris = 0); QMap getPsStats(); protected: