move back desktop files

add widget configuration
append plugin slots
rewrite KF5 and DE to use ExtUpgrade class
some fixes
This commit is contained in:
arcan1s 2015-01-30 02:43:31 +03:00
parent c5a0ba3796
commit 16170c72b0
39 changed files with 1236 additions and 137 deletions

View File

@ -47,6 +47,3 @@ endif ()
# translations
# add_subdirectory (translations)
# aw bars desktops
set (AW_DESKTOPS ${CMAKE_CURRENT_SOURCE_DIR}/desktops)
install (DIRECTORY ${AW_DESKTOPS} DESTINATION ${DATA_INSTALL_DIR}/plasma_applet_awesome-widget)

View File

@ -26,6 +26,7 @@ file (GLOB_RECURSE SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp
set (TASK_HEADER ${PROJECT_TRDPARTY_DIR}/task/task.h)
file (GLOB SUBPROJECT_UI *.ui ${PROJECT_TRDPARTY_DIR}/about/*.ui)
file (GLOB SUBPROJECT_NOTIFY *.notifyrc)
set (SUBPROJECT_DESKTOPS ${CMAKE_CURRENT_SOURCE_DIR}/desktops)
# prepare
configure_file (${SUBPROJECT_DESKTOP_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP})
@ -40,3 +41,4 @@ target_link_libraries (${PLUGIN_NAME} ${KDE4_PLASMA_LIBS} ${KDE4_KDEUI_LIBS} ${K
install (TARGETS ${PLUGIN_NAME} DESTINATION ${PLUGIN_INSTALL_DIR})
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP} DESTINATION ${SERVICES_INSTALL_DIR})
install (FILES ${SUBPROJECT_NOTIFY} DESTINATION ${DATA_INSTALL_DIR}/${PLUGIN_NAME})
install (DIRECTORY ${SUBPROJECT_DESKTOPS} DESTINATION ${DATA_INSTALL_DIR}/${PLUGIN_NAME})

View File

@ -825,7 +825,7 @@ void AwesomeWidget::contextMenuCustomCommand(const QPoint pos)
else if (action == copy)
copyCustomCommand(uiDEConfig.listWidget_custom->currentItem()->text());
else if (action == remove) {
QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_engine_extsysmon/scripts");
QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_dataengine_extsysmon/scripts");
ExtScript *script = new ExtScript(0, uiDEConfig.listWidget_custom->currentItem()->text(), dirs, debug);
script->tryDelete();
delete script;
@ -954,7 +954,7 @@ void AwesomeWidget::editCustomCommand(QListWidgetItem *item)
{
if (debug) qDebug() << PDEBUG;
QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_engine_extsysmon/scripts");
QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_dataengine_extsysmon/scripts");
ExtScript *script = new ExtScript(0, item->text(), dirs, debug);
script->showConfiguration();
}
@ -1006,11 +1006,11 @@ QList<ExtScript *> AwesomeWidget::initScripts()
QList<ExtScript *> externalScripts;
// create directory at $HOME
QString localDir = KStandardDirs::locateLocal("data", "plasma_engine_extsysmon/scripts");
QString localDir = KStandardDirs::locateLocal("data", "plasma_dataengine_extsysmon/scripts");
if (KStandardDirs::makeDir(localDir))
if (debug) qDebug() << PDEBUG << ":" << "Created directory" << localDir;
QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_engine_extsysmon/scripts");
QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_dataengine_extsysmon/scripts");
QStringList names;
for (int i=0; i<dirs.count(); i++) {
QStringList files = QDir(dirs[i]).entryList(QDir::Files, QDir::Name);

View File

@ -9,3 +9,4 @@ X-AW-Type=Horizontal
X-AW-Direction=LeftToRight
X-AW-Height=25
X-AW-Width=100
X-AW-ApiVersion=1

View File

@ -9,3 +9,4 @@ X-AW-Type=Horizontal
X-AW-Direction=LeftToRight
X-AW-Height=25
X-AW-Width=100
X-AW-ApiVersion=1

View File

@ -9,3 +9,4 @@ X-AW-Type=Horizontal
X-AW-Direction=LeftToRight
X-AW-Height=25
X-AW-Width=100
X-AW-ApiVersion=1

View File

@ -9,3 +9,4 @@ X-AW-Type=Horizontal
X-AW-Direction=LeftToRight
X-AW-Height=25
X-AW-Width=100
X-AW-ApiVersion=1

View File

@ -21,3 +21,5 @@ X-AW-Direction=LeftToRight
X-AW-Height=25
# width in pixels
X-AW-Width=100
# API version
X-AW-ApiVersion=1

View File

@ -21,9 +21,9 @@ import org.kde.plasma.configuration 2.0
ConfigModel {
// ConfigCategory {
// name: i18n("Widget")
// icon: "utilities-system-monitor"
// source: "widget.qml"
// }
ConfigCategory {
name: i18n("Widget")
icon: "utilities-system-monitor"
source: "widget.qml"
}
}

View File

@ -99,6 +99,12 @@ Item {
if ((data.value == "N\\A") || (data.value == "")) return
if (AWKeys.isReady()) AWKeys.setDataBySource(sourceName, data, settings)
}
onSourceAdded: {
if (debug) console.log("[main::onSourceAdded] : Source " + source)
AWActions.addDevice(source)
}
}
PlasmaCore.DataSource {

View File

@ -0,0 +1,223 @@
/***************************************************************************
* This file is part of awesome-widgets *
* *
* awesome-widgets is free software: you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* awesome-widgets is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
import QtQuick 2.0
import QtQuick.Controls 1.3 as QtControls
import QtQuick.Dialogs 1.1 as QtDialogs
import QtQuick.Layouts 1.0 as QtLayouts
import QtQuick.Controls.Styles 1.3 as QtStyles
import org.kde.plasma.private.awesomewidget 1.0
Item {
id: widgetPage
width: childrenRect.width
height: childrenRect.height
implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight
property bool debug: AWKeys.isDebugEnabled()
property alias cfg_text: textPattern.text
Column {
id: pageColumn
width: units.gridUnit * 50
QtControls.Label {
width: parent.width
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: i18n("Detailed information may be found on <a href=\"http://arcanis.name/projects/awesome-widgets/\">project homepage</a>")
}
Row {
height: implicitHeight
width: parent.width
QtControls.Button {
text: i18n("Font")
onClicked: {
if (debug) console.log("[widget::onClicked] : Font button")
var defaultFont = {
"color": plasmoid.configuration.fontColor,
"family": plasmoid.configuration.fontFamily,
"size": plasmoid.configuration.fontSize
}
var font = AWActions.getFont(defaultFont)
var pos = textPattern.cursorPosition
var selected = textPattern.selectedText
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
textPattern.insert(pos, "<span style=\"color:" + font.color +
"; font-family:'" + font.family +
"'; font-size:" + font.size + "pt;\">" +
selected + "</span>")
}
}
QtControls.Button {
iconName: "format-indent-more"
onClicked: {
if (debug) console.log("[widget::onClicked] : Indent button")
var pos = textPattern.cursorPosition
var selected = textPattern.selectedText
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
textPattern.insert(pos, selected + "<br>\n")
}
}
QtControls.Button {
iconName: "format-text-bold"
onClicked: {
if (debug) console.log("[widget::onClicked] : Bold button")
var pos = textPattern.cursorPosition
var selected = textPattern.selectedText
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
textPattern.insert(pos, "<b>" + selected + "</b>")
}
}
QtControls.Button {
iconName: "format-text-italic"
onClicked: {
if (debug) console.log("[widget::onClicked] : Italic button")
var pos = textPattern.cursorPosition
var selected = textPattern.selectedText
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
textPattern.insert(pos, "<i>" + selected + "</i>")
}
}
QtControls.Button {
iconName: "format-text-underline"
onClicked: {
if (debug) console.log("[widget::onClicked] : Underline button")
var pos = textPattern.cursorPosition
var selected = textPattern.selectedText
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
textPattern.insert(pos, "<u>" + selected + "</u>")
}
}
QtControls.Button {
iconName: "format-text-strikethrough"
onClicked: {
if (debug) console.log("[widget::onClicked] : Strike button")
var pos = textPattern.cursorPosition
var selected = textPattern.selectedText
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
textPattern.insert(pos, "<s>" + selected + "</s>")
}
}
QtControls.Button {
iconName: "format-justify-left"
onClicked: {
if (debug) console.log("[widget::onClicked] : Left button")
var pos = textPattern.cursorPosition
var selected = textPattern.selectedText
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
textPattern.insert(pos, "<p align=\"left\">" + selected + "</p")
}
}
QtControls.Button {
iconName: "format-justify-center"
onClicked: {
if (debug) console.log("[widget::onClicked] : Center button")
var pos = textPattern.cursorPosition
var selected = textPattern.selectedText
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
textPattern.insert(pos, "<p align=\"center\">" + selected + "</p")
}
}
QtControls.Button {
iconName: "format-justify-right"
onClicked: {
if (debug) console.log("[widget::onClicked] : Right button")
var pos = textPattern.cursorPosition
var selected = textPattern.selectedText
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
textPattern.insert(pos, "<p align=\"right\">" + selected + "</p")
}
}
QtControls.Button {
iconName: "format-justify-fill"
onClicked: {
if (debug) console.log("[widget::onClicked] : Justify button")
var pos = textPattern.cursorPosition
var selected = textPattern.selectedText
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
textPattern.insert(pos, "<p align=\"justify\">" + selected + "</p")
}
}
QtControls.ComboBox {
id: tags
model: AWKeys.dictKeys()
}
QtControls.Button {
text: i18n("Add")
onClicked: {
if (debug) console.log("[widget::onClicked] : Add tag button")
var pos = textPattern.cursorPosition
var selected = textPattern.selectedText
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
textPattern.insert(pos, selected + "$" + tags.currentText)
}
}
QtControls.Button {
text: i18n("Show value")
onClicked: {
if (debug) console.log("[widget::onClicked] : Show tag button")
var message = i18n("Tag: %1<br>Value: %2", tags.currentText, AWKeys.valueByKey(tags.currentText))
AWActions.sendNotification("tag", message)
}
}
}
QtControls.TextArea {
id: textPattern
width: parent.width
textFormat: TextEdit.PlainText
text: plasmoid.configuration.text
}
}
Component.onCompleted: {
if (debug) console.log("[widget::onCompleted]")
}
}

View File

@ -27,8 +27,11 @@ file (GLOB SUBPROJECT_NOTIFY *.notifyrc)
file (GLOB SUBPROJECT_UI *.ui)
# task source is required by extscripts
file (GLOB_RECURSE SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp
../../extsysmon/extscript.cpp)
${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp
../../extsysmon/extscript.cpp
../../extsysmon/extupgrade.cpp)
set (TASK_HEADER ${PROJECT_TRDPARTY_DIR}/task/task.h)
set (SUBPROJECT_DESKTOPS ${CMAKE_CURRENT_SOURCE_DIR}/desktops)
qt5_wrap_cpp (TASK_MOC_SOURCE ${TASK_HEADER})
qt5_wrap_ui (SUBPROJECT_UI_HEADER ${SUBPROJECT_UI})
@ -38,3 +41,4 @@ target_link_libraries (${PLUGIN_NAME} ${Qt_LIBRARIES} ${Kf5_LIBRARIES})
install (TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget)
install (FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget)
install (FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KNOTIFYRC_INSTALL_DIR})
install (DIRECTORY ${SUBPROJECT_DESKTOPS} DESTINATION ${DATA_INSTALL_DIR}/${PLUGIN_NAME})

View File

@ -22,16 +22,18 @@
#include <QDebug>
#include <QDesktopServices>
#include <QDir>
#include <QMessageBox>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QProcess>
#include <QProcessEnvironment>
#include <QRegExp>
#include <QSettings>
#include <QStandardPaths>
#include <QThread>
#include <fontdialog/fontdialog.h>
#include <pdebug/pdebug.h>
#include "extscript.h"
@ -97,6 +99,94 @@ void AWActions::showReadme()
}
void AWActions::addDevice(const QString source)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Source" << source;
QRegExp diskRegexp = QRegExp(QString("disk/(?:md|sd|hd)[a-z|0-9]_.*/Rate/(?:rblk)"));
QRegExp fanRegexp = QRegExp(QString("lmsensors/.*/fan.*"));
QRegExp mountRegexp = QRegExp(QString("partitions/.*/filllevel"));
QRegExp tempRegexp = QRegExp(QString("lmsensors/.*temp.*/.*"));
if (diskRegexp.indexIn(source) > -1) {
QStringList splitSource = source.split(QChar('/'));
QString device = splitSource[0] + QString("/") + splitSource[1];
diskDevices.append(device);
} else if (fanRegexp.indexIn(source) > -1)
fanDevices.append(source);
else if (mountRegexp.indexIn(source) > -1) {
QString device = source;
device.remove(QString("partitions")).remove(QString("/filllevel"));
mountDevices.append(device);
} else if (tempRegexp.indexIn(source) > -1)
tempDevices.append(source);
}
QStringList AWActions::getDiskDevices()
{
if (debug) qDebug() << PDEBUG;
return diskDevices;
}
QStringList AWActions::getFanDevices()
{
if (debug) qDebug() << PDEBUG;
return fanDevices;
}
QStringList AWActions::getHddDevices()
{
if (debug) qDebug() << PDEBUG;
QStringList allDevices = QDir(QString("/dev")).entryList(QDir::System, QDir::Name);
QStringList devices = allDevices.filter(QRegExp(QString("^[hms]d[a-z]$")));
for (int i=0; i<devices.count(); i++)
devices[i] = QString("/dev/") + devices[i];
return devices;
}
QStringList AWActions::getMountDevices()
{
if (debug) qDebug() << PDEBUG;
return mountDevices;
}
QStringList AWActions::getTempDevices()
{
if (debug) qDebug() << PDEBUG;
return tempDevices;
}
QMap<QString, QVariant> AWActions::getFont(const QMap<QString, QVariant> defaultFont)
{
if (debug) qDebug() << PDEBUG;
QMap<QString, QVariant> fontMap;
CFont defaultCFont = CFont(defaultFont[QString("family")].toString(),
defaultFont[QString("size")].toInt(),
400, false, defaultFont[QString("color")].toString());
CFont font = CFontDialog::getFont(i18n("Select font"), defaultCFont,
false, false);
fontMap[QString("color")] = font.color().name();
fontMap[QString("family")] = font.family();
fontMap[QString("size")] = font.pointSize();
return fontMap;
}
QMap<QString, QVariant> AWActions::readDataEngineConfiguration()
{
if (debug) qDebug() << PDEBUG;

View File

@ -38,6 +38,14 @@ public:
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();
// configuration slots
Q_INVOKABLE void addDevice(const QString source);
Q_INVOKABLE QStringList getDiskDevices();
Q_INVOKABLE QStringList getFanDevices();
Q_INVOKABLE QStringList getHddDevices();
Q_INVOKABLE QStringList getMountDevices();
Q_INVOKABLE QStringList getTempDevices();
Q_INVOKABLE QMap<QString, QVariant> getFont(const QMap<QString, QVariant> defaultFont);
// dataengine
Q_INVOKABLE QMap<QString, QVariant> readDataEngineConfiguration();
Q_INVOKABLE void writeDataEngineConfiguration(const QMap<QString, QVariant> configuration);
@ -50,6 +58,7 @@ private:
QMap<QString, QVariant> updateDataEngineConfiguration(QMap<QString, QVariant> rawConfig);
// variables
bool debug = false;
QStringList diskDevices, fanDevices, mountDevices, tempDevices;
};

View File

@ -30,6 +30,7 @@
#include "awtooltip.h"
#include "extscript.h"
#include "extupgrade.h"
#include "graphicalitem.h"
#include "version.h"
@ -58,6 +59,7 @@ void AWKeys::initKeys(const QString pattern,
// clear
extScripts.clear();
extUpgrade.clear();
graphicalItems.clear();
counts.clear();
keys.clear();
@ -67,6 +69,7 @@ void AWKeys::initKeys(const QString pattern,
// init
extScripts = getExtScripts();
extUpgrade = getExtUpgrade();
graphicalItems = getGraphicalItems();
counts = getCounts(params);
keys = dictKeys();
@ -94,36 +97,6 @@ bool AWKeys::isReady()
}
QString AWKeys::networkDevice(const QString custom)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Custom device" << custom;
QString device = QString("lo");
if (custom.isEmpty()) {
QList<QNetworkInterface> rawInterfaceList = QNetworkInterface::allInterfaces();
for (int i=0; i<rawInterfaceList.count(); i++)
if ((rawInterfaceList[i].flags().testFlag(QNetworkInterface::IsUp)) &&
(!rawInterfaceList[i].flags().testFlag(QNetworkInterface::IsLoopBack)) &&
(!rawInterfaceList[i].flags().testFlag(QNetworkInterface::IsPointToPoint))) {
device = rawInterfaceList[i].name();
break;
}
} else
device = custom;
return device;
}
int AWKeys::numberCpus()
{
if (debug) qDebug() << PDEBUG;
return QThread::idealThreadCount();
}
QString AWKeys::parsePattern(const QString pattern)
{
if (debug) qDebug() << PDEBUG;
@ -131,39 +104,20 @@ QString AWKeys::parsePattern(const QString pattern)
QString parsed = pattern;
parsed.replace(QString("$$"), QString("$\\$\\"));
for (int i=0; i<foundKeys.count(); i++)
parsed.replace(QString("$") + foundKeys[i], values[foundKeys[i]]);
for (int i=0; i<foundBars.count(); i++) {
QString key = foundBars[i];
key.remove(QRegExp(QString("bar[0-9]{1,}")));
parsed.replace(QString("$") + foundBars[i], getItemByTag(foundBars[i])->image(values[key].toFloat()));
}
parsed.replace(QString("$") + foundKeys[i], valueByKey(foundKeys[i]));
for (int i=0; i<foundBars.count(); i++)
parsed.replace(QString("$") + foundBars[i], getItemByTag(foundBars[i])->image(valueByKey(foundBars[i]).toFloat()));
parsed.replace(QString("$\\$\\"), QString("$$"));
return parsed;
}
float AWKeys::temperature(const float temp, const QString units)
QPixmap AWKeys::toolTipImage()
{
if (debug) qDebug() << PDEBUG;
if(debug) qDebug() << PDEBUG;
float converted = temp;
if (units == QString("Celsius"))
;
else if (units == QString("Fahrenheit"))
converted = temp * 9.0 / 5.0 + 32.0;
else if (units == QString("Kelvin"))
converted = temp + 273.15;
else if (units == QString("Reaumur"))
converted = temp * 0.8;
else if (units == QString("cm^-1"))
converted = (temp + 273.15) * 0.695;
else if (units == QString("kJ/mol"))
converted = (temp + 273.15) * 8.31;
else if (units == QString("kcal/mol"))
converted = (temp + 273.15) * 1.98;
return converted;
return toolTip->image();
}
@ -280,6 +234,24 @@ QStringList AWKeys::extScriptsInfo()
info.append(extScripts[i]->name());
info.append(extScripts[i]->comment());
info.append(extScripts[i]->executable());
info.append(QVariant(extScripts[i]->isActive()).toString());
}
return info;
}
QStringList AWKeys::extUpgradeInfo()
{
if (debug) qDebug() << PDEBUG;
QStringList info;
for (int i=0; i<extUpgrade.count(); i++) {
info.append(extUpgrade[i]->fileName());
info.append(extUpgrade[i]->name());
info.append(extUpgrade[i]->comment());
info.append(extUpgrade[i]->executable());
info.append(QVariant(extUpgrade[i]->isActive()).toString());
}
return info;
@ -381,11 +353,11 @@ void AWKeys::setDataBySource(const QString sourceName,
}
} else if (sourceName == QString("gpu")) {
// gpu load
values[QString("gpu")] = QString("%1").arg(data[QString("GPU")].toFloat(), 5, 'f', 1);
values[QString("gpu")] = QString("%1").arg(data[QString("value")].toFloat(), 5, 'f', 1);
} else if (sourceName == QString("gputemp")) {
// gpu temperature
values[QString("gputemp")] = QString("%1").arg(
temperature(data[QString("GPUTemp")].toFloat(),params[QString("tempUnits")].toString()), 4, 'f', 1);
temperature(data[QString("value")].toFloat(), params[QString("tempUnits")].toString()), 4, 'f', 1);
} else if (sourceName.contains(mountFillRegExp)) {
// fill level
QString mount = sourceName;
@ -554,6 +526,71 @@ void AWKeys::setDataBySource(const QString sourceName,
}
QString AWKeys::valueByKey(QString key)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Requested key" << key;
key.remove(QRegExp(QString("^bar[0-9]{1,}")));
return values[key];
}
QString AWKeys::networkDevice(const QString custom)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Custom device" << custom;
QString device = QString("lo");
if (custom.isEmpty()) {
QList<QNetworkInterface> rawInterfaceList = QNetworkInterface::allInterfaces();
for (int i=0; i<rawInterfaceList.count(); i++)
if ((rawInterfaceList[i].flags().testFlag(QNetworkInterface::IsUp)) &&
(!rawInterfaceList[i].flags().testFlag(QNetworkInterface::IsLoopBack)) &&
(!rawInterfaceList[i].flags().testFlag(QNetworkInterface::IsPointToPoint))) {
device = rawInterfaceList[i].name();
break;
}
} else
device = custom;
return device;
}
int AWKeys::numberCpus()
{
if (debug) qDebug() << PDEBUG;
return QThread::idealThreadCount();
}
float AWKeys::temperature(const float temp, const QString units)
{
if (debug) qDebug() << PDEBUG;
float converted = temp;
if (units == QString("Celsius"))
;
else if (units == QString("Fahrenheit"))
converted = temp * 9.0 / 5.0 + 32.0;
else if (units == QString("Kelvin"))
converted = temp + 273.15;
else if (units == QString("Reaumur"))
converted = temp * 0.8;
else if (units == QString("cm^-1"))
converted = (temp + 273.15) * 0.695;
else if (units == QString("kJ/mol"))
converted = (temp + 273.15) * 8.31;
else if (units == QString("kcal/mol"))
converted = (temp + 273.15) * 1.98;
return converted;
}
QStringList AWKeys::findGraphicalItems(const QString pattern)
{
if (debug) qDebug() << PDEBUG;
@ -598,9 +635,7 @@ QMap<QString, QVariant> AWKeys::getCounts(const QMap<QString, QVariant> params)
awCounts[QString("fan")] = params[QString("fanDevice")].toString().split(QString("@@")).count();
awCounts[QString("hddtemp")] = params[QString("hdd")].toString().split(QString("@@")).count();
awCounts[QString("mount")] = params[QString("mount")].toString().split(QString("@@")).count();
// TODO update pkg parsing
// awCounts[QString("pkg")] = deSettings[QString("PKGCMD")].split(QChar(',')).count();
awCounts[QString("pkg")] = 1;
awCounts[QString("pkg")] = extUpgrade.count();
awCounts[QString("temp")] = params[QString("tempDevice")].toString().split(QString("@@")).count();
return awCounts;
@ -614,13 +649,13 @@ QList<ExtScript *> AWKeys::getExtScripts()
QList<ExtScript *> externalScripts;
// create directory at $HOME
QString localDir = QStandardPaths::writableLocation(QStandardPaths::DataLocation) +
QString("/plasma_engine_extsysmon/scripts");
QString("/plasma_dataengine_extsysmon/scripts");
QDir localDirectory;
if ((!localDirectory.exists(localDir)) && (localDirectory.mkpath(localDir)))
if (debug) qDebug() << PDEBUG << ":" << "Created directory" << localDir;
QStringList dirs = QStandardPaths::locateAll(QStandardPaths::DataLocation,
QString("plasma_engine_extsysmon/scripts"),
QString("plasma_dataengine_extsysmon/scripts"),
QStandardPaths::LocateDirectory);
QStringList names;
for (int i=0; i<dirs.count(); i++) {
@ -638,6 +673,37 @@ QList<ExtScript *> AWKeys::getExtScripts()
}
QList<ExtUpgrade *> AWKeys::getExtUpgrade()
{
if (debug) qDebug() << PDEBUG;
QList<ExtUpgrade *> externalUpgrade;
// create directory at $HOME
QString localDir = QStandardPaths::writableLocation(QStandardPaths::DataLocation) +
QString("/plasma_dataengine_extsysmon/upgrade");
QDir localDirectory;
if ((!localDirectory.exists(localDir)) && (localDirectory.mkpath(localDir)))
if (debug) qDebug() << PDEBUG << ":" << "Created directory" << localDir;
QStringList dirs = QStandardPaths::locateAll(QStandardPaths::DataLocation,
QString("plasma_dataengine_extsysmon/upgrade"),
QStandardPaths::LocateDirectory);
QStringList names;
for (int i=0; i<dirs.count(); i++) {
QStringList files = QDir(dirs[i]).entryList(QDir::Files, QDir::Name);
for (int j=0; j<files.count(); j++) {
if (!files[j].endsWith(QString(".desktop"))) continue;
if (names.contains(files[j])) continue;
if (debug) qDebug() << PDEBUG << ":" << "Found file" << files[j] << "in" << dirs[i];
names.append(files[j]);
externalUpgrade.append(new ExtUpgrade(0, files[j], dirs, debug));
}
}
return externalUpgrade;
}
QList<GraphicalItem *> AWKeys::getGraphicalItems()
{
if (debug) qDebug() << PDEBUG;

View File

@ -22,11 +22,13 @@
#include <QMap>
#include <QObject>
#include <QStringList>
#include <QPixmap>
#include <QVariant>
class AWToolTip;
class ExtScript;
class ExtUpgrade;
class GraphicalItem;
class AWKeys : public QObject
@ -42,23 +44,31 @@ public:
const QMap<QString, QVariant> tooltipParams);
Q_INVOKABLE bool isDebugEnabled();
Q_INVOKABLE bool isReady();
Q_INVOKABLE QString networkDevice(const QString custom = QString(""));
Q_INVOKABLE int numberCpus();
Q_INVOKABLE QString parsePattern(const QString pattern);
Q_INVOKABLE float temperature(const float temp, const QString units = QString("Celsius"));
Q_INVOKABLE QPixmap toolTipImage();
// keys
Q_INVOKABLE QStringList dictKeys();
Q_INVOKABLE QStringList extScriptsInfo();
Q_INVOKABLE QStringList extUpgradeInfo();
Q_INVOKABLE QStringList graphicalItemsInfo();
Q_INVOKABLE void setDataBySource(const QString sourceName,
const QMap<QString, QVariant> data,
const QMap<QString, QVariant> params);
Q_INVOKABLE QStringList findGraphicalItems(const QString pattern);
Q_INVOKABLE QStringList findKeys(const QString pattern);
// values
Q_INVOKABLE QString valueByKey(QString key);
private:
// methods
QString networkDevice(const QString custom = QString(""));
int numberCpus();
float temperature(const float temp, const QString units = QString("Celsius"));
// find methods
QStringList findGraphicalItems(const QString pattern);
QStringList findKeys(const QString pattern);
// get methods
QMap<QString, QVariant> getCounts(const QMap<QString, QVariant> params);
QList<ExtScript *> getExtScripts();
QList<ExtUpgrade *> getExtUpgrade();
QList<GraphicalItem *> getGraphicalItems();
GraphicalItem *getItemByTag(const QString tag);
QStringList getTimeKeys();
@ -68,6 +78,7 @@ private:
bool ready = false;
QList<GraphicalItem *> graphicalItems;
QList<ExtScript *> extScripts;
QList<ExtUpgrade *> extUpgrade;
QStringList foundBars, foundKeys, keys;
QMap<QString, QVariant> counts;
QMap<QString, QString> values;

View File

@ -34,7 +34,7 @@ public:
QMap<QString, QVariant> m_settings = QMap<QString, QVariant>());
~AWToolTip();
Q_INVOKABLE QPixmap image();
QPixmap image();
void setData(const QString source, const float value,
const bool ac = true);

