+ add de page

* rewrite de configuration to use qsettings
- remove cppcheck
+ add notifyrc
This commit is contained in:
arcan1s 2015-01-05 00:29:52 +03:00
parent 924beacc23
commit 73ba838685
14 changed files with 259 additions and 150 deletions

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="1">
<libraries>
<library>qt</library>
</libraries>
</project>

View File

@ -1,17 +1,9 @@
# Configuration file for netctl data engine [Netctl commands]
## Commands
# command
NETCTLCMD=/usr/bin/netctl NETCTLCMD=/usr/bin/netctl
# netctl-auto command
NETCTLAUTOCMD=/usr/bin/netctl-auto NETCTLAUTOCMD=/usr/bin/netctl-auto
## External IP [External IP]
# external IPv4 check command
EXTIP4CMD=curl ip4.telize.com EXTIP4CMD=curl ip4.telize.com
# 'true' - check external IPv4
EXTIP4=false EXTIP4=false
# external IPv6 check command
EXTIP6CMD=curl ip6.telize.com EXTIP6CMD=curl ip6.telize.com
# 'true' - check external IPv6
EXTIP6=false EXTIP6=false

View File

@ -23,6 +23,7 @@
#include <QFile> #include <QFile>
#include <QNetworkInterface> #include <QNetworkInterface>
#include <QProcessEnvironment> #include <QProcessEnvironment>
#include <QSettings>
#include <QTextCodec> #include <QTextCodec>
#include <pdebug/pdebug.h> #include <pdebug/pdebug.h>
@ -87,15 +88,6 @@ void Netctl::readConfiguration()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
// default configuration
QMap<QString, QString> rawConfig;
rawConfig[QString("EXTIP4")] = QString("false");
rawConfig[QString("EXTIP4CMD")] = QString("curl ip4.telize.com");
rawConfig[QString("EXTIP6")] = QString("false");
rawConfig[QString("EXTIP6CMD")] = QString("curl ip6.telize.com");
rawConfig[QString("NETCTLCMD")] = QString("/usr/bin/netctl");
rawConfig[QString("NETCTLAUTOCMD")] = QString("/usr/bin/netctl-auto");
QString fileName; QString fileName;
#ifdef BUILD_KDE4 #ifdef BUILD_KDE4
fileName = KGlobal::dirs()->findResource("config", "netctl.conf"); fileName = KGlobal::dirs()->findResource("config", "netctl.conf");
@ -103,59 +95,22 @@ void Netctl::readConfiguration()
fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, QString("netctl.conf")); fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, QString("netctl.conf"));
#endif /* BUILD_KDE4 */ #endif /* BUILD_KDE4 */
if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName; if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName;
QFile configFile(fileName); QSettings settings(fileName, QSettings::IniFormat);
if (!configFile.open(QIODevice::ReadOnly)) { settings.beginGroup(QString("Netctl commands"));
configuration = updateConfiguration(rawConfig); configuration[QString("NETCTLCMD")] = settings.value(QString("NETCTLCMD"), QString("/usr/bin/netctl")).toString();
return; configuration[QString("NETCTLAUTOCMD")] = settings.value(QString("NETCTLAUTOCMD"), QString("/usr/bin/netctl-auto")).toString();
} settings.endGroup();
QString fileStr; settings.beginGroup(QString("External IP"));
QStringList value; configuration[QString("EXTIP4")] = settings.value(QString("EXTIP4"), QString("false")).toString();
while (true) { configuration[QString("EXTIP4CMD")] = settings.value(QString("EXTIP4CMD"), QString("curl ip4.telize.com")).toString();
fileStr = QString(configFile.readLine()).trimmed(); configuration[QString("EXTIP6")] = settings.value(QString("EXTIP6"), QString("false")).toString();
if ((fileStr.isEmpty()) && (!configFile.atEnd())) continue; configuration[QString("EXTIP6CMD")] = settings.value(QString("EXTIP6CMD"), QString("curl ip6.telize.com")).toString();
if ((fileStr[0] == QChar('#')) && (!configFile.atEnd())) continue; settings.endGroup();
if ((fileStr[0] == QChar(';')) && (!configFile.atEnd())) continue;
if (fileStr.contains(QChar('='))) {
value.clear();
for (int i=1; i<fileStr.split(QChar('=')).count(); i++)
value.append(fileStr.split(QChar('='))[i]);
rawConfig[fileStr.split(QChar('='))[0]] = value.join(QChar('='));
}
if (configFile.atEnd()) break;
}
configFile.close();
configuration = updateConfiguration(rawConfig);
return; return;
} }
QMap<QString, QString> Netctl::updateConfiguration(const QMap<QString, QString> rawConfig)
{
if (debug) qDebug() << PDEBUG;
QMap<QString, QString> config;
QString key, value;
// remove spaces and copy source map
for (int i=0; i<rawConfig.keys().count(); i++) {
key = rawConfig.keys()[i];
value = rawConfig[key];
key.remove(QChar(' '));
if ((key != QString("EXTIP4CMD")) &&
(key != QString("EXTIP6CMD")) &&
(key != QString("NETCTLCMD")) &&
(key != QString("NETCTLAUTOCMD")))
value.remove(QChar(' '));
config[key] = value;
}
for (int i=0; i<config.keys().count(); i++)
if (debug) qDebug() << PDEBUG << ":" << config.keys()[i] + QString("=") + config[config.keys()[i]];
return config;
}
bool Netctl::sourceRequestEvent(const QString &name) bool Netctl::sourceRequestEvent(const QString &name)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;

