diff --git a/sources/awesome-widget/plugin/awupdatehelper.cpp b/sources/awesome-widget/plugin/awupdatehelper.cpp index 78b2839..42871c8 100644 --- a/sources/awesome-widget/plugin/awupdatehelper.cpp +++ b/sources/awesome-widget/plugin/awupdatehelper.cpp @@ -77,7 +77,7 @@ bool AWUpdateHelper::checkVersion() qCInfo(LOG_AW) << "Found version" << version << "actual one is" << VERSION; if (version != QString(VERSION)) { - genMessageBox(i18n("Changelog of %1", VERSION), + genMessageBox(i18n("Changelog of %1", QString(VERSION)), QString(CHANGELOG).replace(QChar('@'), QChar('\n')), QMessageBox::Ok) ->open(); diff --git a/sources/awesomewidgets/extscript.h b/sources/awesomewidgets/extscript.h index 3aa899b..511c032 100644 --- a/sources/awesomewidgets/extscript.h +++ b/sources/awesomewidgets/extscript.h @@ -82,7 +82,6 @@ private: QString m_prefix = QString(""); Redirect m_redirect = nothing; // internal properties - Q_PID childProcess = 0; QVariantMap jsonFilters = QVariantMap(); int times = 0; QVariantHash value; diff --git a/sources/extsysmon/sources/hddtempsource.cpp b/sources/extsysmon/sources/hddtempsource.cpp index 92b9b22..b0774e1 100644 --- a/sources/extsysmon/sources/hddtempsource.cpp +++ b/sources/extsysmon/sources/hddtempsource.cpp @@ -18,10 +18,9 @@ #include "hddtempsource.h" +#include #include -#include - #include "awdebug.h" @@ -37,12 +36,29 @@ HDDTemperatureSource::HDDTemperatureSource(QObject *parent, m_smartctl = m_cmd.contains(QString("smartctl")); qCInfo(LOG_ESM) << "Parse as smartctl" << m_smartctl; + + for (auto device : m_devices) { + m_processes[device] = new QProcess(nullptr); + // fucking magic from http://doc.qt.io/qt-5/qprocess.html#finished + connect(m_processes[device], + static_cast( + &QProcess::finished), + [this, device](int, QProcess::ExitStatus) { + return updateValue(device); + }); + m_processes[device]->waitForFinished(0); + } } HDDTemperatureSource::~HDDTemperatureSource() { qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; + + for (auto device : m_devices) { + m_processes[device]->kill(); + m_processes[device]->deleteLater(); + } } @@ -51,36 +67,11 @@ QVariant HDDTemperatureSource::data(QString source) qCDebug(LOG_ESM) << "Source" << source; QString device = source.remove(QString("hdd/temperature")); - float value = 0.0; // run cmd - TaskResult process = runTask(QString("%1 %2").arg(m_cmd).arg(device)); - qCInfo(LOG_ESM) << "Cmd returns" << process.exitCode; - qCInfo(LOG_ESM) << "Error" << process.error; + if (m_processes[device]->state() == QProcess::NotRunning) + m_processes[device]->start(QString("%1 %2").arg(m_cmd).arg(device)); - // parse - QString qoutput - = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); - if (m_smartctl) { - for (auto str : qoutput.split(QChar('\n'), QString::SkipEmptyParts)) { - if (!str.startsWith(QString("194"))) - continue; - if (str.split(QChar(' '), QString::SkipEmptyParts).count() < 9) - break; - value = str.split(QChar(' '), QString::SkipEmptyParts) - .at(9) - .toFloat(); - break; - } - } else { - if (qoutput.split(QChar(':'), QString::SkipEmptyParts).count() >= 3) { - QString temp - = qoutput.split(QChar(':'), QString::SkipEmptyParts).at(2); - temp.remove(QChar(0260)).remove(QChar('C')); - value = temp.toFloat(); - } - } - - return value; + return m_values[device]; } @@ -108,3 +99,42 @@ QStringList HDDTemperatureSource::sources() const return sources; } + + +void HDDTemperatureSource::updateValue(const QString &device) +{ + qCDebug(LOG_LIB) << "Called with device" << device; + + qCInfo(LOG_LIB) << "Cmd returns" << m_processes[device]->exitCode(); + QString qdebug + = QTextCodec::codecForMib(106) + ->toUnicode(m_processes[device]->readAllStandardError()) + .trimmed(); + qCInfo(LOG_LIB) << "Error" << qdebug; + QString qoutput + = QTextCodec::codecForMib(106) + ->toUnicode(m_processes[device]->readAllStandardOutput()) + .trimmed(); + qCInfo(LOG_LIB) << "Output" << qoutput; + + // parse + if (m_smartctl) { + for (auto str : qoutput.split(QChar('\n'), QString::SkipEmptyParts)) { + if (!str.startsWith(QString("194"))) + continue; + if (str.split(QChar(' '), QString::SkipEmptyParts).count() < 9) + continue; + m_values[device] = str.split(QChar(' '), QString::SkipEmptyParts) + .at(9) + .toFloat(); + break; + } + } else { + if (qoutput.split(QChar(':'), QString::SkipEmptyParts).count() >= 3) { + QString temp + = qoutput.split(QChar(':'), QString::SkipEmptyParts).at(2); + temp.remove(QChar(0260)).remove(QChar('C')); + m_values[device] = temp.toFloat(); + } + } +} diff --git a/sources/extsysmon/sources/hddtempsource.h b/sources/extsysmon/sources/hddtempsource.h index 0da6f31..ffc37b4 100644 --- a/sources/extsysmon/sources/hddtempsource.h +++ b/sources/extsysmon/sources/hddtempsource.h @@ -23,6 +23,8 @@ #include "abstractextsysmonsource.h" +class QProcess; + class HDDTemperatureSource : public AbstractExtSysMonSource { public: @@ -33,11 +35,17 @@ public: void run(){}; QStringList sources() const; +private slots: + void updateValue(const QString &device); + private: + // properties + QHash m_processes; // configuration and values QString m_cmd; QStringList m_devices; bool m_smartctl; + QHash m_values; };