View File

@ -0,0 +1,12 @@
[Desktop Entry]
Encoding=UTF-8
Name=bar3
Comment=Simple bat bar
X-AW-Value=bat
X-AW-ActiveColor="0,0,0,255"
X-AW-InactiveColor="255,255,255,255"
X-AW-Type=Horizontal
X-AW-Direction=LeftToRight
X-AW-Height=25
X-AW-Width=100
X-AW-ApiVersion=1

View File

@ -0,0 +1,12 @@
[Desktop Entry]
Encoding=UTF-8
Name=bar0
Comment=Simple cpu bar
X-AW-Value=cpu
X-AW-ActiveColor="0,0,0,255"
X-AW-InactiveColor="255,255,255,255"
X-AW-Type=Horizontal
X-AW-Direction=LeftToRight
X-AW-Height=25
X-AW-Width=100
X-AW-ApiVersion=1

View File

@ -0,0 +1,12 @@
[Desktop Entry]
Encoding=UTF-8
Name=bar1
Comment=Simple mem bar
X-AW-Value=mem
X-AW-ActiveColor="0,0,0,255"
X-AW-InactiveColor="255,255,255,255"
X-AW-Type=Horizontal
X-AW-Direction=LeftToRight
X-AW-Height=25
X-AW-Width=100
X-AW-ApiVersion=1