View File

@ -54,7 +54,6 @@ private:
bool debug; bool debug;
QMap<QString, QString> configuration; QMap<QString, QString> configuration;
void readConfiguration(); void readConfiguration();
QMap<QString, QString> updateConfiguration(const QMap<QString, QString> rawConfig);
}; };

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="1">
<libraries>
<library>qt</library>
</libraries>
</project>

View File

@ -28,6 +28,7 @@
#include <QDebug> #include <QDebug>
#include <QMenu> #include <QMenu>
#include <QProcessEnvironment> #include <QProcessEnvironment>
#include <QSettings>
#include <pdebug/pdebug.h> #include <pdebug/pdebug.h>
@ -150,80 +151,47 @@ QMap<QString, QString> Netctl::readDataEngineConfiguration()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
QMap<QString, QString> rawConfig; QMap<QString, QString> configuration;
rawConfig[QString("EXTIP4")] = QString("false"); QString fileName;
rawConfig[QString("EXTIP4CMD")] = QString("curl ip4.telize.com"); fileName = KGlobal::dirs()->findResource("config", "netctl.conf");
rawConfig[QString("EXTIP6")] = QString("false");
rawConfig[QString("EXTIP6CMD")] = QString("curl ip6.telize.com");
rawConfig[QString("NETCTLCMD")] = QString("/usr/bin/netctl");
rawConfig[QString("NETCTLAUTOCMD")] = QString("/usr/bin/netctl-auto");
QString fileName = KGlobal::dirs()->findResource("config", "netctl.conf");
if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName; if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName;
QFile configFile(fileName); QSettings settings(fileName, QSettings::IniFormat);
if (!configFile.open(QIODevice::ReadOnly)) settings.beginGroup(QString("Netctl commands"));
return updateDataEngineConfiguration(rawConfig); configuration[QString("NETCTLCMD")] = settings.value(QString("NETCTLCMD"), QString("/usr/bin/netctl")).toString();
QString fileStr; configuration[QString("NETCTLAUTOCMD")] = settings.value(QString("NETCTLAUTOCMD"), QString("/usr/bin/netctl-auto")).toString();
QStringList value; settings.endGroup();
while (true) { settings.beginGroup(QString("External IP"));
fileStr = QString(configFile.readLine()).trimmed(); configuration[QString("EXTIP4")] = settings.value(QString("EXTIP4"), QString("false")).toString();
if ((fileStr.isEmpty()) && (!configFile.atEnd())) continue; configuration[QString("EXTIP4CMD")] = settings.value(QString("EXTIP4CMD"), QString("curl ip4.telize.com")).toString();
if ((fileStr[0] == QChar('#')) && (!configFile.atEnd())) continue; configuration[QString("EXTIP6")] = settings.value(QString("EXTIP6"), QString("false")).toString();
if ((fileStr[0] == QChar(';')) && (!configFile.atEnd())) continue; configuration[QString("EXTIP6CMD")] = settings.value(QString("EXTIP6CMD"), QString("curl ip6.telize.com")).toString();
if (fileStr.contains(QChar('='))) { settings.endGroup();
value.clear();
for (int i=1; i<fileStr.split(QChar('=')).count(); i++)
value.append(fileStr.split(QChar('='))[i]);
rawConfig[fileStr.split(QChar('='))[0]] = value.join(QChar('='));
}
if (configFile.atEnd()) break;
}
configFile.close();
return updateDataEngineConfiguration(rawConfig); return configuration;
} }
void Netctl::writeDataEngineConfiguration(const QMap<QString, QString> settings) void Netctl::writeDataEngineConfiguration(const QMap<QString, QString> configuration)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
QMap<QString, QString> config = updateDataEngineConfiguration(settings);
QString fileName = KGlobal::dirs()->locateLocal("config", "netctl.conf"); QString fileName = KGlobal::dirs()->locateLocal("config", "netctl.conf");
if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName; QSettings settings(fileName, QSettings::IniFormat);
QFile configFile(fileName); if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << settings.fileName();
if (!configFile.open(QIODevice::WriteOnly)) return;
for (int i=0; i<config.keys().count(); i++) {
QByteArray string = (config.keys()[i] + QString("=") + config[config.keys()[i]] + QString("\n")).toUtf8();
configFile.write(string);
}
configFile.close();
}
settings.beginGroup(QString("Netctl commands"));
settings.setValue(QString("NETCTLCMD"), configuration[QString("NETCTLCMD")]);
settings.setValue(QString("NETCTLAUTOCMD"), configuration[QString("NETCTLAUTOCMD")]);
settings.endGroup();
QMap<QString, QString> Netctl::updateDataEngineConfiguration(const QMap<QString, QString> rawConfig) settings.beginGroup(QString("External IP"));
{ settings.setValue(QString("EXTIP4"), configuration[QString("EXTIP4")]);
if (debug) qDebug() << PDEBUG; settings.setValue(QString("EXTIP4CMD"), configuration[QString("EXTIP4CMD")]);
settings.setValue(QString("EXTIP6"), configuration[QString("EXTIP6")]);
settings.setValue(QString("EXTIP6CMD"), configuration[QString("EXTIP6CMD")]);
settings.endGroup();
QMap<QString, QString> config; settings.sync();
QString key, value;
// remove spaces and copy source map
for (int i=0; i<rawConfig.keys().count(); i++) {
key = rawConfig.keys()[i];
value = rawConfig[key];
key.remove(QChar(' '));
if ((key != QString("EXTIP4CMD")) &&
(key != QString("EXTIP6CMD")) &&
(key != QString("NETCTLCMD")) &&
(key != QString("NETCTLAUTOCMD")))
value.remove(QChar(' '));
config[key] = value;
}
for (int i=0; i<config.keys().count(); i++)
if (debug) qDebug() << PDEBUG << ":" << config.keys()[i] + QString("=") + config[config.keys()[i]];
return config;
} }

