From bcf26156d134272c6f4ddcac1b2fda5930e37e50 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Tue, 24 Feb 2015 00:02:59 +0300 Subject: [PATCH] * implement interval to extupgrade (ApiVer = 1) (fix #45) * improve extscript logic * add cache values to both of them --- sources/awesome-widget-kde4/configuration.cpp | 1 + sources/awesome-widget-kf5/plugin/awkeys.cpp | 1 + sources/extsysmon/extscript.cpp | 67 +++++++++---------- sources/extsysmon/extscript.h | 10 +-- sources/extsysmon/extsysmon.cpp | 21 ++---- sources/extsysmon/extsysmon.h | 7 -- sources/extsysmon/extupgrade.cpp | 42 ++++++++++-- sources/extsysmon/extupgrade.h | 6 ++ sources/extsysmon/extupgrade.ui | 30 +++++++++ .../extsysmon/upgrade/default-arch.desktop | 1 + .../extsysmon/upgrade/default-debian.desktop | 1 + .../extsysmon/upgrade/default-fedora.desktop | 1 + .../upgrade/default-mandriva.desktop | 1 + .../extsysmon/upgrade/default-ubuntu.desktop | 1 + 14 files changed, 118 insertions(+), 72 deletions(-) diff --git a/sources/awesome-widget-kde4/configuration.cpp b/sources/awesome-widget-kde4/configuration.cpp index 67cc1a3..d8a1b98 100644 --- a/sources/awesome-widget-kde4/configuration.cpp +++ b/sources/awesome-widget-kde4/configuration.cpp @@ -971,6 +971,7 @@ void AwesomeWidget::copyPkgCommand(const QString original) upgrade->setExecutable(originalUpgrade->executable()); upgrade->setName(originalUpgrade->name()); upgrade->setNull(originalUpgrade->null()); + upgrade->setInterval(originalUpgrade->interval()); delete originalUpgrade; if (upgrade->showConfiguration() == 1) { diff --git a/sources/awesome-widget-kf5/plugin/awkeys.cpp b/sources/awesome-widget-kf5/plugin/awkeys.cpp index 6068f48..463fc09 100644 --- a/sources/awesome-widget-kf5/plugin/awkeys.cpp +++ b/sources/awesome-widget-kf5/plugin/awkeys.cpp @@ -1077,6 +1077,7 @@ void AWKeys::copyUpgrade(const QString original) upgrade->setExecutable(extUpgrade[originalItem]->executable()); upgrade->setName(extUpgrade[originalItem]->name()); upgrade->setNull(extUpgrade[originalItem]->null()); + upgrade->setInterval(extUpgrade[originalItem]->interval()); } if (upgrade->showConfiguration() == 1) { diff --git a/sources/extsysmon/extscript.cpp b/sources/extsysmon/extscript.cpp index b8504d5..8828d09 100644 --- a/sources/extsysmon/extscript.cpp +++ b/sources/extsysmon/extscript.cpp @@ -273,46 +273,45 @@ void ExtScript::readConfiguration() } -ExtScript::ScriptData ExtScript::run(const int time) +QString ExtScript::run() { if (debug) qDebug() << PDEBUG; + if (!m_active) return value; - ScriptData response; - response.active = m_active; - response.name = m_name; - response.refresh = false; - if (!m_active) return response; - if (time != m_interval) return response; - response.refresh = true; + if (times == 1) { + 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 (process.exitCode != 0) + if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; - 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 (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; - - QString info = QString::number(process.exitCode) + QString(":") + - 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: - response.output = info + QString("\t") + qoutput; - break; - default: - if (debug) qDebug() << PDEBUG << ":" << "Debug" << info; - response.output = qoutput; - break; + QString info = QString::number(process.exitCode) + QString(":") + + 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 = info + QString("\t") + qoutput; + break; + default: + if (debug) qDebug() << PDEBUG << ":" << "Debug" << info; + value = qoutput; + break; + } } - return response; + // update value + times++; + if (times >= m_interval) times = 0; + + return value; } diff --git a/sources/extsysmon/extscript.h b/sources/extsysmon/extscript.h index f1a5fb0..b869762 100644 --- a/sources/extsysmon/extscript.h +++ b/sources/extsysmon/extscript.h @@ -44,12 +44,6 @@ public: nothing, stderr2stdout }; - typedef struct { - bool active; - QString name; - QString output; - bool refresh; - } ScriptData; explicit ExtScript(QWidget *parent = 0, const QString scriptName = QString(), const QStringList directories = QStringList(), const bool debugCmd = false); @@ -80,7 +74,7 @@ public: public slots: void readConfiguration(); - ScriptData run(const int time); + QString run(); int showConfiguration(); int tryDelete(); void writeConfiguration(); @@ -100,6 +94,8 @@ private: bool m_output = true; QString m_prefix = QString(""); Redirect m_redirect = nothing; + int times = 0; + QString value = QString(); }; diff --git a/sources/extsysmon/extsysmon.cpp b/sources/extsysmon/extsysmon.cpp index e93e9d4..bab11e3 100644 --- a/sources/extsysmon/extsysmon.cpp +++ b/sources/extsysmon/extsysmon.cpp @@ -145,7 +145,6 @@ void ExtendedSysMon::initScripts() QStandardPaths::LocateDirectory); #endif /* BUILD_KDE4 */ - times.clear(); QStringList names; for (int i=0; irun(times[i]); - if (!data.active) return true; - if (data.refresh) { - times[i] = 1; - setData(source, QString("custom") + QString::number(i), data.output); - } else - times[i]++; - } + for (int i=0; irun()); } else if (source == QString("desktop")) { QMap desktop = getCurrentDesktop(); for (int i=0; i= SEC_IN_HOUR) { - for (int i=0; irun()); - pkgTimeUpdate = 0; - } - pkgTimeUpdate++; + for (int i=0; irun()); } else if (source == QString("player")) { QMap player = getPlayerInfo(configuration[QString("PLAYER")], configuration[QString("MPDADDRESS")], diff --git a/sources/extsysmon/extsysmon.h b/sources/extsysmon/extsysmon.h index ef4620c..8c02e4c 100644 --- a/sources/extsysmon/extsysmon.h +++ b/sources/extsysmon/extsysmon.h @@ -18,10 +18,6 @@ #ifndef EXTSYSMON_H #define EXTSYSMON_H -#ifndef SEC_IN_HOUR -#define SEC_IN_HOUR 60*60 -#endif /* SEC_IN_HOUR */ - #include #include @@ -61,10 +57,7 @@ private: QMap configuration; QList externalScripts; QList externalUpgrade; - QList times; bool debug; - // FIXME dirty hack to avoid update package information every second - int pkgTimeUpdate = SEC_IN_HOUR; // reread configuration QStringList allHddDevices; QString getAllHdd(); diff --git a/sources/extsysmon/extupgrade.cpp b/sources/extsysmon/extupgrade.cpp index bcbee49..18aed2f 100644 --- a/sources/extsysmon/extupgrade.cpp +++ b/sources/extsysmon/extupgrade.cpp @@ -82,6 +82,14 @@ QString ExtUpgrade::fileName() } +int ExtUpgrade::interval() +{ + if (debug) qDebug() << PDEBUG; + + return m_interval; +} + + QString ExtUpgrade::name() { if (debug) qDebug() << PDEBUG; @@ -142,6 +150,15 @@ void ExtUpgrade::setExecutable(const QString _executable) } +void ExtUpgrade::setInterval(const int _interval) +{ + if (debug) qDebug() << PDEBUG; + if (debug) qDebug() << PDEBUG << ":" << "Interval" << _interval; + + m_interval = _interval; +} + + void ExtUpgrade::setName(const QString _name) { if (debug) qDebug() << PDEBUG; @@ -176,6 +193,7 @@ void ExtUpgrade::readConfiguration() setExecutable(settings.value(QString("Exec"), m_executable).toString()); setActive(settings.value(QString("X-AW-Active"), QVariant(m_active)).toString() == QString("true")); setNull(settings.value(QString("X-AW-Null"), m_null).toInt()); + setInterval(settings.value(QString("X-AW-Interval"), m_interval).toInt()); settings.endGroup(); } } @@ -184,16 +202,23 @@ void ExtUpgrade::readConfiguration() int ExtUpgrade::run() { if (debug) qDebug() << PDEBUG; - if (!m_active) return 0; + if (!m_active) return value; - TaskResult process = runTask(QString("bash -c \"") + m_executable + QString("\"")); - if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; + if (times == 1) { + TaskResult process = runTask(QString("bash -c \"") + m_executable + QString("\"")); + 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(); + QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); + value = qoutput.split(QChar('\n'), QString::SkipEmptyParts).count() - m_null; + } - return (qoutput.split(QChar('\n'), QString::SkipEmptyParts).count() - m_null); + // update value + times++; + if (times >= m_interval) times = 0; + + return value; } @@ -209,6 +234,7 @@ int ExtUpgrade::showConfiguration() else ui->checkBox_active->setCheckState(Qt::Unchecked); ui->spinBox_null->setValue(m_null); + ui->spinBox_interval->setValue(m_interval); int ret = exec(); if (ret != 1) return ret; @@ -218,6 +244,7 @@ int ExtUpgrade::showConfiguration() setExecutable(ui->lineEdit_command->text()); setActive(ui->checkBox_active->checkState() == Qt::Checked); setNull(ui->spinBox_null->value()); + setInterval(ui->spinBox_interval->value()); writeConfiguration(); return ret; @@ -254,6 +281,7 @@ void ExtUpgrade::writeConfiguration() settings.setValue(QString("X-AW-ApiVersion"), m_apiVersion); settings.setValue(QString("X-AW-Active"), QVariant(m_active).toString()); settings.setValue(QString("X-AW-Null"), m_null); + settings.setValue(QString("X-AW-Interval"), m_interval); settings.endGroup(); settings.sync(); diff --git a/sources/extsysmon/extupgrade.h b/sources/extsysmon/extupgrade.h index 8038891..6604b49 100644 --- a/sources/extsysmon/extupgrade.h +++ b/sources/extsysmon/extupgrade.h @@ -34,6 +34,7 @@ class ExtUpgrade : public QDialog Q_PROPERTY(QString executable READ executable WRITE setExecutable) Q_PROPERTY(int null READ null WRITE setNull) Q_PROPERTY(bool active READ isActive WRITE setActive) + Q_PROPERTY(int interval READ interval WRITE setInterval) public: explicit ExtUpgrade(QWidget *parent = 0, const QString upgradeName = QString(), @@ -44,6 +45,7 @@ public: QString comment(); QString executable(); QString fileName(); + int interval(); QString name(); int null(); bool isActive(); @@ -54,6 +56,7 @@ public: void setExecutable(const QString _executable = QString("/usr/bin/true")); void setName(const QString _name = QString("none")); void setNull(const int _null = 0); + void setInterval(const int _interval = 0); public slots: void readConfiguration(); @@ -74,6 +77,9 @@ private: QString m_executable = QString("/usr/bin/true"); QString m_name = QString("none"); int m_null = 0; + int m_interval = 3600; + int times = 0; + int value = 0; }; diff --git a/sources/extsysmon/extupgrade.ui b/sources/extsysmon/extupgrade.ui index 30adc57..c41d23d 100644 --- a/sources/extsysmon/extupgrade.ui +++ b/sources/extsysmon/extupgrade.ui @@ -137,6 +137,36 @@ + + + + + + Interval + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 1 + + + 10000 + + + 500 + + + 3600 + + + + + diff --git a/sources/extsysmon/upgrade/default-arch.desktop b/sources/extsysmon/upgrade/default-arch.desktop index 955162c..e027577 100644 --- a/sources/extsysmon/upgrade/default-arch.desktop +++ b/sources/extsysmon/upgrade/default-arch.desktop @@ -6,4 +6,5 @@ Exec=pacman -Qu X-AW-Prefix= X-AW-Active=false X-AW-Null=0 +X-AW-Interval=3600 X-AW-ApiVersion=1 diff --git a/sources/extsysmon/upgrade/default-debian.desktop b/sources/extsysmon/upgrade/default-debian.desktop index 383c396..9c28457 100644 --- a/sources/extsysmon/upgrade/default-debian.desktop +++ b/sources/extsysmon/upgrade/default-debian.desktop @@ -6,4 +6,5 @@ Exec=apt-show-versions -u -b X-AW-Prefix= X-AW-Active=false X-AW-Null=0 +X-AW-Interval=3600 X-AW-ApiVersion=1 diff --git a/sources/extsysmon/upgrade/default-fedora.desktop b/sources/extsysmon/upgrade/default-fedora.desktop index f1ededf..37ed5aa 100644 --- a/sources/extsysmon/upgrade/default-fedora.desktop +++ b/sources/extsysmon/upgrade/default-fedora.desktop @@ -6,4 +6,5 @@ Exec=yum list updates X-AW-Prefix= X-AW-Active=false X-AW-Null=3 +X-AW-Interval=3600 X-AW-ApiVersion=1 diff --git a/sources/extsysmon/upgrade/default-mandriva.desktop b/sources/extsysmon/upgrade/default-mandriva.desktop index 767fed7..4632c72 100644 --- a/sources/extsysmon/upgrade/default-mandriva.desktop +++ b/sources/extsysmon/upgrade/default-mandriva.desktop @@ -6,4 +6,5 @@ Exec=urpmq --auto-select X-AW-Prefix= X-AW-Active=false X-AW-Null=0 +X-AW-Interval=3600 X-AW-ApiVersion=1 diff --git a/sources/extsysmon/upgrade/default-ubuntu.desktop b/sources/extsysmon/upgrade/default-ubuntu.desktop index 76ba0b6..f48895f 100644 --- a/sources/extsysmon/upgrade/default-ubuntu.desktop +++ b/sources/extsysmon/upgrade/default-ubuntu.desktop @@ -6,4 +6,5 @@ Exec=aptitude search '~U' X-AW-Prefix= X-AW-Active=false X-AW-Null=0 +X-AW-Interval=3600 X-AW-ApiVersion=1