View File

@ -0,0 +1,12 @@
[Desktop Entry]
Encoding=UTF-8
Name=bar2
Comment=Simple swap bar
X-AW-Value=swap
X-AW-ActiveColor="0,0,0,255"
X-AW-InactiveColor="255,255,255,255"
X-AW-Type=Horizontal
X-AW-Direction=LeftToRight
X-AW-Height=25
X-AW-Width=100
X-AW-ApiVersion=1

View File

@ -0,0 +1,25 @@
[Desktop Entry]
Encoding=UTF-8
# name should be barN and uniq
Name=bar100500
Comment=Template for the AW bars
# value to show. Supported types are
# cpu, cpu[0-9], mem, swap, bat
X-AW-Value=cpu
# active color, RGBA
# you should use double quotes
X-AW-ActiveColor="0,0,0,255"
# inactive color, RGBA
# you should use double quotes
X-AW-InactiveColor="255,255,255,255"
# bar type. Supported types are
# Horizontal, Vertical, Circle
X-AW-Type=Horizontal
# direction. LeftToRight or RightToLeft
X-AW-Direction=LeftToRight
# height in pixels
X-AW-Height=25
# width in pixels
X-AW-Width=100
# API version
X-AW-ApiVersion=1

View File

@ -1,5 +1,5 @@
# set project name
set (SUBPROJECT plasma_engine_extsysmon)
set (SUBPROJECT plasma_dataengine_extsysmon)
set (PLUGIN_NAME ${SUBPROJECT})
message (STATUS "Subproject ${SUBPROJECT}")
@ -42,6 +42,7 @@ set (TASK_HEADER ${PROJECT_TRDPARTY_DIR}/task/task.h)
file (GLOB SUBPROJECT_UI *.ui)
file (GLOB SUBPROJECT_CONF *.conf)
set (SUBPROJECT_SCRIPTS ${CMAKE_CURRENT_SOURCE_DIR}/scripts)
set (SUBPROJECT_UPGRADE ${CMAKE_CURRENT_SOURCE_DIR}/upgrade)
# prepare
configure_file (${SUBPROJECT_DESKTOP_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP})
@ -69,3 +70,4 @@ endif ()
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP} DESTINATION ${SERVICES_INSTALL_DIR})
install (FILES ${SUBPROJECT_CONF} DESTINATION ${CONFIG_INSTALL_DIR})
install (DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${DATA_INSTALL_DIR}/${PLUGIN_NAME})
install (DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${DATA_INSTALL_DIR}/${PLUGIN_NAME})

