From b82d78bcbec27e12a951e99ac42fb5bd19b1f35b Mon Sep 17 00:00:00 2001 From: arcan1s Date: Mon, 18 May 2015 00:57:47 +0300 Subject: [PATCH] implement #51 for upgrade and scripts --- create_archive.sh | 2 +- sources/.kdev4/awesomewidgets.kdev4 | 23 +++++++ .../awesome-widget-kf5/plugin/CMakeLists.txt | 7 +- .../{sources.kdev4 => awesomewidgets.kdev4} | 0 sources/extsysmon/extscript.cpp | 64 +++++++++++-------- sources/extsysmon/extscript.h | 6 ++ sources/extsysmon/extsysmon.cpp | 37 ++++++----- sources/extsysmon/extsysmon.h | 4 +- sources/extsysmon/extupgrade.cpp | 36 +++++++---- sources/extsysmon/extupgrade.h | 5 ++ 10 files changed, 121 insertions(+), 63 deletions(-) create mode 100644 sources/.kdev4/awesomewidgets.kdev4 rename sources/{sources.kdev4 => awesomewidgets.kdev4} (100%) diff --git a/create_archive.sh b/create_archive.sh index 40ba5d5..135bfa0 100755 --- a/create_archive.sh +++ b/create_archive.sh @@ -21,7 +21,7 @@ rm -rf "${ARCHIVE}" # build widget ARCHIVE="awesome-widgets" FILES="AUTHORS CHANGELOG CHANGELOG-RU COPYING" -IGNORELIST="build usr .kdev4 sources.kdev4" +IGNORELIST="build usr .kdev4 *.kdev4" # create archive [[ -e ${ARCHIVE}-${VERSION}-src.tar.xz ]] && rm -f "${ARCHIVE}-${VERSION}-src.tar.xz" [[ -d ${ARCHIVE} ]] && rm -rf "${ARCHIVE}" diff --git a/sources/.kdev4/awesomewidgets.kdev4 b/sources/.kdev4/awesomewidgets.kdev4 new file mode 100644 index 0000000..b97529b --- /dev/null +++ b/sources/.kdev4/awesomewidgets.kdev4 @@ -0,0 +1,23 @@ +[Buildset] +BuildItems=@Variant(\x00\x00\x00\t\x00\x00\x00\x00\x01\x00\x00\x00\x0b\x00\x00\x00\x00\x01\x00\x00\x00\x1e\x00a\x00w\x00e\x00s\x00o\x00m\x00e\x00-\x00w\x00i\x00d\x00g\x00e\x00t\x00s) + +[CMake] +Build Directory Count=1 +Current Build Directory Index=0 +ProjectRootRelative=./ + +[CMake][CMake Build Directory 0] +Build Directory Path=file:///home/arcanis/Documents/github/awesome-widgets/build +Build Type=Debug +CMake Binary=file:///usr/bin/cmake +Environment Profile= +Extra Arguments= +Install Directory=file:///usr + +[Defines And Includes][Compiler] +Name=GCC +Path=gcc +Type=GCC + +[Project] +VersionControlSupport=kdevgit diff --git a/sources/awesome-widget-kf5/plugin/CMakeLists.txt b/sources/awesome-widget-kf5/plugin/CMakeLists.txt index dd08b04..6d9180d 100644 --- a/sources/awesome-widget-kf5/plugin/CMakeLists.txt +++ b/sources/awesome-widget-kf5/plugin/CMakeLists.txt @@ -26,19 +26,16 @@ include_directories (${CMAKE_SOURCE_DIR} ${Kf5_INCLUDE}) # task source is required by extscripts -file (GLOB_RECURSE SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp - ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp +file (GLOB_RECURSE SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp ../../extsysmon/extquotes.cpp ../../extsysmon/extscript.cpp ../../extsysmon/extupgrade.cpp) -set (SUBPROJECT_HEADER ${PROJECT_TRDPARTY_DIR}/task/task.h) file (GLOB SUBPROJECT_UI *.ui) file (GLOB SUBPROJECT_NOTIFY *.notifyrc) set (SUBPROJECT_DESKTOP ${CMAKE_CURRENT_SOURCE_DIR}/desktops) -qt5_wrap_cpp (SUBPROJECT_MOC_SOURCE ${SUBPROJECT_HEADER}) qt5_wrap_ui (SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) -add_library (${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE} ${SUBPROJECT_UI_HEADER} ${SUBPROJECT_MOC_SOURCE}) +add_library (${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE}) target_link_libraries (${PLUGIN_NAME} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) install (TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/awesomewidget) diff --git a/sources/sources.kdev4 b/sources/awesomewidgets.kdev4 similarity index 100% rename from sources/sources.kdev4 rename to sources/awesomewidgets.kdev4 diff --git a/sources/extsysmon/extscript.cpp b/sources/extsysmon/extscript.cpp index 12e85e4..6074774 100644 --- a/sources/extsysmon/extscript.cpp +++ b/sources/extsysmon/extscript.cpp @@ -25,7 +25,6 @@ #include #include -#include #include "version.h" @@ -39,6 +38,11 @@ ExtScript::ExtScript(QWidget *parent, const QString scriptName, const QStringLis { m_name = m_fileName; readConfiguration(); + // init process + process = new QProcess(this); + connect(process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(updateValue())); + process->waitForFinished(0); + // init ui ui->setupUi(this); } @@ -47,6 +51,8 @@ ExtScript::~ExtScript() { if (debug) qDebug() << PDEBUG; + process->kill(); + delete process; delete ui; } @@ -318,36 +324,14 @@ QString ExtScript::run() if (debug) qDebug() << PDEBUG; if (!m_active) return value; - if (times == 1) { + if ((times == 1) && (process->state() == QProcess::NotRunning)) { QStringList cmdList; if (!m_prefix.isEmpty()) cmdList.append(m_prefix); cmdList.append(m_executable); if (debug) qDebug() << PDEBUG << ":" << "cmd" << cmdList.join(QChar(' ')); - TaskResult process = runTask(cmdList.join(QChar(' '))); - if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; - - QString info = QString("%1 : %2").arg(process.exitCode) - .arg(QTextCodec::codecForMib(106)->toUnicode(process.error).trimmed()); - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); - switch (m_redirect) { - case stdout2stderr: - if (debug) qDebug() << PDEBUG << ":" << "Debug" << info; - if (debug) qDebug() << PDEBUG << ":" << "Output" << qoutput; - break; - case stderr2stdout: - value = QString("%1\t%2").arg(info).arg(qoutput); - break; - case nothing: - default: - if (debug) qDebug() << PDEBUG << ":" << "Debug" << info; - value = qoutput; - break; - } - } - - // update value - if (times >= m_interval) times = 0; + process->start(cmdList.join(QChar(' '))); + } else if (times >= m_interval) + times = 0; times++; return value; @@ -424,3 +408,29 @@ void ExtScript::writeConfiguration() settings.sync(); } + + +void ExtScript::updateValue() +{ + if (debug) qDebug() << PDEBUG; + + if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process->exitCode(); + QString qdebug = QTextCodec::codecForMib(106)->toUnicode(process->readAllStandardError()).trimmed(); + if (debug) qDebug() << PDEBUG << ":" << "Error" << qdebug; + QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process->readAllStandardOutput()).trimmed(); + + switch (m_redirect) { + case stdout2stderr: + if (debug) qDebug() << PDEBUG << ":" << "Debug" << qdebug; + if (debug) qDebug() << PDEBUG << ":" << "Output" << qoutput; + break; + case stderr2stdout: + value = QString("%1\t%2").arg(qdebug).arg(qoutput); + break; + case nothing: + default: + if (debug) qDebug() << PDEBUG << ":" << "Debug" << qdebug; + value = qoutput; + break; + } +} diff --git a/sources/extsysmon/extscript.h b/sources/extsysmon/extscript.h index fd4df15..6b1c2b9 100644 --- a/sources/extsysmon/extscript.h +++ b/sources/extsysmon/extscript.h @@ -19,6 +19,7 @@ #define EXTSCRIPT_H #include +#include namespace Ui { @@ -83,10 +84,14 @@ public slots: bool tryDelete(); void writeConfiguration(); +private slots: + void updateValue(); + private: QString m_fileName; QStringList m_dirs; bool debug; + QProcess *process = nullptr; Ui::ExtScript *ui; // properties int m_apiVersion = 0; @@ -99,6 +104,7 @@ private: bool m_output = true; QString m_prefix = QString(""); Redirect m_redirect = nothing; + Q_PID childProcess = 0; int times = 0; QString value = QString(); }; diff --git a/sources/extsysmon/extsysmon.cpp b/sources/extsysmon/extsysmon.cpp index a978bb3..262e0c9 100644 --- a/sources/extsysmon/extsysmon.cpp +++ b/sources/extsysmon/extsysmon.cpp @@ -69,6 +69,16 @@ ExtendedSysMon::ExtendedSysMon(QObject* parent, const QVariantList &args) } +ExtendedSysMon::~ExtendedSysMon() +{ + if (debug) qDebug() << PDEBUG; + + externalQuotes.clear(); + externalScripts.clear(); + externalUpgrade.clear(); +} + + QString ExtendedSysMon::getAllHdd() { if (debug) qDebug() << PDEBUG; @@ -408,10 +418,9 @@ float ExtendedSysMon::getGpu(const QString device) else if (device == QString("ati")) cmd = QString("aticonfig --od-getclocks"); if (debug) qDebug() << PDEBUG << ":" << "cmd" << cmd; - TaskResult process = runTask(QString("bash -c \"") + cmd + QString("\"")); + TaskResult process = runTask(cmd); if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; + if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); if (configuration[QString("GPUDEV")] == QString("nvidia")) @@ -452,10 +461,9 @@ float ExtendedSysMon::getGpuTemp(const QString device) else if (device == QString("ati")) cmd = QString("aticonfig --od-gettemperature"); if (debug) qDebug() << PDEBUG << ":" << "cmd" << cmd; - TaskResult process = runTask(QString("bash -c \"") + cmd + QString("\"")); + TaskResult process = runTask(cmd); if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; + if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output); if (configuration[QString("GPUDEV")] == QString("nvidia")) @@ -487,10 +495,9 @@ float ExtendedSysMon::getHddTemp(const QString cmd, const QString device) if (debug) qDebug() << PDEBUG << ":" << "Device" << device; float value = 0.0; - TaskResult process = runTask(cmd + QString(" ") + device); + TaskResult process = runTask(QString("%1 %2").arg(cmd).arg(device)); if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; + if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; bool smartctl = cmd.contains(QString("smartctl")); if (debug) qDebug() << PDEBUG << ":" << "Define smartctl" << smartctl; @@ -583,8 +590,7 @@ QMap ExtendedSysMon::getPlayerMpdInfo(const QString mpdAddres 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; + if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); QString qstr = QString(""); @@ -661,7 +667,8 @@ QMap ExtendedSysMon::getPsStats() { if (debug) qDebug() << PDEBUG; - QStringList allDirectories = QDir(QString("/proc")).entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); + QStringList allDirectories = QDir(QString("/proc")).entryList(QDir::Dirs | QDir::NoDotAndDotDot, + QDir::Name); QStringList directories = allDirectories.filter(QRegExp(QString("(\\d+)"))); QStringList running; @@ -731,9 +738,9 @@ bool ExtendedSysMon::updateSourceEvent(const QString &source) setData(source, externalUpgrade[i]->tag(), externalUpgrade[i]->run()); } else if (source == QString("player")) { QMap player = getPlayerInfo(configuration[QString("PLAYER")], - configuration[QString("MPDADDRESS")], - configuration[QString("MPDPORT")], - configuration[QString("MPRIS")]); + configuration[QString("MPDADDRESS")], + configuration[QString("MPDPORT")], + configuration[QString("MPRIS")]); for (int i=0; i -#include class ExtQuotes; @@ -31,7 +30,8 @@ class ExtendedSysMon : public Plasma::DataEngine Q_OBJECT public: - ExtendedSysMon(QObject *parent, const QVariantList &args); + explicit ExtendedSysMon(QObject *parent, const QVariantList &args); + ~ExtendedSysMon(); // update functions QMap getBattery(const QString acpiPath); QMap getCurrentDesktop(); diff --git a/sources/extsysmon/extupgrade.cpp b/sources/extsysmon/extupgrade.cpp index f21e9cf..5b0c742 100644 --- a/sources/extsysmon/extupgrade.cpp +++ b/sources/extsysmon/extupgrade.cpp @@ -25,7 +25,6 @@ #include #include -#include #include "version.h" @@ -39,6 +38,11 @@ ExtUpgrade::ExtUpgrade(QWidget *parent, const QString upgradeName, const QString { m_name = m_fileName; readConfiguration(); + // init process + process = new QProcess(this); + connect(process, SIGNAL(finished(int)), this, SLOT(updateValue())); + process->waitForFinished(0); + // init ui ui->setupUi(this); } @@ -47,6 +51,8 @@ ExtUpgrade::~ExtUpgrade() { if (debug) qDebug() << PDEBUG; + process->kill(); + delete process; delete ui; } @@ -244,18 +250,10 @@ int ExtUpgrade::run() if (debug) qDebug() << PDEBUG; if (!m_active) return value; - if (times == 1) { - TaskResult process = runTask(QString("bash -c \"%1\"").arg(m_executable)); - if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; - - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); - value = qoutput.split(QChar('\n'), QString::SkipEmptyParts).count() - m_null; - } - - // update value - if (times >= m_interval) times = 0; + if ((times == 1) && (process->state() == QProcess::NotRunning)) + process->start(QString("bash -c \"%1\"").arg(m_executable)); + else if (times >= m_interval) + times = 0; times++; return value; @@ -326,3 +324,15 @@ void ExtUpgrade::writeConfiguration() settings.sync(); } + + +void ExtUpgrade::updateValue() +{ + if (debug) qDebug() << PDEBUG; + + if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process->exitCode(); + if (debug) qDebug() << PDEBUG << ":" << "Error" << process->readAllStandardError(); + + QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process->readAllStandardOutput()).trimmed(); + value = qoutput.split(QChar('\n'), QString::SkipEmptyParts).count() - m_null; +} diff --git a/sources/extsysmon/extupgrade.h b/sources/extsysmon/extupgrade.h index 3d3aeb9..d75dd6e 100644 --- a/sources/extsysmon/extupgrade.h +++ b/sources/extsysmon/extupgrade.h @@ -19,6 +19,7 @@ #define EXTUPGRADE_H #include +#include namespace Ui { @@ -69,10 +70,14 @@ public slots: bool tryDelete(); void writeConfiguration(); +private slots: + void updateValue(); + private: QString m_fileName; QStringList m_dirs; bool debug; + QProcess *process = nullptr; Ui::ExtUpgrade *ui; // properties int m_apiVersion = 0;