View File

@ -56,8 +56,7 @@ public:
void init(); void init();
QString parsePattern(const QString rawLine); QString parsePattern(const QString rawLine);
QMap<QString, QString> readDataEngineConfiguration(); QMap<QString, QString> readDataEngineConfiguration();
void writeDataEngineConfiguration(const QMap<QString, QString> settings); void writeDataEngineConfiguration(const QMap<QString, QString> configuration);
QMap<QString, QString> updateDataEngineConfiguration(const QMap<QString, QString> rawConfig);
public slots: public slots:
// events // events

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="1">
<libraries>
<library>qt</library>
</libraries>
</project>

View File

@ -33,6 +33,12 @@ ConfigModel {
source: "appearance.qml" source: "appearance.qml"
} }
ConfigCategory {
name: i18n("DataEngine")
icon: "/usr/share/pixmaps/netctl-gui-widget.png"
source: "dataengine.qml"
}
ConfigCategory { ConfigCategory {
name: i18n("About") name: i18n("About")
icon: "help-about" icon: "help-about"

View File

@ -0,0 +1,144 @@
/***************************************************************************
* This file is part of netctl-gui *
* *
* netctl-gui 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. *
* *
* netctl-gui 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 netctl-gui. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
import QtQuick 2.0
import QtQuick.Controls 1.0 as QtControls
import QtQuick.Dialogs 1.1 as QtDialogs
import QtQuick.Layouts 1.0 as QtLayouts
import org.kde.plasma.private.netctl 1.0
Item {
id: dataenginePage
width: childrenRect.width
height: childrenRect.height
property variant cfg_dataengine: NetctlAdds.readDataEngineConfiguration()
QtLayouts.ColumnLayout {
QtLayouts.RowLayout {
QtControls.Label {
text: i18n("Path to netctl")
}
QtControls.TextField {
id: netctlPath
QtLayouts.Layout.fillWidth: true
text: cfg_dataengine["NETCTLCMD"]
}
QtControls.Button {
text: i18n("Browse")
onClicked: netctlFileDialog.visible = true
}
QtDialogs.FileDialog {
id: netctlFileDialog
title: i18n("Select a path")
folder: "/usr/bin"
nameFilters: [ "All files (*)" ]
selectExisting: true
onAccepted: netctlPath.text = netctlFileDialog.fileUrl
}
}
QtLayouts.RowLayout {
QtControls.Label {
text: i18n("Path to netctl-auto")
}
QtControls.TextField {
id: netctlAutoPath
QtLayouts.Layout.fillWidth: true
text: cfg_dataengine["NETCTLAUTOCMD"]
}
QtControls.Button {
text: i18n("Browse")
onClicked: netctlAutoFileDialog.visible = true
}
QtDialogs.FileDialog {
id: netctlAutoFileDialog
title: i18n("Select a path")
folder: "/usr/bin"
nameFilters: [ "All files (*)" ]
selectExisting: true
onAccepted: netctlAutoPath.text = netctlAutoFileDialog.fileUrl
}
}
QtLayouts.RowLayout {
QtControls.CheckBox {
id: extIp4
text: i18n("Check external IPv4")
checked: cfg_dataengine["EXTIP4"] == "true"
}
QtControls.TextField {
id: extIp4Path
enabled: extIp4.checked
QtLayouts.Layout.fillWidth: true
text: cfg_dataengine["EXTIP4CMD"]
}
QtControls.Button {
enabled: extIp4.checked
text: i18n("Browse")
onClicked: extIp4FileDialog.visible = true
}
QtDialogs.FileDialog {
id: extIp4FileDialog
title: i18n("Select a path")
folder: "/usr/bin"
nameFilters: [ "All files (*)" ]
selectExisting: true
onAccepted: extIp4Path.text = extIp4FileDialog.fileUrl
}
}
QtLayouts.RowLayout {
QtControls.CheckBox {
id: extIp6
text: i18n("Check external IPv6")
checked: cfg_dataengine["EXTIP6"] == "true"
}
QtControls.TextField {
id: extIp6Path
enabled: extIp6.checked
QtLayouts.Layout.fillWidth: true
text: cfg_dataengine["EXTIP6CMD"]
}
QtControls.Button {
enabled: extIp6.checked
text: i18n("Browse")
onClicked: extIp6FileDialog.visible = true
}
QtDialogs.FileDialog {
id: extIp6FileDialog
title: i18n("Select a path")
folder: "/usr/bin"
nameFilters: [ "All files (*)" ]
selectExisting: true
onAccepted: extIp6Path.text = extIp6FileDialog.fileUrl
}
}
}
Component.onDestruction: {
cfg_dataengine["EXTIP4"] = extIp4.checked ? "true" : "false"
cfg_dataengine["EXTIP6"] = extIp6.checked ? "true" : "false"
NetctlAdds.writeDataEngineConfiguration(cfg_dataengine)
}
}

View File

@ -7,6 +7,7 @@ include_directories (${CMAKE_SOURCE_DIR}
${Kf5_INCLUDE}) ${Kf5_INCLUDE})
file (GLOB SUBPROJECT_SOURCE *.cpp) file (GLOB SUBPROJECT_SOURCE *.cpp)
file (GLOB SUBPROJECT_NOTIFY *.notifyrc)
add_library (${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE}) add_library (${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE})
target_link_libraries (${PLUGIN_NAME} ${Qt5Core_LIBRARIES} ${Qt5DBus_LIBRARIES} ${Qt5Qml_LIBRARIES} ${I18n_LIBRARIES} ${Plasma_LIBRARIES} target_link_libraries (${PLUGIN_NAME} ${Qt5Core_LIBRARIES} ${Qt5DBus_LIBRARIES} ${Qt5Qml_LIBRARIES} ${I18n_LIBRARIES} ${Plasma_LIBRARIES}
@ -14,3 +15,4 @@ target_link_libraries (${PLUGIN_NAME} ${Qt5Core_LIBRARIES} ${Qt5DBus_LIBRARIES}
install (TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/netctl) install (TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/netctl)
install (FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/netctl) install (FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/netctl)
install (FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KNOTIFYRC_INSTALL_DIR})

View File

@ -22,6 +22,8 @@
#include <QDBusMessage> #include <QDBusMessage>
#include <QDebug> #include <QDebug>
#include <QProcessEnvironment> #include <QProcessEnvironment>
#include <QSettings>
#include <QStandardPaths>
#include <pdebug/pdebug.h> #include <pdebug/pdebug.h>
@ -135,6 +137,14 @@ QString NetctlAdds::getInfo(const QString current, const QString status)
} }
bool NetctlAdds::isDebugEnabled()
{
if (debug) qDebug() << PDEBUG;
return debug;
}
QString NetctlAdds::parsePattern(const QString pattern, const QMap<QString, QVariant> dict) QString NetctlAdds::parsePattern(const QString pattern, const QMap<QString, QVariant> dict)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -293,3 +303,51 @@ void NetctlAdds::switchToProfileSlot(QString profile, const bool useHelper,
command.startDetached(commandLine); command.startDetached(commandLine);
} }
} }
QMap<QString, QVariant> NetctlAdds::readDataEngineConfiguration()
{
if (debug) qDebug() << PDEBUG;
QMap<QString, QVariant> configuration;
QString fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, QString("netctl.conf"));
if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName;
QSettings settings(fileName, QSettings::IniFormat);
settings.beginGroup(QString("Netctl commands"));
configuration[QString("NETCTLCMD")] = settings.value(QString("NETCTLCMD"), QString("/usr/bin/netctl"));
configuration[QString("NETCTLAUTOCMD")] = settings.value(QString("NETCTLAUTOCMD"), QString("/usr/bin/netctl-auto"));
settings.endGroup();
settings.beginGroup(QString("External IP"));
configuration[QString("EXTIP4")] = settings.value(QString("EXTIP4"), QString("false"));
configuration[QString("EXTIP4CMD")] = settings.value(QString("EXTIP4CMD"), QString("curl ip4.telize.com"));
configuration[QString("EXTIP6")] = settings.value(QString("EXTIP6"), QString("false"));
configuration[QString("EXTIP6CMD")] = settings.value(QString("EXTIP6CMD"), QString("curl ip6.telize.com"));
settings.endGroup();
return configuration;
}
void NetctlAdds::writeDataEngineConfiguration(const QMap<QString, QVariant> configuration)
{
if (debug) qDebug() << PDEBUG;
QString fileName = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + QString("/netctl.conf");
QSettings settings(fileName, QSettings::IniFormat);
if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << settings.fileName();
settings.beginGroup(QString("Netctl commands"));
settings.setValue(QString("NETCTLCMD"), configuration[QString("NETCTLCMD")].toString());
settings.setValue(QString("NETCTLAUTOCMD"), configuration[QString("NETCTLAUTOCMD")].toString());
settings.endGroup();
settings.beginGroup(QString("External IP"));
settings.setValue(QString("EXTIP4"), configuration[QString("EXTIP4")].toString());
settings.setValue(QString("EXTIP4CMD"), configuration[QString("EXTIP4CMD")].toString());
settings.setValue(QString("EXTIP6"), configuration[QString("EXTIP6")].toString());
settings.setValue(QString("EXTIP6CMD"), configuration[QString("EXTIP6CMD")].toString());
settings.endGroup();
settings.sync();
}

View File

@ -34,6 +34,7 @@ public:
Q_INVOKABLE QString getAboutText(const QString type = "header"); Q_INVOKABLE QString getAboutText(const QString type = "header");
Q_INVOKABLE QString getInfo(const QString current, const QString status); Q_INVOKABLE QString getInfo(const QString current, const QString status);
Q_INVOKABLE bool isDebugEnabled();
Q_INVOKABLE QString parsePattern(const QString pattern, const QMap<QString, QVariant> dict); Q_INVOKABLE QString parsePattern(const QString pattern, const QMap<QString, QVariant> dict);
Q_INVOKABLE void runCmd(const QString cmd); Q_INVOKABLE void runCmd(const QString cmd);
Q_INVOKABLE void sendNotification(const QString eventId, const QString message); Q_INVOKABLE void sendNotification(const QString eventId, const QString message);
@ -60,6 +61,9 @@ public:
Q_INVOKABLE void switchToProfileSlot(QString profile, Q_INVOKABLE void switchToProfileSlot(QString profile,
const bool useHelper = true, const bool useHelper = true,
const QString cmd = QString("/usr/bin/netctl-auto")); const QString cmd = QString("/usr/bin/netctl-auto"));
// dataengine
Q_INVOKABLE QMap<QString, QVariant> readDataEngineConfiguration();
Q_INVOKABLE void writeDataEngineConfiguration(const QMap<QString, QVariant> configuration);
private: private:
bool debug = false; bool debug = false;