View File

@ -29,12 +29,12 @@
#include "version.h"
ExtScript::ExtScript(QWidget *parent, const QString scriptName, const QStringList directories, const bool debugCmd) :
QDialog(parent),
m_fileName(scriptName),
m_dirs(directories),
debug(debugCmd),
ui(new Ui::ExtScript)
ExtScript::ExtScript(QWidget *parent, const QString scriptName, const QStringList directories, const bool debugCmd)
: QDialog(parent),
m_fileName(scriptName),
m_dirs(directories),
debug(debugCmd),
ui(new Ui::ExtScript)
{
m_name = m_fileName;
readConfiguration();
@ -292,6 +292,8 @@ ExtScript::ScriptData ExtScript::run(const int time)
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();

View File

@ -30,10 +30,12 @@
#include <QTextCodec>
#include <QSettings>
#include <extscript.h>
#include <pdebug/pdebug.h>
#include <task/taskadds.h>
#include <version.h>
#include "extscript.h"
#include "extupgrade.h"
#include "version.h"
// KF5-KDE4 compability
#ifdef BUILD_KDE4
@ -57,6 +59,7 @@ ExtendedSysMon::ExtendedSysMon(QObject* parent, const QVariantList &args)
setMinimumPollingInterval(333);
readConfiguration();
initScripts();
initUpgrade();
}
@ -101,6 +104,9 @@ QString ExtendedSysMon::getAutoMpris()
QString cmd = QString("bash -c \"qdbus 'org.mpris.MediaPlayer2.*'\"");
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;
QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed();
if (qoutput.split(QChar('\n'))[0].split(QChar('.')).count() > 3)
@ -119,20 +125,61 @@ void ExtendedSysMon::initScripts()
QString localDir;
QStringList dirs;
#ifdef BUILD_KDE4
localDir = KStandardDirs::locateLocal("data", "plasma_engine_extsysmon/scripts");
localDir = KStandardDirs::locateLocal("data", "plasma_dataengine_extsysmon/scripts");
if (KStandardDirs::makeDir(localDir))
if (debug) qDebug() << PDEBUG << ":" << "Created directory" << localDir;
dirs = KGlobal::dirs()->findDirs("data", "plasma_engine_extsysmon/scripts");
dirs = KGlobal::dirs()->findDirs("data", "plasma_dataengine_extsysmon/scripts");
#else
localDir = QStandardPaths::writableLocation(QStandardPaths::DataLocation) +
QString("/plasma_engine_extsysmon/scripts");
QString("/plasma_dataengine_extsysmon/scripts");
QDir localDirectory;
if ((!localDirectory.exists(localDir)) && (localDirectory.mkpath(localDir)))
if (debug) qDebug() << PDEBUG << ":" << "Created directory" << localDir;
dirs = QStandardPaths::locateAll(QStandardPaths::DataLocation,
QString("plasma_engine_extsysmon/scripts"),
QString("plasma_dataengine_extsysmon/scripts"),
QStandardPaths::LocateDirectory);
#endif /* BUILD_KDE4 */
times.clear();
QStringList names;
for (int i=0; i<dirs.count(); i++) {
QStringList files = QDir(dirs[i]).entryList(QDir::Files, QDir::Name);
for (int j=0; j<files.count(); j++) {
if (!files[j].endsWith(QString(".desktop"))) continue;
if (names.contains(files[j])) continue;
if (debug) qDebug() << PDEBUG << ":" << "Found file" << files[j] << "in" << dirs[i];
names.append(files[j]);
externalScripts.append(new ExtScript(0, files[j], dirs, debug));
times.append(1);
}
}
}
void ExtendedSysMon::initUpgrade()
{
if (debug) qDebug() << PDEBUG;
// create directory at $HOME and create dirs list
QString localDir;
QStringList dirs;
#ifdef BUILD_KDE4
localDir = KStandardDirs::locateLocal("data", "plasma_dataengine_extsysmon/upgrade");
if (KStandardDirs::makeDir(localDir))
if (debug) qDebug() << PDEBUG << ":" << "Created directory" << localDir;
dirs = KGlobal::dirs()->findDirs("data", "plasma_dataengine_extsysmon/upgrade");
#else
localDir = QStandardPaths::writableLocation(QStandardPaths::DataLocation) +
QString("/plasma_dataengine_extsysmon/upgrade");
QDir localDirectory;
if ((!localDirectory.exists(localDir)) && (localDirectory.mkpath(localDir)))
if (debug) qDebug() << PDEBUG << ":" << "Created directory" << localDir;
dirs = QStandardPaths::locateAll(QStandardPaths::DataLocation,
QString("plasma_dataengine_extsysmon/upgrade"),
QStandardPaths::LocateDirectory);
#endif /* BUILD_KDE4 */
@ -144,8 +191,7 @@ void ExtendedSysMon::initScripts()
if (names.contains(files[j])) continue;
if (debug) qDebug() << PDEBUG << ":" << "Found file" << files[j] << "in" << dirs[i];
names.append(files[j]);
externalScripts.append(new ExtScript(0, files[j], dirs, debug));
times.append(1);
externalUpgrade.append(new ExtUpgrade(0, files[j], dirs, debug));
}
}
}
@ -195,8 +241,6 @@ void ExtendedSysMon::readConfiguration()
rawConfig[QString("MPDADDRESS")] = settings.value(QString("MPDADDRESS"), QString("localhost")).toString();
rawConfig[QString("MPDPORT")] = settings.value(QString("MPDPORT"), QString("6600")).toString();
rawConfig[QString("MPRIS")] = settings.value(QString("MPRIS"), QString("auto")).toString();
rawConfig[QString("PKGCMD")] = settings.value(QString("PKGCMD"), QString("pacman -Qu")).toString();
rawConfig[QString("PKGNULL")] = settings.value(QString("PKGNULL"), QString("0")).toString();
rawConfig[QString("PLAYER")] = settings.value(QString("PLAYER"), QString("mpris")).toString();
settings.endGroup();
@ -234,11 +278,6 @@ QMap<QString, QString> ExtendedSysMon::updateConfiguration(QMap<QString, QString
else
rawConfig[QString("HDDDEV")] = devices.join(QChar(','));
}
// pkgcmd
for (int i=rawConfig[QString("PKGNULL")].split(QString(","), QString::SkipEmptyParts).count();
i<rawConfig[QString("PKGCMD")].split(QString(","), QString::SkipEmptyParts).count();
i++)
rawConfig[QString("PKGNULL")] += QString(",0");
// player
if ((rawConfig[QString("PLAYER")] != QString("mpd")) &&
(rawConfig[QString("PLAYER")] != QString("mpris")))
@ -327,6 +366,8 @@ float ExtendedSysMon::getGpu(const QString device)
if (debug) qDebug() << PDEBUG << ":" << "cmd" << cmd;
TaskResult process = runTask(QString("bash -c \"") + cmd + 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();
if (configuration[QString("GPUDEV")] == QString("nvidia"))
@ -369,6 +410,8 @@ float ExtendedSysMon::getGpuTemp(const QString device)
if (debug) qDebug() << PDEBUG << ":" << "cmd" << cmd;
TaskResult process = runTask(QString("bash -c \"") + cmd + 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);
if (configuration[QString("GPUDEV")] == QString("nvidia"))
@ -402,6 +445,8 @@ float ExtendedSysMon::getHddTemp(const QString cmd, const QString device)
float value = 0.0;
TaskResult process = runTask(cmd + QString(" ") + device);
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();
if (qoutput.split(QChar(':'), QString::SkipEmptyParts).count() >= 3) {
@ -465,6 +510,8 @@ QMap<QString, QVariant> ExtendedSysMon::getPlayerInfo(const QString playerName,
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;
QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed();
QString qstr = QString("");
@ -515,6 +562,8 @@ QMap<QString, QVariant> ExtendedSysMon::getPsStats()
if (debug) qDebug() << PDEBUG << ":" << "Run 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;
qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed();
QStringList psList;
@ -528,6 +577,8 @@ QMap<QString, QVariant> ExtendedSysMon::getPsStats()
if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd;
process = runTask(cmd);
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
if (process.exitCode != 0)
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error;
qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed();
psStats[QString("pstotal")] = qoutput.split(QChar('\n'), QString::SkipEmptyParts).count();
@ -536,20 +587,6 @@ QMap<QString, QVariant> ExtendedSysMon::getPsStats()
}
int ExtendedSysMon::getUpgradeInfo(const QString cmd)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "cmd" << cmd;
TaskResult process = runTask(QString("bash -c \"") + cmd + QString("\""));
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed();
return qoutput.split(QChar('\n'), QString::SkipEmptyParts).count();
}
bool ExtendedSysMon::sourceRequestEvent(const QString &source)
{
if (debug) qDebug() << PDEBUG;
@ -586,9 +623,9 @@ bool ExtendedSysMon::updateSourceEvent(const QString &source)
for (int i=0; i<desktop.keys().count(); i++)
setData(source, desktop.keys()[i], desktop[desktop.keys()[i]]);
} else if (source == QString("gpu")) {
setData(source, QString("GPU"), getGpu(configuration[QString("GPUDEV")]));
setData(source, QString("value"), getGpu(configuration[QString("GPUDEV")]));
} else if (source == QString("gputemp")) {
setData(source, QString("GPUTemp"), getGpuTemp(configuration[QString("GPUDEV")]));
setData(source, QString("value"), getGpuTemp(configuration[QString("GPUDEV")]));
} else if (source == QString("hddtemp")) {
QStringList deviceList = configuration[QString("HDDDEV")].split(QChar(','), QString::SkipEmptyParts);
for (int i=0; i<deviceList.count(); i++)
@ -598,9 +635,8 @@ bool ExtendedSysMon::updateSourceEvent(const QString &source)
setData(source, QString("value"), getNetworkDevice());
} else if (source == QString("pkg")) {
if (pkgTimeUpdate > MSEC_IN_HOUR) {
for (int i=0; i<configuration[QString("PKGCMD")].split(QString(","), QString::SkipEmptyParts).count(); i++)
setData(source, QString("pkgcount") + QString::number(i),
getUpgradeInfo(configuration[QString("PKGCMD")].split(QString(","), QString::SkipEmptyParts)[i]));
for (int i=0; i<externalUpgrade.count(); i++)
setData(source, QString("pkgcount") + QString::number(i), externalUpgrade[i]->run());
pkgTimeUpdate = 0;
}
pkgTimeUpdate++;

View File

@ -27,6 +27,7 @@
class ExtScript;
class ExtUpgrade;
class ExtendedSysMon : public Plasma::DataEngine
{
@ -46,7 +47,6 @@ public:
const QString mpdPort = 0,
QString mpris = 0);
QMap<QString, QVariant> getPsStats();
int getUpgradeInfo(const QString cmd);
protected:
bool sourceRequestEvent(const QString &source);
@ -57,6 +57,7 @@ private:
// configuration
QMap<QString, QString> configuration;
QList<ExtScript *> externalScripts;
QList<ExtUpgrade *> externalUpgrade;
QList<int> times;
bool debug;
// FIXME dirty hack to avoid update package information every second
@ -66,6 +67,7 @@ private:
QString getAutoGpu();
QString getAutoMpris();
void initScripts();
void initUpgrade();
void readConfiguration();
QMap<QString, QString> updateConfiguration(QMap<QString, QString> rawConfig);
};

View File

@ -0,0 +1,253 @@
/***************************************************************************
* This file is part of awesome-widgets *
* *
* awesome-widgets is free software: you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* awesome-widgets is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#include "extupgrade.h"
#include "ui_extupgrade.h"
#include <QDebug>
#include <QDir>
#include <QSettings>
#include <QTextCodec>
#include <pdebug/pdebug.h>
#include <task/taskadds.h>
#include "version.h"
ExtUpgrade::ExtUpgrade(QWidget *parent, const QString upgradeName, const QStringList directories, const bool debugCmd) :
QDialog(parent),
m_fileName(upgradeName),
m_dirs(directories),
debug(debugCmd),
ui(new Ui::ExtUpgrade)
{
m_name = m_fileName;
readConfiguration();
ui->setupUi(this);
}
ExtUpgrade::~ExtUpgrade()
{
if (debug) qDebug() << PDEBUG;
delete ui;
}
int ExtUpgrade::apiVersion()
{
if (debug) qDebug() << PDEBUG;
return m_apiVersion;
}
QString ExtUpgrade::comment()
{
if (debug) qDebug() << PDEBUG;
return m_comment;
}
QString ExtUpgrade::executable()
{
if (debug) qDebug() << PDEBUG;
return m_executable;
}
QString ExtUpgrade::fileName()
{
if (debug) qDebug() << PDEBUG;
return m_fileName;
}
QString ExtUpgrade::name()
{
if (debug) qDebug() << PDEBUG;
return m_name;
}
int ExtUpgrade::null()
{
if (debug) qDebug() << PDEBUG;
return m_null;
}
bool ExtUpgrade::isActive()
{
if (debug) qDebug() << PDEBUG;
return m_active;
}
void ExtUpgrade::setApiVersion(const int _apiVersion)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Version" << _apiVersion;
m_apiVersion = _apiVersion;
}
void ExtUpgrade::setActive(const bool state)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "State" << state;
m_active = state;
}
void ExtUpgrade::setComment(const QString _comment)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Comment" << _comment;
m_comment = _comment;
}
void ExtUpgrade::setExecutable(const QString _executable)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Executable" << _executable;
m_executable = _executable;
}
void ExtUpgrade::setName(const QString _name)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Name" << _name;
m_name = _name;
}
void ExtUpgrade::setNull(const int _null)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Null lines" << _null;
if (_null < 0) return;
m_null = _null;
}
void ExtUpgrade::readConfiguration()
{
if (debug) qDebug() << PDEBUG;
for (int i=m_dirs.count()-1; i>=0; i--) {
if (!QDir(m_dirs[i]).entryList(QDir::Files).contains(m_fileName)) continue;
QSettings settings(m_dirs[i] + QDir::separator() + m_fileName, QSettings::IniFormat);
settings.beginGroup(QString("Desktop Entry"));
setName(settings.value(QString("Name"), m_name).toString());
setComment(settings.value(QString("Comment"), m_comment).toString());
setApiVersion(settings.value(QString("X-AW-ApiVersion"), AWESAPI).toInt());
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());
settings.endGroup();
}
}
int ExtUpgrade::run()
{
if (debug) qDebug() << PDEBUG;
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();
return (qoutput.split(QChar('\n'), QString::SkipEmptyParts).count() - m_null);
}
void ExtUpgrade::showConfiguration()
{
if (debug) qDebug() << PDEBUG;
ui->lineEdit_name->setText(m_name);
ui->lineEdit_comment->setText(m_comment);
ui->lineEdit_command->setText(m_executable);
if (m_active)
ui->checkBox_active->setCheckState(Qt::Checked);
else
ui->checkBox_active->setCheckState(Qt::Unchecked);
ui->spinBox_null->setValue(m_null);
int ret = exec();
if (ret != 1) return;
setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text());
setApiVersion(AWEUAPI);
setExecutable(ui->lineEdit_command->text());
setActive(ui->checkBox_active->checkState() == Qt::Checked);
setNull(ui->spinBox_null->value());
writeConfiguration();
}
void ExtUpgrade::tryDelete()
{
if (debug) qDebug() << PDEBUG;
for (int i=0; i<m_dirs.count(); i++)
if (debug) qDebug() << PDEBUG << ":" << "Remove file" << m_dirs[i] + QDir::separator() + m_fileName <<
QFile::remove(m_dirs[i] + QDir::separator() + m_fileName);
}
void ExtUpgrade::writeConfiguration()
{
if (debug) qDebug() << PDEBUG;
QSettings settings(m_dirs[0] + QDir::separator() + m_fileName, QSettings::IniFormat);
if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << settings.fileName();
settings.beginGroup(QString("Desktop Entry"));
settings.setValue(QString("Encoding"), QString("UTF-8"));
settings.setValue(QString("Name"), m_name);
settings.setValue(QString("Comment"), m_comment);
settings.setValue(QString("Exec"), m_executable);
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.endGroup();
settings.sync();
}

View File

@ -0,0 +1,80 @@
/***************************************************************************
* This file is part of awesome-widgets *
* *
* awesome-widgets is free software: you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* awesome-widgets is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#ifndef EXTUPGRADE_H
#define EXTUPGRADE_H
#include <QDialog>
namespace Ui {
class ExtUpgrade;
}
class ExtUpgrade : public QDialog
{
Q_OBJECT
Q_PROPERTY(int apiVersion READ apiVersion WRITE setApiVersion)
Q_PROPERTY(QString name READ name WRITE setName)
Q_PROPERTY(QString comment READ comment WRITE setComment)
Q_PROPERTY(QString executable READ executable WRITE setExecutable)
Q_PROPERTY(int null READ null WRITE setNull)
Q_PROPERTY(bool active READ isActive WRITE setActive)
public:
explicit ExtUpgrade(QWidget *parent = 0, const QString upgradeName = QString(),
const QStringList directories = QStringList(), const bool debugCmd = false);
~ExtUpgrade();
// get methods
int apiVersion();
QString comment();
QString executable();
QString fileName();
QString name();
int null();
bool isActive();
// set methods
void setApiVersion(const int _apiVersion = 0);
void setActive(const bool _state = true);
void setComment(const QString _comment = QString("empty"));
void setExecutable(const QString _executable = QString("/usr/bin/true"));
void setName(const QString _name = QString("none"));
void setNull(const int _null = 0);
public slots:
void readConfiguration();
int run();
void showConfiguration();
void tryDelete();
void writeConfiguration();
private:
QString m_fileName;
QStringList m_dirs;
bool debug;
Ui::ExtUpgrade *ui;
// properties
int m_apiVersion = 0;
bool m_active = true;
QString m_comment = QString("empty");
QString m_executable = QString("/usr/bin/true");
QString m_name = QString("none");
int m_null = 0;
};
#endif /* EXTUPGRADE_H */

View File

@ -0,0 +1,200 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ExtUpgrade</class>
<widget class="QDialog" name="ExtUpgrade">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>420</width>
<height>301</height>
</rect>
</property>
<property name="windowTitle">
<string>Configuration</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="layout_name">
<item>
<widget class="QLabel" name="label_name">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Name</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_name"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="layout_comment">
<item>
<widget class="QLabel" name="label_comment">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Comment</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_comment"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="layout_command">
<item>
<widget class="QLabel" name="label_command">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Command</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_command"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="layout_active">
<item>
<spacer name="spacer_active">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="checkBox_active">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Active</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="layout_null">
<item>
<widget class="QLabel" name="label_null">
<property name="text">
<string>Null</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_null">
<property name="minimum">
<number>0</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>ExtUpgrade</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>ExtUpgrade</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -14,17 +14,5 @@ MPDPORT=6600
# MPRIS player name or 'auto'. In the most cases it should be a player name
## DBus path is org.mpris.MediaPlayer2.amarok
MPRIS=auto
# Package upgrade info
## from vicious
## Arch: PKGCMD=pacman -Qu PKGNULL=0
## Debian: PKGCMD=apt-show-versions -u -b PKGNULL=0
## Ubuntu: PKGCMD=aptitude search '~U' PKGNULL=0
## Fedora: PKGCMD=yum list updates PKGNULL=3
## FreeBSD: PKGCMD=pkg_version -I -l '<' PKGNULL=0
## Mandriva: PKGCMD=urpmq --auto-select PKGNULL=0
## Commands to run, comma separated
PKGCMD=pacman -Qu
## Number of null lines for commands, comma separated
PKGNULL=0
# Player name. Supported players are 'mpd', 'mpris'
PLAYER=mpris

View File

@ -7,7 +7,7 @@ Type=Service
Icon=utilities-system-monitor
X-KDE-ServiceTypes=Plasma/DataEngine
X-KDE-Library=plasma_engine_extsysmon
X-KDE-Library=plasma_dataengine_extsysmon
X-Plasma-EngineName=extsysmon
X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis

View File

@ -8,3 +8,4 @@ X-AW-Active=true
X-AW-Output=true
X-AW-Redirect=nothing
X-AW-Interval=1
X-AW-ApiVersion=1

View File

@ -16,3 +16,5 @@ X-AW-Output=false
X-AW-Redirect=nothing
# update interval in default AW intervals
X-AW-Interval=1
# API version
X-AW-ApiVersion=1

View File

@ -0,0 +1,9 @@
[Desktop Entry]
Encoding=UTF-8
Name=default-arch
Comment=Archlinux upgrade info
Exec=pacman -Qu
X-AW-Prefix=
X-AW-Active=false
X-AW-Null=0
X-AW-ApiVersion=1

View File

@ -0,0 +1,9 @@
[Desktop Entry]
Encoding=UTF-8
Name=default-debian
Comment=Debian upgrade info
Exec=apt-show-versions -u -b
X-AW-Prefix=
X-AW-Active=false
X-AW-Null=0
X-AW-ApiVersion=1

View File

@ -0,0 +1,9 @@
[Desktop Entry]
Encoding=UTF-8
Name=default-fedora
Comment=Fedora upgrade info
Exec=yum list updates
X-AW-Prefix=
X-AW-Active=false
X-AW-Null=3
X-AW-ApiVersion=1

View File

@ -0,0 +1,9 @@
[Desktop Entry]
Encoding=UTF-8
Name=default-mandriva
Comment=Mandriva upgrade info
Exec=urpmq --auto-select
X-AW-Prefix=
X-AW-Active=false
X-AW-Null=0
X-AW-ApiVersion=1

View File

@ -0,0 +1,9 @@
[Desktop Entry]
Encoding=UTF-8
Name=default-ubuntu
Comment=Ubuntu upgrade info
Exec=aptitude search '~U'
X-AW-Prefix=
X-AW-Active=false
X-AW-Null=0
X-AW-ApiVersion=1

View File

@ -11,6 +11,7 @@
#define TRDPARTY_LICENSE "tasks,BSD,https://github.com/mhogomchungu/tasks"
#define AWGIAPI 1
#define AWESAPI 1
#define AWEUAPI 1
// links
#define HOMEPAGE "http://arcanis.name/projects/awesome-widgets/"