From f5fbb80d91eb615f5c2cec9d17b9d8f43ca37c12 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Mon, 19 Jan 2015 08:31:48 +0300 Subject: [PATCH] work on plugin --- sources/awesome-widget-kf5/plugin/awadds.cpp | 388 +++++++++++++++++- sources/awesome-widget-kf5/plugin/awadds.h | 31 ++ ...let-org.kde.plasma.awesome-widget.notifyrc | 7 +- 3 files changed, 417 insertions(+), 9 deletions(-) diff --git a/sources/awesome-widget-kf5/plugin/awadds.cpp b/sources/awesome-widget-kf5/plugin/awadds.cpp index 80f4287..2b95498 100644 --- a/sources/awesome-widget-kf5/plugin/awadds.cpp +++ b/sources/awesome-widget-kf5/plugin/awadds.cpp @@ -21,18 +21,23 @@ #include #include +#include +#include #include #include #include #include +#include #include #include #include #include +#include #include -#include +//#include +#include "extscript.h" #include "graphicalitem.h" #include "version.h" @@ -44,6 +49,8 @@ AWAdds::AWAdds(QObject *parent) QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); QString debugEnv = environment.value(QString("DEBUG"), QString("no")); debug = (debugEnv == QString("yes")); + + initValues(); } @@ -53,6 +60,41 @@ AWAdds::~AWAdds() } +void AWAdds::checkUpdates() +{ + if (debug) qDebug() << PDEBUG; + + QNetworkAccessManager *manager = new QNetworkAccessManager(this); + connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(versionReplyRecieved(QNetworkReply *))); + + manager->get(QNetworkRequest(QUrl(VERSION_API))); +} + + +void AWAdds::initValues() +{ + if (debug) qDebug() << PDEBUG; + + // clear + extScripts.clear(); + graphicalItems.clear(); + keys.clear(); + + // init + extScripts = getExtScripts(); + graphicalItems = getGraphicalItems(); + keys = dictKeys(); +} + + +bool AWAdds::isDebugEnabled() +{ + if (debug) qDebug() << PDEBUG; + + return debug; +} + + QString AWAdds::networkDevice(const QString custom) { if (debug) qDebug() << PDEBUG; @@ -79,14 +121,26 @@ int AWAdds::numberCpus() { if (debug) qDebug() << PDEBUG; - QString cmd = QString("grep -c ^processor /proc/cpuinfo"); - 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; + return QThread::idealThreadCount(); +} - return QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed().toInt(); + +QString AWAdds::parsePattern(const QString pattern, const QMap dict, + const QMap values, + const QStringList foundKeys, const QStringList foundBars) +{ + if (debug) qDebug() << PDEBUG; + if (debug) qDebug() << PDEBUG << ":" << "Dictionary" << dict; + + QString parsed = pattern; + parsed.replace(QString("$$"), QString("$\\$\\")); + for (int i=0; igetImage(values[foundBars[i]].toFloat())); + parsed.replace(QString("$\\$\\"), QString("$$")); + + return parsed; } @@ -114,6 +168,136 @@ float AWAdds::tempepature(const float temp, const QString units) } +QMap AWAdds::counts() +{ + if (debug) qDebug() << PDEBUG; + + QMap awCounts; + awCounts[QString("cpu")] = numberCpus(); + awCounts[QString("custom")] = getExtScripts().count(); +// awCounts[QString("disk")] = configuration[QString("disk")].split(QString("@@")).count(); +// awCounts[QString("fan")] = configuration[QString("fanDevice")].split(QString("@@")).count(); +// awCounts[QString("hddtemp")] = configuration[QString("hdd")].split(QString("@@")).count(); +// awCounts[QString("mount")] = configuration[QString("mount")].split(QString("@@")).count(); +// awCounts[QString("pkg")] = deSettings[QString("PKGCMD")].split(QChar(',')).count(); +// awCounts[QString("temp")] = configuration[QString("tempDevice")].split(QString("@@")).count(); +// awCounts[QString("tooltip")] = 0; +// awCounts[QString("tooltip")] += configuration[QString("cpuTooltip")].toInt(); +// awCounts[QString("tooltip")] += configuration[QString("cpuclTooltip")].toInt(); +// awCounts[QString("tooltip")] += configuration[QString("memTooltip")].toInt(); +// awCounts[QString("tooltip")] += configuration[QString("swapTooltip")].toInt(); +// awCounts[QString("tooltip")] += configuration[QString("downTooltip")].toInt(); +// awCounts[QString("tooltip")] += configuration[QString("batteryTooltip")].toInt(); +// awCounts[QString("tooltip")] = counts[QString("tooltip")] / 2; + + return awCounts; +} + + +QStringList AWAdds::dictKeys() +{ + if (debug) qDebug() << PDEBUG; + + QMap awCounts = counts(); + QStringList allKeys; + // time + allKeys.append(QString("time")); + allKeys.append(QString("isotime")); + allKeys.append(QString("shorttime")); + allKeys.append(QString("longtime")); + allKeys.append(QString("ctime")); + // uptime + allKeys.append(QString("uptime")); + allKeys.append(QString("cuptime")); + // cpuclock + for (int i=awCounts[QString("cpu")].toInt()-1; i>=0; i--) + allKeys.append(QString("cpucl") + QString::number(i)); + allKeys.append(QString("cpucl")); + // cpu + for (int i=awCounts[QString("cpu")].toInt()-1; i>=0; i--) + allKeys.append(QString("cpu") + QString::number(i)); + allKeys.append(QString("cpu")); + // temperature + for (int i=awCounts[QString("temp")].toInt()-1; i>=0; i--) + allKeys.append(QString("temp") + QString::number(i)); + for (int i=awCounts[QString("fan")].toInt()-1; i>=0; i--) + allKeys.append(QString("fan") + QString::number(i)); + // gputemp + allKeys.append(QString("gputemp")); + // gpu + allKeys.append(QString("gpu")); + // memory + allKeys.append(QString("memmb")); + allKeys.append(QString("memgb")); + allKeys.append(QString("memfreemb")); + allKeys.append(QString("memfreegb")); + allKeys.append(QString("memtotmb")); + allKeys.append(QString("memtotgb")); + allKeys.append(QString("memusedmb")); + allKeys.append(QString("memusedgb")); + allKeys.append(QString("mem")); + // swap + allKeys.append(QString("swapmb")); + allKeys.append(QString("swapgb")); + allKeys.append(QString("swapfreemb")); + allKeys.append(QString("swapfreegb")); + allKeys.append(QString("swaptotmb")); + allKeys.append(QString("swaptotgb")); + allKeys.append(QString("swap")); + // hdd + for (int i=awCounts[QString("mount")].toInt()-1; i>=0; i--) { + allKeys.append(QString("hddmb") + QString::number(i)); + allKeys.append(QString("hddgb") + QString::number(i)); + allKeys.append(QString("hddfreemb") + QString::number(i)); + allKeys.append(QString("hddfreegb") + QString::number(i)); + allKeys.append(QString("hddtotmb") + QString::number(i)); + allKeys.append(QString("hddtotgb") + QString::number(i)); + allKeys.append(QString("hdd") + QString::number(i)); + } + // hdd speed + for (int i=awCounts[QString("disk")].toInt()-1; i>=0; i--) { + allKeys.append(QString("hddr") + QString::number(i)); + allKeys.append(QString("hddw") + QString::number(i)); + } + // hdd temp + for (int i=awCounts[QString("hddtemp")].toInt()-1; i>=0; i--) { + allKeys.append(QString("hddtemp") + QString::number(i)); + allKeys.append(QString("hddtemp") + QString::number(i)); + } + // network + allKeys.append(QString("down")); + allKeys.append(QString("up")); + allKeys.append(QString("netdev")); + // battery + allKeys.append(QString("ac")); + for (int i=awCounts[QString("bat")].toInt()-1; i>=0; i--) + allKeys.append(QString("bat") + QString::number(i)); + allKeys.append(QString("bat")); + // player + allKeys.append(QString("album")); + allKeys.append(QString("artist")); + allKeys.append(QString("duration")); + allKeys.append(QString("progress")); + allKeys.append(QString("title")); + // ps + allKeys.append(QString("pscount")); + allKeys.append(QString("pstotal")); + allKeys.append(QString("ps")); + // package manager + for (int i=awCounts[QString("pkg")].toInt()-1; i>=0; i--) + allKeys.append(QString("pkgcount") + QString::number(i)); + // custom + for (int i=awCounts[QString("custom")].toInt()-1; i>=0; i--) + allKeys.append(QString("custom") + QString::number(i)); + // desktop + allKeys.append(QString("desktop")); + allKeys.append(QString("ndesktop")); + allKeys.append(QString("tdesktops")); + + return allKeys; +} + + QStringList AWAdds::timeKeys() { if (debug) qDebug() << PDEBUG; @@ -140,6 +324,70 @@ QStringList AWAdds::timeKeys() } +QStringList AWAdds::findGraphicalItems(const QString pattern) +{ + if (debug) qDebug() << PDEBUG; + + QStringList orderedKeys; + for (int i=0; igetName() + graphicalItems[i]->getBar()); + orderedKeys.sort(); + + QStringList selectedKeys; + for (int i=orderedKeys.count()-1; i>=0; i--) + if (pattern.contains(QString("$") + orderedKeys[i])) { + if (debug) qDebug() << PDEBUG << ":" << "Found key" << orderedKeys[i]; + selectedKeys.append(orderedKeys[i]); + } + + return selectedKeys; +} + + +QString AWAdds::findKeys(const QString pattern) +{ + QStringList selectedKeys; + for (int i=0; isetComponentName(QString("plasma-applet-org.kde.plasma.awesome-widget")); +} + + +void AWAdds::showReadme() +{ + if (debug) qDebug() << PDEBUG; + + QDesktopServices::openUrl(QString(HOMEPAGE)); +} + + QMap AWAdds::readDataEngineConfiguration() { if (debug) qDebug() << PDEBUG; @@ -204,3 +452,127 @@ void AWAdds::writeDataEngineConfiguration(const QMap configur settings.sync(); } + + +void AWAdds::showUpdates(QString version) +{ + if (debug) qDebug() << PDEBUG; + + QString text; + text += i18n("Current version : %1", QString(VERSION)) + QString("\n"); + text += i18n("New version : %1", version) + QString("\n\n"); + text += i18n("Click \"Ok\" to download"); + + int select = QMessageBox::information(0, i18n("There are updates"), text, QMessageBox::Ok | QMessageBox::Cancel); + switch(select) { + case QMessageBox::Ok: + QDesktopServices::openUrl(QString(RELEASES) + version); + break; + } +} + + +void AWAdds::versionReplyRecieved(QNetworkReply *reply) +{ + if (debug) qDebug() << PDEBUG; + + QString answer = reply->readAll(); + if (!answer.contains(QString("tag_name"))) return; + QString version = QString(VERSION); + if (debug) qDebug() << PDEBUG << answer; + for (int i=0; i AWAdds::getExtScripts() +{ + if (debug) qDebug() << PDEBUG; + + QList externalScripts; + // create directory at $HOME + QString localDir = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + + QString("/plasma_engine_extsysmon/scripts"); + QDir localDirectory; + if (localDirectory.mkdir(localDir)) + if (debug) qDebug() << PDEBUG << ":" << "Created directory" << localDir; + + QStringList dirs = QStandardPaths::locateAll(QStandardPaths::DataLocation, + QString("plasma_engine_extsysmon/scripts"), + QStandardPaths::LocateDirectory); + QStringList names; + for (int i=0; i AWAdds::getGraphicalItems() +{ + if (debug) qDebug() << PDEBUG; + + QList items; + // create directory at $HOME + QString localDir = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + + QString("/plasma_applet_awesome-widget/desktops"); + QDir localDirectory; + if (localDirectory.mkdir(localDir)) + if (debug) qDebug() << PDEBUG << ":" << "Created directory" << localDir; + + QStringList dirs = QStandardPaths::locateAll(QStandardPaths::DataLocation, + QString("plasma_applet_awesome-widget/desktops"), + QStandardPaths::LocateDirectory); + QStringList names; + for (int i=0; igetName() + graphicalItems[i]->getBar()) != tag) continue; + item = graphicalItems[i]; + break; + } + + return item; +} diff --git a/sources/awesome-widget-kf5/plugin/awadds.h b/sources/awesome-widget-kf5/plugin/awadds.h index 6d1df6a..4f3adea 100644 --- a/sources/awesome-widget-kf5/plugin/awadds.h +++ b/sources/awesome-widget-kf5/plugin/awadds.h @@ -25,6 +25,10 @@ #include +class ExtScript; +class GraphicalItem; +class QNetworkReply; + class AWAdds : public QObject { Q_OBJECT @@ -33,17 +37,44 @@ public: AWAdds(QObject *parent = 0); ~AWAdds(); + Q_INVOKABLE void checkUpdates(); + Q_INVOKABLE void initValues(); + Q_INVOKABLE bool isDebugEnabled(); Q_INVOKABLE QString networkDevice(const QString custom = QString("")); Q_INVOKABLE int numberCpus(); + Q_INVOKABLE QString parsePattern(const QString pattern, const QMap dict, + const QMap values, + const QStringList foundKeys, const QStringList foundBars); Q_INVOKABLE float tempepature(const float temp, const QString units = QString("Celsius")); + // keys + Q_INVOKABLE QMap counts(); + Q_INVOKABLE QStringList dictKeys(); +// Q_INVOKABLE QStringList graphicalItemsNames(); Q_INVOKABLE QStringList timeKeys(); + Q_INVOKABLE QStringList findGraphicalItems(const QString pattern); + Q_INVOKABLE QStringList findKeys(const QString pattern); + // actions + Q_INVOKABLE void runCmd(const QString cmd = QString("/usr/bin/true")); + Q_INVOKABLE void sendNotification(const QString eventId, const QString message); + Q_INVOKABLE void showReadme(); // dataengine Q_INVOKABLE QMap readDataEngineConfiguration(); Q_INVOKABLE void writeDataEngineConfiguration(const QMap configuration); +private slots: + void showUpdates(QString version); + void versionReplyRecieved(QNetworkReply *reply); + private: + QList getExtScripts(); + QList getGraphicalItems(); + GraphicalItem *getItemByTag(const QString tag); QMap updateDataEngineConfiguration(QMap rawConfig); + // variables bool debug = false; + QList graphicalItems; + QList extScripts; + QStringList keys; }; diff --git a/sources/awesome-widget-kf5/plugin/plasma-applet-org.kde.plasma.awesome-widget.notifyrc b/sources/awesome-widget-kf5/plugin/plasma-applet-org.kde.plasma.awesome-widget.notifyrc index 5cca673..9adf307 100644 --- a/sources/awesome-widget-kf5/plugin/plasma-applet-org.kde.plasma.awesome-widget.notifyrc +++ b/sources/awesome-widget-kf5/plugin/plasma-applet-org.kde.plasma.awesome-widget.notifyrc @@ -1,7 +1,12 @@ [Global] IconName=system Name=Awesome Widget -Comment=Awesome widget information +Comment=Awesome widget notifications + +[info] +Name=Information +Comment=Information +Action=Popup [Event/system] Name=System information