From f01fd96cf656a28a10ae33bfaa2c9d3374cfb780 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Wed, 4 Feb 2015 04:17:40 +0300 Subject: [PATCH] add support of smartctl (TODO remove qdbus calls) end work on awesome-widget (prerelease state) --- .../package/contents/ui/main.qml | 61 ++++++++++++++----- .../package/contents/ui/widget.qml | 12 +++- .../awesome-widget-kf5/plugin/awactions.cpp | 14 +++-- sources/awesome-widget-kf5/plugin/awactions.h | 5 +- sources/awesome-widget-kf5/plugin/awkeys.cpp | 49 +++++++++------ sources/awesome-widget-kf5/plugin/awkeys.h | 6 +- .../awesome-widget-kf5/plugin/awtooltip.cpp | 14 ++++- sources/awesome-widget-kf5/plugin/awtooltip.h | 2 + sources/extsysmon/extsysmon.cpp | 20 ++++-- 9 files changed, 132 insertions(+), 51 deletions(-) diff --git a/sources/awesome-widget-kf5/package/contents/ui/main.qml b/sources/awesome-widget-kf5/package/contents/ui/main.qml index 648c388..da09468 100644 --- a/sources/awesome-widget-kf5/package/contents/ui/main.qml +++ b/sources/awesome-widget-kf5/package/contents/ui/main.qml @@ -17,6 +17,7 @@ import QtQuick 2.4 import QtQuick.Controls 1.3 as QtControls +import QtQuick.Layouts 1.1 import org.kde.plasma.plasmoid 2.0 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents @@ -39,7 +40,7 @@ Item { property variant tooltipSettings: { "tooltipNumber": plasmoid.configuration.tooltipNumber, "useTooltipBackground": plasmoid.configuration.useTooltipBackground, - "tooltipBackgroung": plasmoid.configuration.tooltipBackgroung, + "tooltipBackground": plasmoid.configuration.tooltipBackground, "cpuTooltip": plasmoid.configuration.cpuTooltip, "cpuclTooltip": plasmoid.configuration.cpuclTooltip, "memTooltip": plasmoid.configuration.memTooltip, @@ -61,6 +62,14 @@ Item { // init + Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation + Plasmoid.compactRepresentation: Plasmoid.fullRepresentation + + Layout.fillWidth: plasmoid.formFactor != PlasmaCore.Planar + Layout.fillHeight: plasmoid.formFactor != PlasmaCore.Planar + Layout.minimumHeight: text.height + Layout.minimumWidth: text.width + Plasmoid.icon: "utilities-system-monitor" Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground" Plasmoid.associatedApplication: "ksysguard" @@ -68,18 +77,19 @@ Item { PlasmaCore.DataSource { id: systemmonitorDE engine: "systemmonitor" + connectedSources: systemmonitorDE.sources interval: plasmoid.configuration.interval onNewData: { if (debug) console.log("[main::onNewData] : Update source " + sourceName) - AWKeys.setDataBySource(sourceName, data, settings) + if (AWKeys.setDataBySource(sourceName, data, settings)) disconnectSource(sourceName) } onSourceAdded: { if (debug) console.log("[main::onSourceAdded] : Source " + source) - if (AWKeys.addDevice(source)) systemmonitorDE.connectSource(source) + AWKeys.addDevice(source) } } @@ -110,27 +120,35 @@ Item { } } + // ui Grid { - id: mainGrid columns: 1 Text { id: text + height: contentHeight + width: contentWidth + textFormat: Text.RichText + wrapMode: Text.NoWrap + + horizontalAlignment: general.align[plasmoid.configuration.textAlign] + verticalAlignment: Text.AlignVCenter + color: plasmoid.configuration.fontColor font.family: plasmoid.configuration.fontFamily font.italic: plasmoid.configuration.fontStyle == "italic" ? true : false font.pointSize: plasmoid.configuration.fontSize font.weight: general.fontWeight[plasmoid.configuration.fontWeight] - horizontalAlignment: general.align[plasmoid.configuration.textAlign] - textFormat: Text.RichText + text: plasmoid.configuration.text PlasmaCore.ToolTipArea { + id: rootTooltip + mainItem: Text { id: tooltip - height: 100 - width: 500 - mainText: "Awesome Widget" + textFormat: Text.RichText + } } } } @@ -138,25 +156,32 @@ Item { Component.onCompleted: { if (debug) console.log("[main::onCompleted]") - // init submodule - AWKeys.initKeys(plasmoid.configuration.text, tooltipSettings) // actions plasmoid.setAction("requestKey", i18n("Request key"), "utilities-system-monitor") plasmoid.setAction("showReadme", i18n("Show README"), "text-x-readme") plasmoid.setAction("checkUpdates", i18n("Check updates"), "system-software-update") +// plasmoid.setAction("report", i18n("Mail to developers"), "email") + // init submodule + Plasmoid.userConfiguringChanged(true) } onNeedUpdate: { if (debug) console.log("[main::onNeedUpdate]") text.text = AWKeys.parsePattern(plasmoid.configuration.text) - // FIXME change to pixmap/image/etc - tooltip.image = AWKeys.toolTipImage() + tooltip.text = AWKeys.toolTipImage() // update geometry text.update() - height = text.contentHeight - width = text.contentWidth + height = text.height + width = text.width update() + rootTooltip.height = AWKeys.toolTipSize().height + rootTooltip.width = AWKeys.toolTipSize().width + } + + Plasmoid.onUserConfiguringChanged: { + // init submodule + AWKeys.initKeys(plasmoid.configuration.text, tooltipSettings) } function action_checkUpdates() { @@ -171,6 +196,12 @@ Item { AWActions.showReadme() } + function action_report() { + if (debug) console.log("[main::action_report]") + + AWActions.sendEmail() + } + function action_requestKey() { if (debug) console.log("[main::action_requestKey]") diff --git a/sources/awesome-widget-kf5/package/contents/ui/widget.qml b/sources/awesome-widget-kf5/package/contents/ui/widget.qml index f174ec0..f232e56 100644 --- a/sources/awesome-widget-kf5/package/contents/ui/widget.qml +++ b/sources/awesome-widget-kf5/package/contents/ui/widget.qml @@ -64,7 +64,7 @@ Item { Column { id: pageColumn - width: units.gridUnit * 50 + width: units.gridUnit * 25 QtControls.Label { width: parent.width horizontalAlignment: Text.AlignHCenter @@ -78,6 +78,7 @@ Item { width: parent.width QtControls.Button { text: i18n("Font") + iconName: "font" onClicked: { if (debug) console.log("[widget::onClicked] : Font button") @@ -207,12 +208,17 @@ Item { textPattern.insert(pos, "

" + selected + "setComponentName(QString("plasma-applet-org.kde.plasma.awesome-widget")); } @@ -199,6 +194,13 @@ void AWActions::writeDataEngineConfiguration(const QMap confi } +void AWActions::sendNotification(const QString eventId, const QString message) +{ + KNotification *notification = KNotification::event(eventId, QString("Awesome Widget ::: ") + eventId, message); + notification->setComponentName(QString("plasma-applet-org.kde.plasma.awesome-widget")); +} + + void AWActions::showUpdates(QString version) { if (debug) qDebug() << PDEBUG; diff --git a/sources/awesome-widget-kf5/plugin/awactions.h b/sources/awesome-widget-kf5/plugin/awactions.h index e577af5..0008620 100644 --- a/sources/awesome-widget-kf5/plugin/awactions.h +++ b/sources/awesome-widget-kf5/plugin/awactions.h @@ -36,7 +36,7 @@ public: Q_INVOKABLE void checkUpdates(); Q_INVOKABLE void runCmd(const QString cmd = QString("/usr/bin/true")); - Q_INVOKABLE void sendNotification(const QString eventId, const QString message); + Q_INVOKABLE void sendEmail(); Q_INVOKABLE void showReadme(); // configuration slots Q_INVOKABLE QString getAboutText(const QString type = "header"); @@ -45,6 +45,9 @@ public: Q_INVOKABLE QMap readDataEngineConfiguration(); Q_INVOKABLE void writeDataEngineConfiguration(const QMap configuration); +public slots: + Q_INVOKABLE static void sendNotification(const QString eventId, const QString message); + private slots: void showUpdates(QString version); void versionReplyRecieved(QNetworkReply *reply); diff --git a/sources/awesome-widget-kf5/plugin/awkeys.cpp b/sources/awesome-widget-kf5/plugin/awkeys.cpp index cf45df8..00cd702 100644 --- a/sources/awesome-widget-kf5/plugin/awkeys.cpp +++ b/sources/awesome-widget-kf5/plugin/awkeys.cpp @@ -19,7 +19,7 @@ #include -// #include +#include #include #include #include @@ -80,15 +80,6 @@ AWKeys::~AWKeys() } -bool AWKeys::checkKeys(const QMap data) -{ - if (debug) qDebug() << PDEBUG; - if (debug) qDebug() << PDEBUG << ":" << "Data" << data; - - return (data.count() != 0); -} - - void AWKeys::initKeys(const QString pattern, const QMap tooltipParams) { @@ -101,7 +92,7 @@ void AWKeys::initKeys(const QString pattern, keys.clear(); foundBars.clear(); foundKeys.clear(); - toolTip = nullptr; + if (toolTip != nullptr) delete toolTip; // init extScripts = getExtScripts(); @@ -130,6 +121,7 @@ QString AWKeys::parsePattern(const QString pattern) if (!ready) return pattern; QString parsed = pattern; + parsed.replace(QString(" "), QString(" ")); parsed.replace(QString("$$"), QString("$\\$\\")); for (int i=0; iimage(); -// QByteArray byteArray; -// QBuffer buffer(&byteArray); -// tooltip.save(&buffer, "PNG"); -// return QString("").arg(QString(byteArray.toBase64())); + QPixmap tooltip = toolTip->image(); + QByteArray byteArray; + QBuffer buffer(&byteArray); + tooltip.save(&buffer, "PNG"); + + return QString("").arg(QString(byteArray.toBase64())); +} + + +QSize AWKeys::toolTipSize() +{ + if (debug) qDebug() << PDEBUG; + + return toolTip->getSize(); } @@ -672,6 +673,9 @@ bool AWKeys::setDataBySource(const QString sourceName, values[QString("cuptime")].replace(QString("$h"), QString("%1").arg(hours)); values[QString("cuptime")].replace(QString("$mm"), QString("%1").arg(minutes, 2, 10, QChar('0'))); values[QString("cuptime")].replace(QString("$m"), QString("%1").arg(minutes)); + } else { + if (debug) qDebug() << PDEBUG << ":" << "Source not found"; + return true; } return false; @@ -954,6 +958,15 @@ void AWKeys::copyUpgrade(const QString original) } +bool AWKeys::checkKeys(const QMap data) +{ + if (debug) qDebug() << PDEBUG; + if (debug) qDebug() << PDEBUG << ":" << "Data" << data; + + return (data.count() != 0); +} + + QString AWKeys::networkDevice() { if (debug) qDebug() << PDEBUG; diff --git a/sources/awesome-widget-kf5/plugin/awkeys.h b/sources/awesome-widget-kf5/plugin/awkeys.h index 6dea441..58639c0 100644 --- a/sources/awesome-widget-kf5/plugin/awkeys.h +++ b/sources/awesome-widget-kf5/plugin/awkeys.h @@ -25,7 +25,6 @@ #include #include #include -#include #include #include @@ -50,12 +49,12 @@ public: AWKeys(QObject *parent = 0); ~AWKeys(); - Q_INVOKABLE bool checkKeys(const QMap data); Q_INVOKABLE void initKeys(const QString pattern, const QMap tooltipParams); Q_INVOKABLE bool isDebugEnabled(); Q_INVOKABLE QString parsePattern(const QString pattern); - Q_INVOKABLE QPixmap toolTipImage(); + Q_INVOKABLE QString toolTipImage(); + Q_INVOKABLE QSize toolTipSize(); // keys Q_INVOKABLE bool addDevice(const QString source); Q_INVOKABLE QStringList dictKeys(); @@ -82,6 +81,7 @@ private slots: private: // methods + bool checkKeys(const QMap data); QString networkDevice(); int numberCpus(); float temperature(const float temp, const QString units = QString("Celsius")); diff --git a/sources/awesome-widget-kf5/plugin/awtooltip.cpp b/sources/awesome-widget-kf5/plugin/awtooltip.cpp index e9f86ec..b6cad96 100644 --- a/sources/awesome-widget-kf5/plugin/awtooltip.cpp +++ b/sources/awesome-widget-kf5/plugin/awtooltip.cpp @@ -56,6 +56,8 @@ AWToolTip::AWToolTip(QObject *parent, boundaries[QString("downTooltip")] = 1.0; boundaries[QString("upTooltip")] = 1.0; boundaries[QString("batTooltip")] = 100.0; + size.setHeight(105.0); + size.setWidth(100.0 * counts); if (configuration[QString("cpuTooltip")].toBool()) requiredKeys.append(QString("cpuTooltip")); if (configuration[QString("cpuclTooltip")].toBool()) requiredKeys.append(QString("cpuclTooltip")); @@ -76,17 +78,25 @@ AWToolTip::~AWToolTip() } +QSize AWToolTip::getSize() +{ + if (debug) qDebug() << PDEBUG; + + return size; +} + + QPixmap AWToolTip::image() { if (debug) qDebug() << PDEBUG; - toolTipView->resize(100.0 * counts, 105.0); + toolTipView->resize(size); // create image toolTipScene->clear(); QPen pen = QPen(); // background if (configuration[QString("useTooltipBackground")].toBool()) - toolTipScene->setBackgroundBrush(QColor(configuration[QString("tooltipBackground")].toString())); + toolTipScene->setBackgroundBrush(QBrush(QColor(configuration[QString("tooltipBackground")].toString()))); else toolTipScene->setBackgroundBrush(QBrush(Qt::NoBrush)); bool down = false; diff --git a/sources/awesome-widget-kf5/plugin/awtooltip.h b/sources/awesome-widget-kf5/plugin/awtooltip.h index b633638..859fb64 100644 --- a/sources/awesome-widget-kf5/plugin/awtooltip.h +++ b/sources/awesome-widget-kf5/plugin/awtooltip.h @@ -36,6 +36,7 @@ public: QMap settings = QMap()); ~AWToolTip(); + QSize getSize(); QPixmap image(); void setData(const QString source, float value, const bool ac = true); @@ -51,6 +52,7 @@ private: QMap boundaries; QMap> data; QStringList requiredKeys; + QSize size; }; diff --git a/sources/extsysmon/extsysmon.cpp b/sources/extsysmon/extsysmon.cpp index 2278f80..cffe788 100644 --- a/sources/extsysmon/extsysmon.cpp +++ b/sources/extsysmon/extsysmon.cpp @@ -449,11 +449,23 @@ float ExtendedSysMon::getHddTemp(const QString cmd, const QString device) if (process.exitCode != 0) if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; + bool smartctl = cmd.contains(QString("smartctl")); + if (debug) qDebug() << PDEBUG << ":" << "Define smartctl" << smartctl; + QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); - if (qoutput.split(QChar(':'), QString::SkipEmptyParts).count() >= 3) { - QString temp = qoutput.split(QChar(':'), QString::SkipEmptyParts)[2]; - temp.remove(QChar(0260)).remove(QChar('C')); - value = temp.toFloat(); + if (smartctl) { + for (int i=0; i