Compare commits

..

No commits in common. "master" and "V.1.4.4" have entirely different histories.

90 changed files with 1763 additions and 2668 deletions

View File

@ -1,48 +1,3 @@
Ver.1.4.9
---------
* library
* fix bug with invalid enabled profile definition (#46)
* some imrovements inside
* plasmoid
* change rendering from Qt to native
* update plasmoid to recent plasma changes
Ver.1.4.8
---------
* gui
* update profile tab to netclt 1.10 and 1.11 changes
* plasmoid
* fix bug with no action on link activation
Ver.1.4.7
---------
* all
+ implement support of setting of default configuration values while building
* fix language component (refer to #45)
* gui
* more correct work with configuration file
* helper
* more correct work with configuration file
Ver.1.4.6
---------
* all
+ implement time logging feature
* gui
+ implement autoupdate feature
- fix invalid profile path for the external editor
* library
+ implement netctl-auto support to scanWiFi() method (#44)
- fix bug with invalid data in netctl-auto profile list output
Ver.1.4.5
---------
* plasmoid
+ add translation support to plugin part
* more correct interface painting
* more correct configuration interface painting
* move plugin from private
Ver.1.4.4 Ver.1.4.4
--------- ---------
* dataengine * dataengine

View File

@ -3,7 +3,7 @@
pkgbase=netctl-gui pkgbase=netctl-gui
pkgname=('libnetctlgui' 'netctlgui-helper' 'netctl-gui' pkgname=('libnetctlgui' 'netctlgui-helper' 'netctl-gui'
'plasma5-applet-netctl-gui') 'plasma5-applet-netctl-gui')
pkgver=1.4.9 pkgver=1.4.4
pkgrel=1 pkgrel=1
pkgdesc="Qt4/Qt5 GUI for netctl. Also provides a widget for KDE" pkgdesc="Qt4/Qt5 GUI for netctl. Also provides a widget for KDE"
arch=('i686' 'x86_64') arch=('i686' 'x86_64')
@ -11,7 +11,7 @@ url="http://arcanis.name/projects/netctl-gui"
license=('GPL3') license=('GPL3')
makedepends=('cmake' 'extra-cmake-modules' 'plasma-framework' 'qt5-tools') makedepends=('cmake' 'extra-cmake-modules' 'plasma-framework' 'qt5-tools')
source=("https://github.com/arcan1s/netctl-gui/releases/download/V.${pkgver}/${pkgbase}-${pkgver}-src.tar.xz") source=("https://github.com/arcan1s/netctl-gui/releases/download/V.${pkgver}/${pkgbase}-${pkgver}-src.tar.xz")
md5sums=('64c04c36eea017e7c0ddf687d60de128') md5sums=('ea5eb54bf0ad29f392c8fe6e5ea2585e')
prepare() { prepare() {
rm -rf "${srcdir}/build-"{plasmoid,qt5} rm -rf "${srcdir}/build-"{plasmoid,qt5}

View File

@ -4,7 +4,7 @@ pkgbase=netctl-gui-qt4
_pkgbase=netctl-gui _pkgbase=netctl-gui
pkgname=('libnetctlgui-qt4' 'netctlgui-helper-qt4' 'netctl-gui-qt4' pkgname=('libnetctlgui-qt4' 'netctlgui-helper-qt4' 'netctl-gui-qt4'
'kdeplasma-applets-netctl-gui') 'kdeplasma-applets-netctl-gui')
pkgver=1.4.9 pkgver=1.4.4
pkgrel=1 pkgrel=1
pkgdesc="Qt4 GUI for netctl. Also provides a widget for KDE4" pkgdesc="Qt4 GUI for netctl. Also provides a widget for KDE4"
arch=('i686' 'x86_64') arch=('i686' 'x86_64')
@ -12,7 +12,7 @@ url="http://arcanis.name/projects/netctl-gui"
license=('GPL3') license=('GPL3')
makedepends=('automoc4' 'cmake' 'kdelibs') makedepends=('automoc4' 'cmake' 'kdelibs')
source=("https://github.com/arcan1s/netctl-gui/releases/download/V.${pkgver}/${_pkgbase}-${pkgver}-src.tar.xz") source=("https://github.com/arcan1s/netctl-gui/releases/download/V.${pkgver}/${_pkgbase}-${pkgver}-src.tar.xz")
md5sums=('64c04c36eea017e7c0ddf687d60de128') md5sums=('ea5eb54bf0ad29f392c8fe6e5ea2585e')
prepare() { prepare() {
@ -65,6 +65,7 @@ package_libnetctlgui-qt4() {
'wpa_supplicant: wifi support') 'wpa_supplicant: wifi support')
provides=('libnetctlgui') provides=('libnetctlgui')
conflicts=('libnetctlgui') conflicts=('libnetctlgui')
install=""
cd "${srcdir}/build-qt4/netctlgui" cd "${srcdir}/build-qt4/netctlgui"
make DESTDIR="${pkgdir}" install make DESTDIR="${pkgdir}" install

View File

@ -1,23 +0,0 @@
[Buildset]
BuildItems=@Variant(\x00\x00\x00\t\x00\x00\x00\x00\x01\x00\x00\x00\x0b\x00\x00\x00\x00\x01\x00\x00\x00\x14\x00n\x00e\x00t\x00c\x00t\x00l\x00-\x00g\x00u\x00i)
[CMake]
Build Directory Count=1
Current Build Directory Index=0
ProjectRootRelative=./
[CMake][CMake Build Directory 0]
Build Directory Path=file:///home/arcanis/Documents/github/netctl-gui/build
Build Type=Release
CMake Binary=file:///usr/bin/cmake
Environment Profile=
Extra Arguments=
Install Directory=file:///usr
[Defines And Includes][Compiler]
Name=GCC
Path=gcc
Type=GCC
[Project]
VersionControlSupport=kdevgit

View File

@ -8,7 +8,7 @@ ProjectRootRelative=./
[CMake][CMake Build Directory 0] [CMake][CMake Build Directory 0]
Build Directory Path=file:///home/arcanis/Documents/github/netctl-gui/build Build Directory Path=file:///home/arcanis/Documents/github/netctl-gui/build
Build Type=Debug Build Type=Release
CMake Binary=file:///usr/bin/cmake CMake Binary=file:///usr/bin/cmake
Environment Profile= Environment Profile=
Extra Arguments= Extra Arguments=

@ -1 +1 @@
Subproject commit 319125b1fafff9da14c89a94de6ba2852c90c9c2 Subproject commit 204943574a95d5825fd7190608bfe6d76abf6da3

View File

@ -7,8 +7,6 @@
#define LANGUAGES "en,ja,ru" #define LANGUAGES "en,ja,ru"
// language key in the configuration file // language key in the configuration file
#define LANGUAGE_KEY "LANGUAGE" #define LANGUAGE_KEY "LANGUAGE"
// name of config section in the file if any
#define LANGUAGE_SECTION "Common"
#endif /* LANGUAGE_CONFIG_H */ #endif /* LANGUAGE_CONFIG_H */

@ -1 +1 @@
Subproject commit 75e4a0df83478802bba53345486b42c56713fe09 Subproject commit 9be4fe36819cc48a574b5f649ddb210b432e2097

@ -1 +1 @@
Subproject commit dd52af08c9d6a2c8652d2d5e21bc2a433efb497a Subproject commit d2798204a1a84a23a9510aeda73d5b9b75d2c8eb

View File

@ -11,7 +11,7 @@ set (PROJECT_CONTACT "esalexeev@gmail.com")
set (PROJECT_LICENSE "GPLv3") set (PROJECT_LICENSE "GPLv3")
set (PROJECT_VERSION_MAJOR 1) set (PROJECT_VERSION_MAJOR 1)
set (PROJECT_VERSION_MINOR 4) set (PROJECT_VERSION_MINOR 4)
set (PROJECT_VERSION_PATCH 9) set (PROJECT_VERSION_PATCH 4)
set (PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) set (PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
string (TIMESTAMP CURRENT_DATE "%Y-%m-%d %H:%M" UTC) string (TIMESTAMP CURRENT_DATE "%Y-%m-%d %H:%M" UTC)
string (TIMESTAMP CURRENT_YEAR "%Y") string (TIMESTAMP CURRENT_YEAR "%Y")
@ -23,8 +23,6 @@ message (STATUS "Build date: ${CURRENT_DATE}")
# install options # install options
option (USE_CAPABILITIES "Use setcap to set capabilities for the helper" ON) option (USE_CAPABILITIES "Use setcap to set capabilities for the helper" ON)
option (USE_QT5 "Use Qt5 instead of Qt4" ON) option (USE_QT5 "Use Qt5 instead of Qt4" ON)
# configuration
include (config-defs.cmake)
# components # components
option (BUILD_GUI "Build GUI" ON) option (BUILD_GUI "Build GUI" ON)
option (BUILD_HELPER "Build helper" ON) option (BUILD_HELPER "Build helper" ON)

View File

@ -1,41 +0,0 @@
# default configuration options
# [Common] section
set (CFG_LANGUAGE "en" CACHE STRING "LANGUAGE key")
set (CFG_MAINUPDATE "0" CACHE STRING "MAINUPDATE key")
set (CFG_WIFIUPDATE "0" CACHE STRING "WIFIUPDATE key")
set (CFG_SYSTRAY "true" CACHE STRING "SYSTRAY key")
set (CFG_CLOSETOTRAY "true" CACHE STRING "CLOSETOTRAY key")
set (CFG_STARTTOTRAY "false" CACHE STRING "STARTTOTRAY key")
set (CFG_SKIPCOMPONENTS "false" CACHE STRING "SKIPCOMPONENTS key")
# [Helper] section
set (CFG_USE_HELPER "true" CACHE STRING "USE_HELPER key")
set (CFG_FORCE_SUDO "false" CACHE STRING "FORCE_SUDO key")
set (CFG_CLOSE_HELPER "false" CACHE STRING "CLOSE_HELPER key")
set (CFG_HELPER_PATH "netctlgui-helper" CACHE STRING "HELPER_PATH key")
set (CFG_HELPER_SERVICE "netctlgui-helper.service" CACHE STRING "HELPER_SERVICE key")
# [netctl] section
set (CFG_SYSTEMCTL_PATH "systemctl" CACHE STRING "SYSTEMCTL_PATH key")
set (CFG_NETCTL_PATH "netctl" CACHE STRING "NETCTL_PATH key")
set (CFG_NETCTLAUTO_PATH "netctl-auto" CACHE STRING "NETCTLAUTO_PATH key")
set (CFG_NETCTLAUTO_SERVICE "netctl-auto" CACHE STRING "NETCTLAUTO_SERVICE key")
set (CFG_PROFILE_DIR "/etc/netctl/" CACHE STRING "PROFILE_DIR key")
# [sudo] section
set (CFG_SUDO_PATH "kdesu" CACHE STRING "SUDO_PATH key")
# [wpa_supplicant] section
set (CFG_WPASUP_PATH "wpa_supplicant" CACHE STRING "WPASUP_PATH key")
set (CFG_WPACLI_PATH "wpa_cli" CACHE STRING "WPACLI_PATH key")
set (CFG_PID_FILE "/run/wpa_supplicant_$i.pid" CACHE STRING "PID_FILE key")
set (CFG_WPA_DRIVERS "nl80211,wext" CACHE STRING "WPA_DRIVERS key")
set (CFG_CTRL_DIR "/run/wpa_supplicant" CACHE STRING "CTRL_DIR key")
set (CFG_CTRL_GROUP "users" CACHE STRING "CTRL_GROUP key")
# [Other] section
set (CFG_EDITOR_PATH "gvim" CACHE STRING "EDITOR_PATH key")
set (CFG_IFACE_DIR "/sys/class/net/" CACHE STRING "IFACE_DIR key")
set (CFG_RFKILL_DIR "/sys/class/rfkill/" CACHE STRING "RFKILL_DIR key")
set (CFG_PREFERED_IFACE "" CACHE STRING "PREFERED_IFACE key")

View File

@ -39,12 +39,7 @@ include_directories (${CMAKE_SOURCE_DIR}
set (PLUGIN_NAME ${SUBPROJECT}) set (PLUGIN_NAME ${SUBPROJECT})
file (GLOB SUBPROJECT_DESKTOP_IN *.desktop) file (GLOB SUBPROJECT_DESKTOP_IN *.desktop)
file (RELATIVE_PATH SUBPROJECT_DESKTOP ${CMAKE_SOURCE_DIR} ${SUBPROJECT_DESKTOP_IN}) file (RELATIVE_PATH SUBPROJECT_DESKTOP ${CMAKE_SOURCE_DIR} ${SUBPROJECT_DESKTOP_IN})
if (BUILD_KDE4) file (GLOB_RECURSE SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp)
file (GLOB_RECURSE SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp)
else ()
file (GLOB_RECURSE SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp
${PROJECT_TRDPARTY_DIR}/pdebug/*.cpp)
endif ()
set (TASK_HEADER ${PROJECT_TRDPARTY_DIR}/task/task.h) set (TASK_HEADER ${PROJECT_TRDPARTY_DIR}/task/task.h)
file (GLOB SUBPROJECT_CONF *.conf) file (GLOB SUBPROJECT_CONF *.conf)

View File

@ -36,7 +36,6 @@
#include <KStandardDirs> #include <KStandardDirs>
#else #else
#include <QStandardPaths> #include <QStandardPaths>
#include <pdebug/pdebug-time.h>
#endif /* BUILD_KDE4 */ #endif /* BUILD_KDE4 */
@ -45,9 +44,6 @@ Netctl::Netctl(QObject *parent, const QVariantList &args)
{ {
Q_UNUSED(args) Q_UNUSED(args)
#if QT_VERSION >= 0x050000
qInstallMessageHandler(debugString);
#endif /* QT_VERSION >= 0x050000 */
// debug // debug
QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); QProcessEnvironment environment = QProcessEnvironment::systemEnvironment();
QString debugEnv = environment.value(QString("DEBUG"), QString("no")); QString debugEnv = environment.value(QString("DEBUG"), QString("no"));
@ -86,16 +82,17 @@ QStringList Netctl::sources() const
} }
QString Netctl::getCmdOutput(const QString cmd) const QString Netctl::getCmdOutput(const QString cmd)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Cmd" << cmd; if (debug) qDebug() << PDEBUG << ":" << "Cmd" << cmd;
TaskResult process = runTask(cmd); TaskResult process = runTask(cmd);
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; if (process.exitCode != 0)
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error;
return QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); return QTextCodec::codecForMib(106)->toUnicode(process.output);
} }
@ -113,15 +110,15 @@ void Netctl::readConfiguration()
QSettings settings(fileName, QSettings::IniFormat); QSettings settings(fileName, QSettings::IniFormat);
settings.beginGroup(QString("Netctl commands")); settings.beginGroup(QString("Netctl commands"));
configuration[QString("NETCTLCMD")] = settings.value(QString("NETCTLCMD"), QString("netctl")); configuration[QString("NETCTLCMD")] = settings.value(QString("NETCTLCMD"), QString("/usr/bin/netctl")).toString();
configuration[QString("NETCTLAUTOCMD")] = settings.value(QString("NETCTLAUTOCMD"), QString("netctl-auto")); configuration[QString("NETCTLAUTOCMD")] = settings.value(QString("NETCTLAUTOCMD"), QString("/usr/bin/netctl-auto")).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("External IP")); settings.beginGroup(QString("External IP"));
configuration[QString("EXTIP4")] = settings.value(QString("EXTIP4"), QString("false")); configuration[QString("EXTIP4")] = settings.value(QString("EXTIP4"), QString("false")).toString();
configuration[QString("EXTIP4CMD")] = settings.value(QString("EXTIP4CMD"), QString("curl ip4.telize.com")); configuration[QString("EXTIP4CMD")] = settings.value(QString("EXTIP4CMD"), QString("curl ip4.telize.com")).toString();
configuration[QString("EXTIP6")] = settings.value(QString("EXTIP6"), QString("false")); configuration[QString("EXTIP6")] = settings.value(QString("EXTIP6"), QString("false")).toString();
configuration[QString("EXTIP6CMD")] = settings.value(QString("EXTIP6CMD"), QString("curl ip6.telize.com")); configuration[QString("EXTIP6CMD")] = settings.value(QString("EXTIP6CMD"), QString("curl ip6.telize.com")).toString();
settings.endGroup(); settings.endGroup();
} }
@ -135,43 +132,46 @@ bool Netctl::sourceRequestEvent(const QString &name)
} }
QString Netctl::getExtIp(const QString cmd) const QString Netctl::getExtIp(const QString cmd)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Cmd" << cmd; if (debug) qDebug() << PDEBUG << ":" << "Cmd" << cmd;
return getCmdOutput(cmd); // test network connection
if (!isNetworkActive()) return QString("N\\A");
return getCmdOutput(cmd).trimmed();
} }
QString Netctl::getInfo(const QStringList profiles, const QStringList statuses) const QString Netctl::getInfo(const QStringList profiles, const QStringList statuses)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (profiles.count() != statuses.count()) return QString("N\\A"); if (profiles.count() != statuses.count()) return QString("N\\A");
QStringList list; QStringList list;
for (int i=0; i<profiles.count(); i++) for (int i=0; i<profiles.count(); i++)
list.append(QString("%1 (%2)").arg(profiles.at(i)).arg(statuses.at(i))); list.append(QString("%1 (%2)").arg(profiles[i]).arg(statuses[i]));
if (list.isEmpty()) list.append(QString("N\\A")); if (list.isEmpty()) list.append(QString("N\\A"));
return list.join(QString(" | ")); return list.join(QString(" | "));
} }
QStringList Netctl::getInterfaceList() const QStringList Netctl::getInterfaceList()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
QList<QNetworkInterface> rawList = QNetworkInterface::allInterfaces(); QList<QNetworkInterface> rawList = QNetworkInterface::allInterfaces();
QStringList interfacesList; QStringList interfacesList;
foreach(QNetworkInterface interface, rawList) for (int i=0; i<rawList.count(); i++)
interfacesList.append(interface.name()); interfacesList.append(rawList[i].name());
return interfacesList; return interfacesList;
} }
QString Netctl::getIntIp(const QAbstractSocket::NetworkLayerProtocol protocol) const QString Netctl::getIntIp(const QAbstractSocket::NetworkLayerProtocol protocol)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -181,11 +181,11 @@ QString Netctl::getIntIp(const QAbstractSocket::NetworkLayerProtocol protocol) c
else if (protocol == QAbstractSocket::IPv6Protocol) else if (protocol == QAbstractSocket::IPv6Protocol)
intIp = QString("::1/128"); intIp = QString("::1/128");
QList<QHostAddress> rawList = QNetworkInterface::allAddresses(); QList<QHostAddress> rawList = QNetworkInterface::allAddresses();
foreach(QHostAddress address, rawList) { for (int i=0; i<rawList.count(); i++) {
if (address == QHostAddress(QHostAddress::LocalHost)) continue; if(rawList[i] == QHostAddress(QHostAddress::LocalHost)) continue;
if (address == QHostAddress(QHostAddress::LocalHostIPv6)) continue; if(rawList[i] == QHostAddress(QHostAddress::LocalHostIPv6)) continue;
if (address.protocol() != protocol) continue; if (rawList[i].protocol() != protocol) continue;
intIp = address.toString(); intIp = rawList[i].toString();
break; break;
} }
@ -197,24 +197,25 @@ QStringList Netctl::getProfileList(const QString cmdNetctl, const QString cmdNet
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
QString output = getCmdOutput(QString("%1 list").arg(cmdNetctlAuto)); netctlAutoStatus = true;
QString output = getCmdOutput(QString("%1 list").arg(cmdNetctlAuto)).trimmed();
if (output.isEmpty()) { if (output.isEmpty()) {
output = getCmdOutput(QString("%1 list").arg(cmdNetctl)); output = getCmdOutput(QString("%1 list").arg(cmdNetctl)).trimmed();
netctlAutoStatus = false; netctlAutoStatus = false;
} else }
netctlAutoStatus = true;
// parse // parse
QStringList currentProfiles; QStringList currentProfiles;
// workaround for first element spaces on which are trimmed QStringList profileList = output.split(QChar('\n'));
QStringList profileList = QString(" %1").arg(output).split(QChar('\n'));
for (int i=0; i<profileList.count(); i++) { for (int i=0; i<profileList.count(); i++) {
bool isActive = (profileList.at(i)[0] == QChar('*')); if (profileList[i][0] != QChar('*')) continue;
profileList[i].remove(0, 2); currentProfiles.append(profileList[i]);
if (isActive) currentProfiles.append(profileList.at(i));
} }
profileList.sort(); // remove first symbols
currentProfiles.sort(); for (int i=0; i<profileList.count(); i++)
profileList[i].remove(0, 2);
for (int i=0; i<currentProfiles.count(); i++)
currentProfiles[i].remove(0, 2);
// return profiles // return profiles
currentProfile = currentProfiles; currentProfile = currentProfiles;
@ -223,7 +224,7 @@ QStringList Netctl::getProfileList(const QString cmdNetctl, const QString cmdNet
} }
QStringList Netctl::getProfileStringStatus(const QString cmdNetctl) const QStringList Netctl::getProfileStringStatus(const QString cmdNetctl)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -233,11 +234,14 @@ QStringList Netctl::getProfileStringStatus(const QString cmdNetctl) const
return status; return status;
} }
foreach(QString profile, currentProfile) { for (int i=0; i<currentProfile.count(); i++) {
TaskResult process = runTask(QString("%1 is-enabled %2").arg(cmdNetctl).arg(profile)); TaskResult process = runTask(QString("%1 is-enabled %2").arg(cmdNetctl).arg(currentProfile[i]));
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; if (process.exitCode != 0) {
status.append(process.exitCode == 0 ? QString("enabled") : QString("static")); if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error;
status.append(QString("static"));
} else
status.append(QString("enabled"));
} }
return status; return status;
@ -249,8 +253,21 @@ void Netctl::initSources()
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
QStringList sourcesList = sources(); QStringList sourcesList = sources();
foreach(QString source, sourcesList) for (int i=0; i<sourcesList.count(); i++)
setData(source, QString("value"), QString("N\\A")); setData(sourcesList[i], QString("value"), QString("N\\A"));
}
bool Netctl::isNetworkActive()
{
if (debug) qDebug() << PDEBUG;
QString cmd = QString("ping -c 1 google.com");
if (debug) qDebug() << PDEBUG << ":" << "Cmd" << cmd;
TaskResult process = runTask(cmd);
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
return (process.exitCode == 0);
} }
@ -265,11 +282,11 @@ bool Netctl::updateSourceEvent(const QString &source)
} else if (source == QString("current")) { } else if (source == QString("current")) {
value = currentProfile.join(QChar('|')); value = currentProfile.join(QChar('|'));
} else if (source == QString("extip4")) { } else if (source == QString("extip4")) {
if (configuration[QString("EXTIP4")].toString() == QString("true")) if (configuration[QString("EXTIP4")] == QString("true"))
value = getExtIp(configuration[QString("EXTIP4CMD")].toString()); value = getExtIp(configuration[QString("EXTIP4CMD")]);
} else if (source == QString("extip6")) { } else if (source == QString("extip6")) {
if (configuration[QString("EXTIP6")].toString() == QString("true")) if (configuration[QString("EXTIP6")] == QString("true"))
value = getExtIp(configuration[QString("EXTIP6CMD")].toString()); value = getExtIp(configuration[QString("EXTIP6CMD")]);
} else if (source == QString("info")) { } else if (source == QString("info")) {
value = getInfo(currentProfile, currentStatus); value = getInfo(currentProfile, currentStatus);
} else if (source == QString("interfaces")) { } else if (source == QString("interfaces")) {
@ -281,10 +298,10 @@ bool Netctl::updateSourceEvent(const QString &source)
} else if (source == QString("netctlauto")) { } else if (source == QString("netctlauto")) {
value = netctlAutoStatus ? QString("true") : QString("false"); value = netctlAutoStatus ? QString("true") : QString("false");
} else if (source == QString("profiles")) { } else if (source == QString("profiles")) {
value = getProfileList(configuration[QString("NETCTLCMD")].toString(), value = getProfileList(configuration[QString("NETCTLCMD")],
configuration[QString("NETCTLAUTOCMD")].toString()).join(QChar(',')); configuration[QString("NETCTLAUTOCMD")]).join(QChar(','));
} else if (source == QString("status")) { } else if (source == QString("status")) {
currentStatus = getProfileStringStatus(configuration[QString("NETCTLCMD")].toString()); currentStatus = getProfileStringStatus(configuration[QString("NETCTLCMD")]);
value = currentStatus.join(QChar('|')); value = currentStatus.join(QChar('|'));
} }
setData(source, QString("value"), value); setData(source, QString("value"), value);

View File

@ -27,14 +27,15 @@ class Netctl : public Plasma::DataEngine
Q_OBJECT Q_OBJECT
public: public:
explicit Netctl(QObject *parent, const QVariantList &args); Netctl(QObject *parent, const QVariantList &args);
virtual ~Netctl(); ~Netctl();
QString getExtIp(const QString cmd) const; QString getExtIp(const QString cmd);
QString getInfo(const QStringList profiles, const QStringList statuses) const; QString getInfo(const QStringList profiles, const QStringList statuses);
QStringList getInterfaceList() const; QStringList getInterfaceList();
QString getIntIp(const QAbstractSocket::NetworkLayerProtocol protocol) const; QString getIntIp(const QAbstractSocket::NetworkLayerProtocol protocol);
QStringList getProfileList(const QString cmdNetctl, const QString cmdNetctlAuto); QStringList getProfileList(const QString cmdNetctl, const QString cmdNetctlAuto);
QStringList getProfileStringStatus(const QString cmdNetctl) const; QStringList getProfileStringStatus(const QString cmdNetctl);
bool isNetworkActive();
public slots: public slots:
void initSources(); void initSources();
@ -45,15 +46,14 @@ protected:
QStringList sources() const; QStringList sources() const;
private: private:
bool isNetctlCheckRunning = false;
bool netctlAutoStatus = false; bool netctlAutoStatus = false;
bool status = false; bool status = false;
QStringList currentProfile; QStringList currentProfile;
QStringList currentStatus; QStringList currentStatus;
// configuration // configuration
bool debug; bool debug;
QVariantMap configuration; QMap<QString, QString> configuration;
QString getCmdOutput(const QString cmd) const; QString getCmdOutput(const QString cmd);
void readConfiguration(); void readConfiguration();
}; };

View File

@ -1,6 +1,6 @@
[Netctl commands] [Netctl commands]
NETCTLCMD=netctl NETCTLCMD=/usr/bin/netctl
NETCTLAUTOCMD=netctl-auto NETCTLAUTOCMD=/usr/bin/netctl-auto
[External IP] [External IP]
EXTIP4CMD=curl ip4.telize.com EXTIP4CMD=curl ip4.telize.com

View File

@ -14,7 +14,7 @@ X-KDE-PluginInfo-Author=Evgeniy Alekseev
X-KDE-PluginInfo-Email=esalexeev@gmail.com X-KDE-PluginInfo-Email=esalexeev@gmail.com
X-KDE-PluginInfo-Name=netctl X-KDE-PluginInfo-Name=netctl
X-KDE-PluginInfo-Version=@PROJECT_VERSION@ X-KDE-PluginInfo-Version=@PROJECT_VERSION@
X-KDE-PluginInfo-Website=https://arcanis.me/projects/netctl-gui/ X-KDE-PluginInfo-Website=http://arcanis.name/projects/netctl-gui/
X-KDE-PluginInfo-Category=Network X-KDE-PluginInfo-Category=Network
X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPLv3 X-KDE-PluginInfo-License=GPLv3

View File

@ -290,12 +290,12 @@ small {
</tr> </tr>
<!-- general information --> <!-- general information -->
<tr> <tr>
<td>QStringList ActiveProfile()</td> <td>QString ActiveProfile()</td>
<td>returns active profile from netctl or netctl-auto</td> <td>returns active profile from netctl or netctl-auto</td>
<td>no</td> <td>no</td>
</tr> </tr>
<tr> <tr>
<td>QStringList ActiveProfileStatus()</td> <td>QString ActiveProfileStatus()</td>
<td>returns active profile status from netctl or netctl-auto. May be <code>netctl-auto</code>, <code>active (enabled)</code>, <code>active (static)</code>, <code>inactive (enabled)</code>, <code>inactive (static)</code></td> <td>returns active profile status from netctl or netctl-auto. May be <code>netctl-auto</code>, <code>active (enabled)</code>, <code>active (static)</code>, <code>inactive (enabled)</code>, <code>inactive (static)</code></td>
<td>no</td> <td>no</td>
</tr> </tr>
@ -305,7 +305,7 @@ small {
<td>no</td> <td>no</td>
</tr> </tr>
<tr> <tr>
<td>QStringList netctlActiveProfile()</td> <td>QString netctlActiveProfile()</td>
<td>returns active profile from netctl even if netctl-auto is running</td> <td>returns active profile from netctl even if netctl-auto is running</td>
<td>no</td> <td>no</td>
</tr> </tr>
@ -464,7 +464,7 @@ small {
<h2><a href="#links" class="anchor" id="links"></a>External links</h2> <h2><a href="#links" class="anchor" id="links"></a>External links</h2>
<ul> <ul>
<li><a href="https://arcanis.me/projects/netctl-gui/">Homepage</a></li> <li><a href="http://arcanis.name/projects/netctl-gui/">Homepage</a></li>
<li><a href="https://github.com/arcan1s/netctl-gui">Repository</a></li> <li><a href="https://github.com/arcan1s/netctl-gui">Repository</a></li>
<li><a href="https://github.com/arcan1s/netctl-gui/issues">Bugtracker</a></li> <li><a href="https://github.com/arcan1s/netctl-gui/issues">Bugtracker</a></li>
</ul> </ul>

View File

@ -98,7 +98,7 @@ env -i bash -c "source '&lt;profile&gt;'; for i in &#36;{!&lt;key&gt;[@]}; do ec
<h2><a href="#links" class="anchor" id="links"></a>External links</h2> <h2><a href="#links" class="anchor" id="links"></a>External links</h2>
<ul> <ul>
<li><a href="https://arcanis.me/projects/netctl-gui/">Homepage</a></li> <li><a href="http://arcanis.name/projects/netctl-gui/">Homepage</a></li>
<li><a href="https://github.com/arcan1s/netctl-gui">Repository</a></li> <li><a href="https://github.com/arcan1s/netctl-gui">Repository</a></li>
<li><a href="https://github.com/arcan1s/netctl-gui/issues">Bugtracker</a></li> <li><a href="https://github.com/arcan1s/netctl-gui/issues">Bugtracker</a></li>
</ul> </ul>

View File

@ -1,14 +1,7 @@
# set files # set files
if (USE_QT5) file (GLOB_RECURSE SOURCES *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp
file (GLOB_RECURSE SOURCES *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp ${PROJECT_TRDPARTY_DIR}/language/*.cpp
${PROJECT_TRDPARTY_DIR}/language/*.cpp ${PROJECT_TRDPARTY_DIR}/listmap/*.cpp)
${PROJECT_TRDPARTY_DIR}/listmap/*.cpp
${PROJECT_TRDPARTY_DIR}/pdebug/*.cpp)
else ()
file (GLOB_RECURSE SOURCES *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp
${PROJECT_TRDPARTY_DIR}/language/*.cpp
${PROJECT_TRDPARTY_DIR}/listmap/*.cpp)
endif ()
file (GLOB_RECURSE HEADERS *.h ${PROJECT_TRDPARTY_DIR}/task/*.h file (GLOB_RECURSE HEADERS *.h ${PROJECT_TRDPARTY_DIR}/task/*.h
${PROJECT_TRDPARTY_DIR}/language/*.h) ${PROJECT_TRDPARTY_DIR}/language/*.h)
file (GLOB_RECURSE FORMS *.ui ${PROJECT_TRDPARTY_DIR}/about/*.ui) file (GLOB_RECURSE FORMS *.ui ${PROJECT_TRDPARTY_DIR}/about/*.ui)

View File

@ -1,69 +0,0 @@
/***************************************************************************
* 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/ *
***************************************************************************/
#include "bondwidget.h"
#include "ui_bondwidget.h"
BondWidget::BondWidget(QWidget *parent)
: QWidget(parent),
ui(new Ui::BondWidget)
{
ui->setupUi(this);
clear();
}
BondWidget::~BondWidget()
{
delete ui;
}
void BondWidget::clear()
{
ui->lineEdit_mode->setText(QString("balance-rr"));
}
QMap<QString, QString> BondWidget::getSettings()
{
QMap<QString, QString> settings;
if (isOk() != 0) return settings;
if (ui->lineEdit_mode->text() != QString("balance-rr"))
settings[QString("Mode")] = ui->lineEdit_mode->text();
return settings;
}
int BondWidget::isOk()
{
// all fine
return 0;
}
void BondWidget::setSettings(const QMap<QString, QString> settings)
{
clear();
if (settings.contains(QString("Mode")))
ui->lineEdit_mode->setText(settings[QString("Mode")]);
}

View File

@ -1,47 +0,0 @@
/***************************************************************************
* 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/ *
***************************************************************************/
#ifndef BONDWIDGET_H
#define BONDWIDGET_H
#include <QWidget>
namespace Ui {
class BondWidget;
}
class BondWidget : public QWidget
{
Q_OBJECT
public:
explicit BondWidget(QWidget *parent = 0);
~BondWidget();
QMap<QString, QString> getSettings();
int isOk();
void setSettings(const QMap<QString, QString> settings);
public slots:
void clear();
private:
Ui::BondWidget *ui;
};
#endif /* BONDWIDGET_H */

View File

@ -1,71 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>BondWidget</class>
<widget class="QWidget" name="BondWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>550</width>
<height>46</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QDockWidget" name="dockWidget_bond">
<property name="features">
<set>QDockWidget::NoDockWidgetFeatures</set>
</property>
<property name="windowTitle">
<string>Bond settings</string>
</property>
<widget class="QWidget" name="dockWidgetContents_bond">
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="margin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="layout_mode">
<item>
<widget class="QLabel" name="label_mode">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Mode</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_mode">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>The bonding policy. See the kernel documentation on bonding for details</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -177,7 +177,7 @@ InterfaceAnswer connectToEssid(const QString essid, QMap<QString,QString> settin
} }
netctlInformation generalInformation(NetctlInterface *interface, const bool useHelper, netctlInformation generalInformation(NetctlInterface* interface, const bool useHelper,
const bool debug) const bool debug)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -204,7 +204,7 @@ netctlInformation generalInformation(NetctlInterface *interface, const bool useH
} }
QMap<QString, QString> profileInformation(const QString profile, NetctlInterface *interface, QMap<QString, QString> profileInformation(const QString profile, NetctlInterface* interface,
const bool useHelper, const bool debug) const bool useHelper, const bool debug)
{ {
if (!useHelper) return interface->profileSettings(profile); if (!useHelper) return interface->profileSettings(profile);

View File

@ -124,10 +124,6 @@ QStringList ErrorWindow::getMessage(const int mess)
title = QApplication::translate("ErrorWindow", "Error!"); title = QApplication::translate("ErrorWindow", "Error!");
message = QApplication::translate("ErrorWindow", "IP address does not match the standard"); message = QApplication::translate("ErrorWindow", "IP address does not match the standard");
break; break;
case 21:
title = QApplication::translate("ErrorWindow", "Error!");
message = QApplication::translate("ErrorWindow", "Key is required for 'gre' mode");
break;
default: default:
title = QApplication::translate("ErrorWindow", "Error!"); title = QApplication::translate("ErrorWindow", "Error!");
message = QApplication::translate("ErrorWindow", "Unknown error"); message = QApplication::translate("ErrorWindow", "Unknown error");
@ -168,7 +164,6 @@ QMessageBox::Icon ErrorWindow::getIcon(const int mess)
case 18: case 18:
case 19: case 19:
case 20: case 20:
case 21:
icon = QMessageBox::Critical; icon = QMessageBox::Critical;
break; break;
default: default:

View File

@ -46,7 +46,6 @@ void EthernetWidget::clear()
showWpa(ui->checkBox_8021x->checkState()); showWpa(ui->checkBox_8021x->checkState());
ui->lineEdit_wpaConfig->clear(); ui->lineEdit_wpaConfig->clear();
ui->comboBox_driver->setCurrentIndex(0); ui->comboBox_driver->setCurrentIndex(0);
ui->spinBox_priority->setValue(1);
ui->spinBox_timeoutCarrier->setValue(5); ui->spinBox_timeoutCarrier->setValue(5);
ui->spinBox_timeoutWpa->setValue(15); ui->spinBox_timeoutWpa->setValue(15);
@ -105,8 +104,6 @@ QMap<QString, QString> EthernetWidget::getSettings()
settings[QString("WPAConfigFile")] = QString("'%1'").arg(ui->lineEdit_wpaConfig->text()); settings[QString("WPAConfigFile")] = QString("'%1'").arg(ui->lineEdit_wpaConfig->text());
settings[QString("WPADriver")] = ui->comboBox_driver->currentText(); settings[QString("WPADriver")] = ui->comboBox_driver->currentText();
} }
if (ui->spinBox_priority->value() != 1)
settings[QString("Priority")] = QString::number(ui->spinBox_priority->value());
if (ui->spinBox_timeoutCarrier->value() != 5) if (ui->spinBox_timeoutCarrier->value() != 5)
settings[QString("TimeoutCarrier")] = QString::number(ui->spinBox_timeoutCarrier->value()); settings[QString("TimeoutCarrier")] = QString::number(ui->spinBox_timeoutCarrier->value());
if (ui->spinBox_timeoutWpa->value() != 15) if (ui->spinBox_timeoutWpa->value() != 15)
@ -142,8 +139,6 @@ void EthernetWidget::setSettings(const QMap<QString, QString> settings)
int index = ui->comboBox_driver->findText(settings[QString("WPADriver")]); int index = ui->comboBox_driver->findText(settings[QString("WPADriver")]);
ui->comboBox_driver->setCurrentIndex(index); ui->comboBox_driver->setCurrentIndex(index);
} }
if (settings.contains(QString("Priority")))
ui->spinBox_priority->setValue(settings[QString("Priority")].toInt());
if (settings.contains(QString("TimeoutCarrier"))) if (settings.contains(QString("TimeoutCarrier")))
ui->spinBox_timeoutCarrier->setValue(settings[QString("TimeoutCarrier")].toInt()); ui->spinBox_timeoutCarrier->setValue(settings[QString("TimeoutCarrier")].toInt());
if (settings.contains(QString("TimeoutWPA"))) if (settings.contains(QString("TimeoutWPA")))

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>550</width> <width>550</width>
<height>255</height> <height>227</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
@ -301,45 +301,6 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="layout_priority">
<item>
<widget class="QLabel" name="label_priority">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Priority</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_priority">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Priority level of the profile. In case of automatic profile selection, profiles are tried in decreasing order of priority</string>
</property>
<property name="maximum">
<number>999</number>
</property>
<property name="value">
<number>1</number>
</property>
</widget>
</item>
</layout>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>

View File

@ -59,7 +59,6 @@ void GeneralWidget::clear()
ui->listWidget_after->clear(); ui->listWidget_after->clear();
ui->lineEdit_execUpPost->clear(); ui->lineEdit_execUpPost->clear();
ui->lineEdit_execDownPre->clear(); ui->lineEdit_execDownPre->clear();
ui->checkBox_exclude->setCheckState(Qt::Unchecked);
ui->checkBox_forceConnect->setCheckState(Qt::Unchecked); ui->checkBox_forceConnect->setCheckState(Qt::Unchecked);
ui->checkBox_debug->setCheckState(Qt::Unchecked); ui->checkBox_debug->setCheckState(Qt::Unchecked);
@ -140,8 +139,6 @@ QMap<QString, QString> GeneralWidget::getSettings()
settings[QString("ExecUpPost")] = QString("'%1'").arg(ui->lineEdit_execUpPost->text()); settings[QString("ExecUpPost")] = QString("'%1'").arg(ui->lineEdit_execUpPost->text());
if (!ui->lineEdit_execDownPre->text().isEmpty()) if (!ui->lineEdit_execDownPre->text().isEmpty())
settings[QString("ExecDownPre")] = QString("'%1'").arg(ui->lineEdit_execDownPre->text()); settings[QString("ExecDownPre")] = QString("'%1'").arg(ui->lineEdit_execDownPre->text());
if (ui->checkBox_exclude->checkState() == Qt::Checked)
settings[QString("ExcludeAuto")] = QString("yes");
if (ui->checkBox_forceConnect->checkState() == Qt::Checked) if (ui->checkBox_forceConnect->checkState() == Qt::Checked)
settings[QString("ForceConnect")] = QString("yes"); settings[QString("ForceConnect")] = QString("yes");
if (ui->checkBox_debug->checkState() == Qt::Checked) if (ui->checkBox_debug->checkState() == Qt::Checked)
@ -189,9 +186,6 @@ void GeneralWidget::setSettings(const QMap<QString, QString> settings)
ui->lineEdit_execUpPost->setText(settings[QString("ExecUpPost")]); ui->lineEdit_execUpPost->setText(settings[QString("ExecUpPost")]);
if (settings.contains(QString("ExecDownPre"))) if (settings.contains(QString("ExecDownPre")))
ui->lineEdit_execDownPre->setText(settings[QString("ExecDownPre")]); ui->lineEdit_execDownPre->setText(settings[QString("ExecDownPre")]);
if (settings.contains(QString("ExcludeAuto")))
if (settings[QString("ExcludeAuto")] == QString("yes"))
ui->checkBox_exclude->setCheckState(Qt::Checked);
if (settings.contains(QString("ForceConnect"))) if (settings.contains(QString("ForceConnect")))
if (settings[QString("ForceConnect")] == QString("yes")) if (settings[QString("ForceConnect")] == QString("yes"))
ui->checkBox_forceConnect->setCheckState(Qt::Checked); ui->checkBox_forceConnect->setCheckState(Qt::Checked);

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>550</width> <width>550</width>
<height>479</height> <height>452</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_4"> <layout class="QVBoxLayout" name="verticalLayout_4">
@ -417,36 +417,6 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="layout_exclude">
<item>
<widget class="QLabel" name="label_exclude">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_exclude">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Whether or not to exclude this profile from automatic profile selection</string>
</property>
<property name="text">
<string>Exclude auto</string>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<layout class="QHBoxLayout" name="layout_forceConnect"> <layout class="QHBoxLayout" name="layout_forceConnect">
<item> <item>

View File

@ -32,10 +32,6 @@
#include "messages.h" #include "messages.h"
#include "version.h" #include "version.h"
#if QT_VERSION >= 0x050000
#include <pdebug/pdebug-time.h>
#endif /* QT_VERSION >= 0x050000 */
using namespace std; using namespace std;
@ -66,7 +62,7 @@ unsigned int getUidFromSession(const int type = 0)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QVariantMap args = getArgs(); QMap<QString, QVariant> args = getArgs();
// reading // reading
for (int i=1; i<argc; i++) { for (int i=1; i<argc; i++) {
if (QString(argv[i]) == QString("--detached")) { if (QString(argv[i]) == QString("--detached")) {
@ -161,9 +157,6 @@ int main(int argc, char *argv[])
// detach from console // detach from console
if (args[QString("detached")].toBool()) if (args[QString("detached")].toBool())
daemon(0, 0); daemon(0, 0);
#if QT_VERSION >= 0x050000
qInstallMessageHandler(debugString);
#endif
QApplication a(argc, argv); QApplication a(argc, argv);
QApplication::setQuitOnLastWindowClosed(false); QApplication::setQuitOnLastWindowClosed(false);
// reread translations according to flags // reread translations according to flags

View File

@ -52,10 +52,6 @@ MainWidget::MainWidget(QWidget *parent, const QMap<QString, QString> settings, c
actionMenu->addAction(ui->actionEnable); actionMenu->addAction(ui->actionEnable);
ui->actionStart->setMenu(actionMenu); ui->actionStart->setMenu(actionMenu);
// auto update
timer.setSingleShot(true);
timer.setInterval(configuration[QString("MAINUPDATE")].toInt() * 1000);
createActions(); createActions();
} }
@ -94,12 +90,8 @@ void MainWidget::update()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (mainWindow->currentTab() == 0) { updateMainTab();
updateMainTab(); updateMenuMain();
updateMenuMain();
}
if (timer.interval() != 0) return timer.start();
} }
@ -419,7 +411,6 @@ void MainWidget::createActions()
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
// menu actions // menu actions
connect(&timer, SIGNAL(timeout()), this, SLOT(update()));
connect(ui->actionEnable, SIGNAL(triggered(bool)), this, SLOT(mainTabEnableProfile())); connect(ui->actionEnable, SIGNAL(triggered(bool)), this, SLOT(mainTabEnableProfile()));
connect(ui->actionEdit, SIGNAL(triggered(bool)), this, SLOT(mainTabEditProfile())); connect(ui->actionEdit, SIGNAL(triggered(bool)), this, SLOT(mainTabEditProfile()));
connect(ui->actionRefresh, SIGNAL(triggered(bool)), this, SLOT(updateMainTab())); connect(ui->actionRefresh, SIGNAL(triggered(bool)), this, SLOT(updateMainTab()));

View File

@ -20,7 +20,6 @@
#include <QMainWindow> #include <QMainWindow>
#include <QTableWidgetItem> #include <QTableWidgetItem>
#include <QTimer>
#include <netctlgui/netctlgui.h> #include <netctlgui/netctlgui.h>
@ -69,7 +68,6 @@ private:
void createActions(); void createActions();
QString configPath; QString configPath;
bool debug = false; bool debug = false;
QTimer timer;
bool useHelper = true; bool useHelper = true;
// configuration // configuration
QMap<QString, QString> configuration; QMap<QString, QString> configuration;

View File

@ -51,8 +51,10 @@
#include "wifimenuwidget.h" #include "wifimenuwidget.h"
MainWindow::MainWindow(QWidget *parent, const QVariantMap args, MainWindow::MainWindow(QWidget *parent,
QTranslator *qtAppTranslator, QTranslator *appTranslator) const QMap<QString, QVariant> args,
QTranslator *qtAppTranslator,
QTranslator *appTranslator)
: QMainWindow(parent), : QMainWindow(parent),
configPath(args[QString("config")].toString()), configPath(args[QString("config")].toString()),
debug(args[QString("debug")].toBool()), debug(args[QString("debug")].toBool()),
@ -111,14 +113,6 @@ MainWindow::~MainWindow()
} }
int MainWindow::currentTab()
{
if (debug) qDebug() << PDEBUG;
return ui->stackedWidget->currentIndex();
}
Qt::ToolBarArea MainWindow::getToolBarArea() Qt::ToolBarArea MainWindow::getToolBarArea()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -375,14 +369,13 @@ void MainWindow::storeToolBars()
} }
void MainWindow::updateConfiguration(const QVariantMap args) void MainWindow::updateConfiguration(const QMap<QString, QVariant> args)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
deleteObjects(); deleteObjects();
QString actualConfigPath = QFile(configPath).exists() ? configPath : QString("/etc/netctl-gui.conf"); settingsWin = new SettingsWindow(this, debug, configPath);
settingsWin = new SettingsWindow(this, debug, actualConfigPath);
if (args[QString("default")].toBool()) if (args[QString("default")].toBool())
settingsWin->setDefault(); settingsWin->setDefault();
configuration = settingsWin->getSettings(); configuration = settingsWin->getSettings();
@ -395,7 +388,7 @@ void MainWindow::updateConfiguration(const QVariantMap args)
// update translation // update translation
qApp->removeTranslator(translator); qApp->removeTranslator(translator);
QString language = Language::defineLanguage(actualConfigPath, args[QString("options")].toString()); QString language = Language::defineLanguage(configPath, args[QString("options")].toString());
if (debug) qDebug() << PDEBUG << ":" << "Language is" << language; if (debug) qDebug() << PDEBUG << ":" << "Language is" << language;
qtTranslator->load(QString("qt_%1").arg(language), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); qtTranslator->load(QString("qt_%1").arg(language), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
qApp->installTranslator(qtTranslator); qApp->installTranslator(qtTranslator);

View File

@ -42,12 +42,11 @@ class MainWindow : public QMainWindow
Q_OBJECT Q_OBJECT
public: public:
explicit MainWindow(QWidget *parent = nullptr, explicit MainWindow(QWidget *parent = 0,
const QVariantMap args = QVariantMap(), const QMap<QString, QVariant> args = QMap<QString, QVariant>(),
QTranslator *qtAppTranslator = nullptr, QTranslator *qtAppTranslator = 0,
QTranslator *appTranslator = nullptr); QTranslator *appTranslator = 0);
~MainWindow(); ~MainWindow();
int currentTab();
Qt::ToolBarArea getToolBarArea(); Qt::ToolBarArea getToolBarArea();
void emitNeedToBeConfigured(); void emitNeedToBeConfigured();
QStringList printSettings(); QStringList printSettings();
@ -83,7 +82,7 @@ public slots:
void setTab(int tab); void setTab(int tab);
void showMessage(const bool status); void showMessage(const bool status);
void storeToolBars(); void storeToolBars();
void updateConfiguration(const QVariantMap args = QVariantMap()); void updateConfiguration(const QMap<QString, QVariant> args = QMap<QString, QVariant>());
void updateToolBarState(const Qt::ToolBarArea area = Qt::TopToolBarArea); void updateToolBarState(const Qt::ToolBarArea area = Qt::TopToolBarArea);
signals: signals:

View File

@ -29,9 +29,9 @@ QString errorMessage()
} }
QVariantMap getArgs() QMap<QString, QVariant> getArgs()
{ {
QVariantMap args; QMap<QString, QVariant> args;
// windows // windows
args[QString("detached")] = false; args[QString("detached")] = false;
args[QString("minimized")] = static_cast<int>(0); args[QString("minimized")] = static_cast<int>(0);

View File

@ -25,7 +25,7 @@
QString errorMessage(); QString errorMessage();
QVariantMap getArgs(); QMap<QString, QVariant> getArgs();
QString helpMessage(); QString helpMessage();
QString infoMessage(); QString infoMessage();
QString versionMessage(); QString versionMessage();

View File

@ -46,11 +46,9 @@ void MobileWidget::clear()
ui->lineEdit_apn->clear(); ui->lineEdit_apn->clear();
ui->lineEdit_pin->clear(); ui->lineEdit_pin->clear();
ui->comboBox_mode->setCurrentIndex(0); ui->comboBox_mode->setCurrentIndex(0);
ui->spinBox_fail->setValue(5);
ui->checkBox_route->setCheckState(Qt::Checked); ui->checkBox_route->setCheckState(Qt::Checked);
ui->checkBox_dns->setCheckState(Qt::Checked); ui->checkBox_dns->setCheckState(Qt::Checked);
ui->lineEdit_init->setText(QString("ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"));
ui->spinBox_fail->setValue(5);
ui->lineEdit_chat->clear();
ui->lineEdit_options->clear(); ui->lineEdit_options->clear();
ui->pushButton_mobileAdvanced->setChecked(false);; ui->pushButton_mobileAdvanced->setChecked(false);;
@ -61,22 +59,10 @@ void MobileWidget::clear()
void MobileWidget::createActions() void MobileWidget::createActions()
{ {
connect(ui->pushButton_mobileAdvanced, SIGNAL(clicked(bool)), this, SLOT(showAdvanced())); connect(ui->pushButton_mobileAdvanced, SIGNAL(clicked(bool)), this, SLOT(showAdvanced()));
connect(ui->pushButton_chat, SIGNAL(clicked(bool)), this, SLOT(selectChatFile()));
connect(ui->pushButton_options, SIGNAL(clicked(bool)), this, SLOT(selectOptionsFile())); connect(ui->pushButton_options, SIGNAL(clicked(bool)), this, SLOT(selectOptionsFile()));
} }
void MobileWidget::selectChatFile()
{
QString filename = QFileDialog::getOpenFileName(this,
QApplication::translate("MobileWidget", "Select chat file"),
QDir::currentPath(),
QApplication::translate("MobileWidget", "All (*.*)"));
if (!filename.isEmpty())
ui->lineEdit_chat->setText(filename);
}
void MobileWidget::selectOptionsFile() void MobileWidget::selectOptionsFile()
{ {
QString filename = QFileDialog::getOpenFileName(this, QString filename = QFileDialog::getOpenFileName(this,
@ -116,16 +102,12 @@ QMap<QString, QString> MobileWidget::getSettings()
else else
settings[QString("PIN")] = QString("None"); settings[QString("PIN")] = QString("None");
settings[QString("Mode")] = ui->comboBox_mode->currentText(); settings[QString("Mode")] = ui->comboBox_mode->currentText();
if (ui->spinBox_fail->value() != 5)
settings[QString("MaxFail")] = QString::number(ui->spinBox_fail->value());
if (ui->checkBox_route->checkState() == Qt::Unchecked) if (ui->checkBox_route->checkState() == Qt::Unchecked)
settings[QString("DefaultRoute")] = QString("false"); settings[QString("DefaultRoute")] = QString("false");
if (ui->checkBox_dns->checkState() == Qt::Unchecked) if (ui->checkBox_dns->checkState() == Qt::Unchecked)
settings[QString("UsePeerDNS")] = QString("false"); settings[QString("UsePeerDNS")] = QString("false");
if (ui->lineEdit_init->text() != QString("ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"))
settings[QString("Init")] = QString("'%1'").arg(ui->lineEdit_init->text());
if (ui->spinBox_fail->value() != 5)
settings[QString("MaxFail")] = QString::number(ui->spinBox_fail->value());
if (!ui->lineEdit_chat->text().isEmpty())
settings[QString("ChatScript")] = QString("'%1'").arg(ui->lineEdit_chat->text());
if (!ui->lineEdit_options->text().isEmpty()) if (!ui->lineEdit_options->text().isEmpty())
settings[QString("OptionsFile")] = QString("'%1'").arg(ui->lineEdit_options->text()); settings[QString("OptionsFile")] = QString("'%1'").arg(ui->lineEdit_options->text());
@ -161,18 +143,14 @@ void MobileWidget::setSettings(const QMap<QString, QString> settings)
int index = ui->comboBox_mode->findText(settings[QString("Mode")]); int index = ui->comboBox_mode->findText(settings[QString("Mode")]);
ui->comboBox_mode->setCurrentIndex(index); ui->comboBox_mode->setCurrentIndex(index);
} }
if (settings.contains(QString("MaxFail")))
ui->spinBox_fail->setValue(settings[QString("MaxFail")].toInt());
if (settings.contains(QString("DefaultRoute"))) if (settings.contains(QString("DefaultRoute")))
if (settings[QString("DefaultRoute")] == QString("false")) if (settings[QString("DefaultRoute")] == QString("false"))
ui->checkBox_route->setCheckState(Qt::Unchecked); ui->checkBox_route->setCheckState(Qt::Unchecked);
if (settings.contains(QString("UsePeerDNS"))) if (settings.contains(QString("UsePeerDNS")))
if (settings[QString("UsePeerDNS")] == QString("false")) if (settings[QString("UsePeerDNS")] == QString("false"))
ui->checkBox_dns->setCheckState(Qt::Unchecked); ui->checkBox_dns->setCheckState(Qt::Unchecked);
if (settings.contains(QString("Init")))
ui->lineEdit_init->setText(settings[QString("Init")]);
if (settings.contains(QString("MaxFail")))
ui->spinBox_fail->setValue(settings[QString("MaxFail")].toInt());
if (settings.contains(QString("ChatScript")))
ui->lineEdit_chat->setText(settings[QString("ChatScript")]);
if (settings.contains(QString("OptionsFile"))) if (settings.contains(QString("OptionsFile")))
ui->lineEdit_options->setText(settings[QString("OptionsFile")]); ui->lineEdit_options->setText(settings[QString("OptionsFile")]);
} }

View File

@ -40,7 +40,6 @@ public slots:
void clear(); void clear();
private slots: private slots:
void selectChatFile();
void selectOptionsFile(); void selectOptionsFile();
void showAdvanced(); void showAdvanced();

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>445</width> <width>445</width>
<height>376</height> <height>314</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
@ -89,6 +89,9 @@
<property name="toolTip"> <property name="toolTip">
<string>The username and password to connect with</string> <string>The username and password to connect with</string>
</property> </property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
@ -122,6 +125,9 @@
<property name="toolTip"> <property name="toolTip">
<string>The access point (apn) to connect on</string> <string>The access point (apn) to connect on</string>
</property> </property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
@ -313,39 +319,6 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="layout_init">
<item>
<widget class="QLabel" name="label_init">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Init</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_init">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>An initialization string sent to the modem before dialing</string>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<layout class="QHBoxLayout" name="layout_fail"> <layout class="QHBoxLayout" name="layout_fail">
<item> <item>
@ -385,52 +358,6 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="layout_chat">
<item>
<widget class="QLabel" name="label_chat">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>7</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Chat script</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_chat">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>10</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Path to a chat file</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_chat">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>4</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Browse</string>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<layout class="QHBoxLayout" name="layout_options"> <layout class="QHBoxLayout" name="layout_options">
<item> <item>

View File

@ -25,9 +25,8 @@
#include <pdebug/pdebug.h> #include <pdebug/pdebug.h>
#include <task/taskadds.h> #include <task/taskadds.h>
#include "bondwidget.h"
#include "bridgewidget.h"
#include "calls.h" #include "calls.h"
#include "bridgewidget.h"
#include "commonfunctions.h" #include "commonfunctions.h"
#include "dbusoperation.h" #include "dbusoperation.h"
#include "errorwindow.h" #include "errorwindow.h"
@ -61,8 +60,6 @@ NewProfileWidget::NewProfileWidget(QWidget *parent, const QMap<QString, QString>
ui->scrollAreaWidgetContents->layout()->addWidget(generalWid); ui->scrollAreaWidgetContents->layout()->addWidget(generalWid);
ipWid = new IpWidget(this); ipWid = new IpWidget(this);
ui->scrollAreaWidgetContents->layout()->addWidget(ipWid); ui->scrollAreaWidgetContents->layout()->addWidget(ipWid);
bondWid = new BondWidget(this);
ui->scrollAreaWidgetContents->layout()->addWidget(bondWid);
bridgeWid = new BridgeWidget(this); bridgeWid = new BridgeWidget(this);
ui->scrollAreaWidgetContents->layout()->addWidget(bridgeWid); ui->scrollAreaWidgetContents->layout()->addWidget(bridgeWid);
ethernetWid = new EthernetWidget(this); ethernetWid = new EthernetWidget(this);
@ -90,7 +87,6 @@ NewProfileWidget::~NewProfileWidget()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (bondWid != nullptr) delete bondWid;
if (bridgeWid != nullptr) delete bridgeWid; if (bridgeWid != nullptr) delete bridgeWid;
if (ethernetWid != nullptr) delete ethernetWid; if (ethernetWid != nullptr) delete ethernetWid;
if (generalWid != nullptr) delete generalWid; if (generalWid != nullptr) delete generalWid;
@ -172,7 +168,6 @@ void NewProfileWidget::updateProfileTab()
generalWid->clear(); generalWid->clear();
ipWid->clear(); ipWid->clear();
bondWid->clear();
bridgeWid->clear(); bridgeWid->clear();
ethernetWid->clear(); ethernetWid->clear();
macvlanWid->clear(); macvlanWid->clear();
@ -197,7 +192,6 @@ void NewProfileWidget::profileTabChangeState(const QString current)
generalWid->setVisible(true); generalWid->setVisible(true);
ipWid->setVisible((current != QString("pppoe")) && (current != QString("mobile_ppp"))); ipWid->setVisible((current != QString("pppoe")) && (current != QString("mobile_ppp")));
bondWid->setVisible(current == QString("bond"));
bridgeWid->setVisible(current == QString("bridge")); bridgeWid->setVisible(current == QString("bridge"));
ethernetWid->setVisible((current == QString("ethernet")) || ethernetWid->setVisible((current == QString("ethernet")) ||
(current == QString("vlan")) || (current == QString("vlan")) ||
@ -256,7 +250,6 @@ void NewProfileWidget::profileTabCreateProfile()
return ErrorWindow::showWindow(7, QString(PDEBUG), debug); return ErrorWindow::showWindow(7, QString(PDEBUG), debug);
else if (wirelessWid->isOk() == 5) else if (wirelessWid->isOk() == 5)
return ErrorWindow::showWindow(11, QString(PDEBUG), debug); return ErrorWindow::showWindow(11, QString(PDEBUG), debug);
} else if (generalWid->connectionType->currentText() == QString("bond")) {
} else if (generalWid->connectionType->currentText() == QString("bridge")) { } else if (generalWid->connectionType->currentText() == QString("bridge")) {
} else if (generalWid->connectionType->currentText() == QString("pppoe")) { } else if (generalWid->connectionType->currentText() == QString("pppoe")) {
if (pppoeWid->isOk() == 1) if (pppoeWid->isOk() == 1)
@ -276,13 +269,11 @@ void NewProfileWidget::profileTabCreateProfile()
else if (generalWid->connectionType->currentText() == QString("tunnel")) { else if (generalWid->connectionType->currentText() == QString("tunnel")) {
if (tunnelWid->isOk() == 1) if (tunnelWid->isOk() == 1)
return ErrorWindow::showWindow(20, QString(PDEBUG), debug); return ErrorWindow::showWindow(20, QString(PDEBUG), debug);
else if (tunnelWid->isOk() == 2)
return ErrorWindow::showWindow(21, QString(PDEBUG), debug);
} }
else if (generalWid->connectionType->currentText() == QString("tuntap")) { else if (generalWid->connectionType->currentText() == QString("tuntap")) {
if (tuntapWid->isOk() == 1) if (tuntapWid->isOk() == 1)
return ErrorWindow::showWindow(15, QString(PDEBUG), debug); return ErrorWindow::showWindow(15, QString(PDEBUG), debug);
else if (tuntapWid->isOk() == 2) if (tuntapWid->isOk() == 2)
return ErrorWindow::showWindow(15, QString(PDEBUG), debug); return ErrorWindow::showWindow(15, QString(PDEBUG), debug);
} }
else if (generalWid->connectionType->currentText() == QString("vlan")) { else if (generalWid->connectionType->currentText() == QString("vlan")) {
@ -313,23 +304,17 @@ void NewProfileWidget::profileTabCreateProfile()
addSettings = wirelessWid->getSettings(); addSettings = wirelessWid->getSettings();
for (int i=0; i<addSettings.keys().count(); i++) for (int i=0; i<addSettings.keys().count(); i++)
settings.insert(addSettings.keys()[i], addSettings[addSettings.keys()[i]]); settings.insert(addSettings.keys()[i], addSettings[addSettings.keys()[i]]);
} else if ((generalWid->connectionType->currentText() == QString("dummy")) || } else if ((generalWid->connectionType->currentText() == QString("bond")) ||
(generalWid->connectionType->currentText() == QString("dummy")) ||
(generalWid->connectionType->currentText() == QString("openvswitch"))) { (generalWid->connectionType->currentText() == QString("openvswitch"))) {
QMap<QString, QString> addSettings = ipWid->getSettings(); QMap<QString, QString> addSettings = ipWid->getSettings();
for (int i=0; i<addSettings.keys().count(); i++) for (int i=0; i<addSettings.keys().count(); i++)
settings.insert(addSettings.keys()[i], addSettings[addSettings.keys()[i]]); settings.insert(addSettings.keys()[i], addSettings[addSettings.keys()[i]]);
} else if (generalWid->connectionType->currentText() == QString("bond")) {
QMap<QString, QString> addSettings = ipWid->getSettings();
for (int i=0; i<addSettings.keys().count(); i++)
settings.insert(addSettings.keys()[i], addSettings[addSettings.keys()[i]]);
addSettings = bondWid->getSettings();
for (int i=0; i<addSettings.keys().count(); i++)
settings.insert(addSettings.keys()[i], addSettings[addSettings.keys()[i]]);
} else if (generalWid->connectionType->currentText() == QString("bridge")) { } else if (generalWid->connectionType->currentText() == QString("bridge")) {
QMap<QString, QString> addSettings = ipWid->getSettings(); QMap<QString, QString> addSettings = ipWid->getSettings();
for (int i=0; i<addSettings.keys().count(); i++) for (int i=0; i<addSettings.keys().count(); i++)
settings.insert(addSettings.keys()[i], addSettings[addSettings.keys()[i]]); settings.insert(addSettings.keys()[i], addSettings[addSettings.keys()[i]]);
addSettings = bridgeWid->getSettings(); addSettings = bridgeWid->getSettings();
for (int i=0; i<addSettings.keys().count(); i++) for (int i=0; i<addSettings.keys().count(); i++)
settings.insert(addSettings.keys()[i], addSettings[addSettings.keys()[i]]); settings.insert(addSettings.keys()[i], addSettings[addSettings.keys()[i]]);
} else if (generalWid->connectionType->currentText() == QString("pppoe")) { } else if (generalWid->connectionType->currentText() == QString("pppoe")) {
@ -403,15 +388,13 @@ void NewProfileWidget::profileTabLoadProfile()
} else if (generalWid->connectionType->currentText() == QString("wireless")) { } else if (generalWid->connectionType->currentText() == QString("wireless")) {
ipWid->setSettings(settings); ipWid->setSettings(settings);
wirelessWid->setSettings(settings); wirelessWid->setSettings(settings);
} else if ((generalWid->connectionType->currentText() == QString("dummy")) || } else if ((generalWid->connectionType->currentText() == QString("bond")) ||
(generalWid->connectionType->currentText() == QString("dummy")) ||
(generalWid->connectionType->currentText() == QString("openvswitch"))) { (generalWid->connectionType->currentText() == QString("openvswitch"))) {
ipWid->setSettings(settings); ipWid->setSettings(settings);
} else if (generalWid->connectionType->currentText() == QString("bridge")) { } else if (generalWid->connectionType->currentText() == QString("bridge")) {
ipWid->setSettings(settings); ipWid->setSettings(settings);
bridgeWid->setSettings(settings); bridgeWid->setSettings(settings);
} else if (generalWid->connectionType->currentText() == QString("bond")) {
ipWid->setSettings(settings);
bondWid->setSettings(settings);
} else if (generalWid->connectionType->currentText() == QString("pppoe")) { } else if (generalWid->connectionType->currentText() == QString("pppoe")) {
pppoeWid->setSettings(settings); pppoeWid->setSettings(settings);
} else if (generalWid->connectionType->currentText() == QString("mobile_ppp")) { } else if (generalWid->connectionType->currentText() == QString("mobile_ppp")) {
@ -442,9 +425,7 @@ void NewProfileWidget::profileTabOpenInEditor()
return mainWindow->emitNeedToBeConfigured(); return mainWindow->emitNeedToBeConfigured();
} }
QString directory = QDir(configuration[QString("PROFILE_DIR")]).absolutePath();
QString profile = QFileInfo(ui->comboBox_profile->currentText()).fileName(); QString profile = QFileInfo(ui->comboBox_profile->currentText()).fileName();
profile = QString("%1/%2").arg(directory).arg(profile);
QString cmd = QString("%1 %2 %3").arg(configuration[QString("SUDO_PATH")]) QString cmd = QString("%1 %2 %3").arg(configuration[QString("SUDO_PATH")])
.arg(configuration[QString("EDITOR_PATH")]) .arg(configuration[QString("EDITOR_PATH")])
.arg(profile); .arg(profile);

View File

@ -23,7 +23,6 @@
#include <netctlgui/netctlgui.h> #include <netctlgui/netctlgui.h>
class BondWidget;
class BridgeWidget; class BridgeWidget;
class EthernetWidget; class EthernetWidget;
class GeneralWidget; class GeneralWidget;
@ -72,7 +71,6 @@ private:
// ui // ui
MainWindow *mainWindow; MainWindow *mainWindow;
Ui::NewProfileWidget *ui = nullptr; Ui::NewProfileWidget *ui = nullptr;
BondWidget *bondWid = nullptr;
BridgeWidget *bridgeWid = nullptr; BridgeWidget *bridgeWid = nullptr;
EthernetWidget *ethernetWid = nullptr; EthernetWidget *ethernetWid = nullptr;
GeneralWidget *generalWid = nullptr; GeneralWidget *generalWid = nullptr;

View File

@ -247,8 +247,6 @@ void SettingsWindow::saveSettings()
settings.beginGroup(QString("Common")); settings.beginGroup(QString("Common"));
settings.setValue(QString("LANGUAGE"), config[QString("LANGUAGE")]); settings.setValue(QString("LANGUAGE"), config[QString("LANGUAGE")]);
settings.setValue(QString("MAINUPDATE"), config[QString("MAINUPDATE")]);
settings.setValue(QString("WIFIUPDATE"), config[QString("WIFIUPDATE")]);
settings.setValue(QString("SYSTRAY"), config[QString("SYSTRAY")]); settings.setValue(QString("SYSTRAY"), config[QString("SYSTRAY")]);
settings.setValue(QString("CLOSETOTRAY"), config[QString("CLOSETOTRAY")]); settings.setValue(QString("CLOSETOTRAY"), config[QString("CLOSETOTRAY")]);
settings.setValue(QString("STARTTOTRAY"), config[QString("STARTTOTRAY")]); settings.setValue(QString("STARTTOTRAY"), config[QString("STARTTOTRAY")]);
@ -460,7 +458,6 @@ QMap<QString, QString> SettingsWindow::readSettings()
config[QString("HELPER_SERVICE")] = ui->lineEdit_helperService->text(); config[QString("HELPER_SERVICE")] = ui->lineEdit_helperService->text();
config[QString("IFACE_DIR")] = ui->lineEdit_interfacesDir->text(); config[QString("IFACE_DIR")] = ui->lineEdit_interfacesDir->text();
config[QString("LANGUAGE")] = ui->comboBox_language->currentText(); config[QString("LANGUAGE")] = ui->comboBox_language->currentText();
config[QString("MAINUPDATE")] = QString::number(ui->spinBox_mainAutoUpdate->value());
config[QString("MAIN_TOOLBAR")] = QString::number(indexToToolBarPosition(ui->comboBox_mainToolbar->currentIndex())); config[QString("MAIN_TOOLBAR")] = QString::number(indexToToolBarPosition(ui->comboBox_mainToolbar->currentIndex()));
config[QString("NETCTL_PATH")] = ui->lineEdit_netctlPath->text(); config[QString("NETCTL_PATH")] = ui->lineEdit_netctlPath->text();
config[QString("NETCTL_TOOLBAR")] = QString::number(indexToToolBarPosition(ui->comboBox_netctlToolbar->currentIndex())); config[QString("NETCTL_TOOLBAR")] = QString::number(indexToToolBarPosition(ui->comboBox_netctlToolbar->currentIndex()));
@ -490,7 +487,6 @@ QMap<QString, QString> SettingsWindow::readSettings()
config[QString("USE_HELPER")] = QString("true"); config[QString("USE_HELPER")] = QString("true");
else else
config[QString("USE_HELPER")] = QString("false"); config[QString("USE_HELPER")] = QString("false");
config[QString("WIFIUPDATE")] = QString::number(ui->spinBox_wifiAutoUpdate->value());
config[QString("WIFI_TOOLBAR")] = QString::number(indexToToolBarPosition(ui->comboBox_wifiToolbar->currentIndex())); config[QString("WIFI_TOOLBAR")] = QString::number(indexToToolBarPosition(ui->comboBox_wifiToolbar->currentIndex()));
config[QString("WPACLI_PATH")] = ui->lineEdit_wpaCliPath->text(); config[QString("WPACLI_PATH")] = ui->lineEdit_wpaCliPath->text();
config[QString("WPASUP_PATH")] = ui->lineEdit_wpaSupPath->text(); config[QString("WPASUP_PATH")] = ui->lineEdit_wpaSupPath->text();
@ -527,7 +523,6 @@ void SettingsWindow::setSettings(const QMap<QString, QString> config)
ui->lineEdit_interfacesDir->setText(config[QString("IFACE_DIR")]); ui->lineEdit_interfacesDir->setText(config[QString("IFACE_DIR")]);
int index = ui->comboBox_language->findText(config[QString("LANGUAGE")]); int index = ui->comboBox_language->findText(config[QString("LANGUAGE")]);
ui->comboBox_language->setCurrentIndex(index); ui->comboBox_language->setCurrentIndex(index);
ui->spinBox_mainAutoUpdate->setValue(config[QString("MAINUPDATE")].toInt());
index = indexByToolBarPosition(static_cast<Qt::ToolBarArea>(config[QString("MAIN_TOOLBAR")].toInt())); index = indexByToolBarPosition(static_cast<Qt::ToolBarArea>(config[QString("MAIN_TOOLBAR")].toInt()));
ui->comboBox_mainToolbar->setCurrentIndex(index); ui->comboBox_mainToolbar->setCurrentIndex(index);
ui->lineEdit_netctlPath->setText(config[QString("NETCTL_PATH")]); ui->lineEdit_netctlPath->setText(config[QString("NETCTL_PATH")]);
@ -561,7 +556,6 @@ void SettingsWindow::setSettings(const QMap<QString, QString> config)
ui->checkBox_useHelper->setCheckState(Qt::Checked); ui->checkBox_useHelper->setCheckState(Qt::Checked);
else else
ui->checkBox_useHelper->setCheckState(Qt::Unchecked); ui->checkBox_useHelper->setCheckState(Qt::Unchecked);
ui->spinBox_wifiAutoUpdate->setValue(config[QString("WIFIUPDATE")].toInt());
index = indexByToolBarPosition(static_cast<Qt::ToolBarArea>(config[QString("WIFI_TOOLBAR")].toInt())); index = indexByToolBarPosition(static_cast<Qt::ToolBarArea>(config[QString("WIFI_TOOLBAR")].toInt()));
ui->comboBox_wifiToolbar->setCurrentIndex(index); ui->comboBox_wifiToolbar->setCurrentIndex(index);
ui->lineEdit_wpaCliPath->setText(config[QString("WPACLI_PATH")]); ui->lineEdit_wpaCliPath->setText(config[QString("WPACLI_PATH")]);
@ -591,49 +585,47 @@ QMap<QString, QString> SettingsWindow::getSettings(QString fileName)
config[QString("LANGUAGE")] = Language::defineLanguage(fileName, QString()); config[QString("LANGUAGE")] = Language::defineLanguage(fileName, QString());
settings.beginGroup(QString("Common")); settings.beginGroup(QString("Common"));
config[QString("LANGUAGE")] = settings.value(QString("LANGUAGE"), config[QString("LANGUAGE")]).toString(); config[QString("LANGUAGE")] = settings.value(QString("LANGUAGE"), QString("en")).toString();
config[QString("MAINUPDATE")] = settings.value(QString("MAINUPDATE"), QString(MAINUPDATE)).toString(); config[QString("SYSTRAY")] = settings.value(QString("SYSTRAY"), QString("true")).toString();
config[QString("WIFIUPDATE")] = settings.value(QString("WIFIUPDATE"), QString(WIFIUPDATE)).toString(); config[QString("CLOSETOTRAY")] = settings.value(QString("CLOSETOTRAY"), QString("true")).toString();
config[QString("SYSTRAY")] = settings.value(QString("SYSTRAY"), QString(SYSTRAY)).toString(); config[QString("STARTTOTRAY")] = settings.value(QString("STARTTOTRAY"), QString("false")).toString();
config[QString("CLOSETOTRAY")] = settings.value(QString("CLOSETOTRAY"), QString(CLOSETOTRAY)).toString(); config[QString("SKIPCOMPONENTS")] = settings.value(QString("SKIPCOMPONENTS"), QString("false")).toString();
config[QString("STARTTOTRAY")] = settings.value(QString("STARTTOTRAY"), QString(STARTTOTRAY)).toString();
config[QString("SKIPCOMPONENTS")] = settings.value(QString("SKIPCOMPONENTS"), QString(SKIPCOMPONENTS)).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("Helper")); settings.beginGroup(QString("Helper"));
config[QString("USE_HELPER")] = settings.value(QString("USE_HELPER"), QString(USE_HELPER)).toString(); config[QString("USE_HELPER")] = settings.value(QString("USE_HELPER"), QString("true")).toString();
config[QString("FORCE_SUDO")] = settings.value(QString("FORCE_SUDO"), QString(FORCE_SUDO)).toString(); config[QString("FORCE_SUDO")] = settings.value(QString("FORCE_SUDO"), QString("false")).toString();
config[QString("CLOSE_HELPER")] = settings.value(QString("CLOSE_HELPER"), QString(CLOSE_HELPER)).toString(); config[QString("CLOSE_HELPER")] = settings.value(QString("CLOSE_HELPER"), QString("false")).toString();
config[QString("HELPER_PATH")] = settings.value(QString("HELPER_PATH"), QString(HELPER_PATH)).toString(); config[QString("HELPER_PATH")] = settings.value(QString("HELPER_PATH"), QString("/usr/bin/netctlgui-helper")).toString();
config[QString("HELPER_SERVICE")] = settings.value(QString("HELPER_SERVICE"), QString(HELPER_SERVICE)).toString(); config[QString("HELPER_SERVICE")] = settings.value(QString("HELPER_SERVICE"), QString("netctlgui-helper.service")).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("netctl")); settings.beginGroup(QString("netctl"));
config[QString("SYSTEMCTL_PATH")] = settings.value(QString("SYSTEMCTL_PATH"), QString(SYSTEMCTL_PATH)).toString(); config[QString("SYSTEMCTL_PATH")] = settings.value(QString("SYSTEMCTL_PATH"), QString("/usr/bin/systemctl")).toString();
config[QString("NETCTL_PATH")] = settings.value(QString("NETCTL_PATH"), QString(NETCTL_PATH)).toString(); config[QString("NETCTL_PATH")] = settings.value(QString("NETCTL_PATH"), QString("/usr/bin/netctl")).toString();
config[QString("NETCTLAUTO_PATH")] = settings.value(QString("NETCTLAUTO_PATH"), QString(NETCTLAUTO_PATH)).toString(); config[QString("NETCTLAUTO_PATH")] = settings.value(QString("NETCTLAUTO_PATH"), QString("/usr/bin/netctl-auto")).toString();
config[QString("NETCTLAUTO_SERVICE")] = settings.value(QString("NETCTLAUTO_SERVICE"), QString(NETCTLAUTO_SERVICE)).toString(); config[QString("NETCTLAUTO_SERVICE")] = settings.value(QString("NETCTLAUTO_SERVICE"), QString("netctl-auto")).toString();
config[QString("PROFILE_DIR")] = settings.value(QString("PROFILE_DIR"), QString(PROFILE_DIR)).toString(); config[QString("PROFILE_DIR")] = settings.value(QString("PROFILE_DIR"), QString("/etc/netctl")).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("sudo")); settings.beginGroup(QString("sudo"));
config[QString("SUDO_PATH")] = settings.value(QString("SUDO_PATH"), QString(SUDO_PATH)).toString(); config[QString("SUDO_PATH")] = settings.value(QString("SUDO_PATH"), QString("/usr/bin/kdesu")).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("wpa_supplicant")); settings.beginGroup(QString("wpa_supplicant"));
config[QString("WPASUP_PATH")] = settings.value(QString("WPASUP_PATH"), QString(WPASUP_PATH)).toString(); config[QString("WPASUP_PATH")] = settings.value(QString("WPASUP_PATH"), QString("/usr/bin/wpa_supplicant")).toString();
config[QString("WPACLI_PATH")] = settings.value(QString("WPACLI_PATH"), QString(WPACLI_PATH)).toString(); config[QString("WPACLI_PATH")] = settings.value(QString("WPACLI_PATH"), QString("/usr/bin/wpa_cli")).toString();
config[QString("PID_FILE")] = settings.value(QString("PID_FILE"), QString(PID_FILE)).toString(); config[QString("PID_FILE")] = settings.value(QString("PID_FILE"), QString("/run/wpa_supplicant_$i.pid")).toString();
config[QString("WPA_DRIVERS")] = settings.value(QString("WPA_DRIVERS"), QString(WPA_DRIVERS)).toString(); config[QString("WPA_DRIVERS")] = settings.value(QString("WPA_DRIVERS"), QString("nl80211,wext")).toString();
config[QString("CTRL_DIR")] = settings.value(QString("CTRL_DIR"), QString(CTRL_DIR)).toString(); config[QString("CTRL_DIR")] = settings.value(QString("CTRL_DIR"), QString("/run/wpa_supplicant")).toString();
config[QString("CTRL_GROUP")] = settings.value(QString("CTRL_GROUP"), QString(CTRL_GROUP)).toString(); config[QString("CTRL_GROUP")] = settings.value(QString("CTRL_GROUP"), QString("users")).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("Other")); settings.beginGroup(QString("Other"));
config[QString("EDITOR_PATH")] = settings.value(QString("EDITOR_PATH"), QString(EDITOR_PATH)).toString(); config[QString("EDITOR_PATH")] = settings.value(QString("EDITOR_PATH"), QString("/usr/bin/gvim")).toString();
config[QString("IFACE_DIR")] = settings.value(QString("IFACE_DIR"), QString(IFACE_DIR)).toString(); config[QString("IFACE_DIR")] = settings.value(QString("IFACE_DIR"), QString("/sys/class/net/")).toString();
config[QString("RFKILL_DIR")] = settings.value(QString("RFKILL_DIR"), QString(RFKILL_DIR)).toString(); config[QString("RFKILL_DIR")] = settings.value(QString("RFKILL_DIR"), QString("/sys/class/rfkill/")).toString();
config[QString("PREFERED_IFACE")] = settings.value(QString("PREFERED_IFACE"), QString(PREFERED_IFACE)).toString(); config[QString("PREFERED_IFACE")] = settings.value(QString("PREFERED_IFACE"), QString("")).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("Toolbars")); settings.beginGroup(QString("Toolbars"));

View File

@ -190,66 +190,6 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="layout_mainAutoUpdate">
<item>
<widget class="QLabel" name="label_mainAutoUpdate">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Main tab autoupdate, sec</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_mainAutoUpdate">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="layout_wifiAutoUpdate">
<item>
<widget class="QLabel" name="label_wifiAutoUpdate">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>WiFi tab autoupdate, sec</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_wifiAutoUpdate">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<layout class="QHBoxLayout" name="layout_enableTray"> <layout class="QHBoxLayout" name="layout_enableTray">
<item> <item>
@ -702,8 +642,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>542</width> <width>436</width>
<height>330</height> <height>173</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
@ -958,8 +898,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>542</width> <width>436</width>
<height>330</height> <height>45</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_9"> <layout class="QVBoxLayout" name="verticalLayout_9">
@ -1043,8 +983,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>542</width> <width>239</width>
<height>330</height> <height>194</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_10"> <layout class="QVBoxLayout" name="verticalLayout_10">

View File

@ -42,7 +42,6 @@ void TunnelWidget::clear()
ui->comboBox_mode->setCurrentIndex(0); ui->comboBox_mode->setCurrentIndex(0);
ui->lineEdit_local->clear(); ui->lineEdit_local->clear();
ui->lineEdit_remote->clear(); ui->lineEdit_remote->clear();
ui->lineEdit_key->clear();
} }
@ -63,8 +62,6 @@ QMap<QString, QString> TunnelWidget::getSettings()
if (!IpRegExp::checkString(ui->lineEdit_local->text(), IpRegExp::ip4Regex())) if (!IpRegExp::checkString(ui->lineEdit_local->text(), IpRegExp::ip4Regex()))
settings[QString("Local")] = QString("'%1'").arg(ui->lineEdit_local->text()); settings[QString("Local")] = QString("'%1'").arg(ui->lineEdit_local->text());
settings[QString("Remote")] = QString("'%1'").arg(ui->lineEdit_remote->text()); settings[QString("Remote")] = QString("'%1'").arg(ui->lineEdit_remote->text());
if (ui->comboBox_mode->currentText() == QString("gre"))
settings[QString("Key")] = QString("'%1'").arg(ui->lineEdit_key->text());
return settings; return settings;
} }
@ -74,9 +71,6 @@ int TunnelWidget::isOk()
{ {
// ip is not correct // ip is not correct
if (!IpRegExp::checkString(ui->lineEdit_remote->text(), IpRegExp::ip4Regex())) return 1; if (!IpRegExp::checkString(ui->lineEdit_remote->text(), IpRegExp::ip4Regex())) return 1;
// key is empty
if (ui->comboBox_mode->currentText() == QString("gre"))
if (ui->lineEdit_key->text().isEmpty()) return 2;
// all fine // all fine
return 0; return 0;
} }
@ -94,6 +88,4 @@ void TunnelWidget::setSettings(const QMap<QString, QString> settings)
ui->lineEdit_local->setText(settings[QString("Local")]); ui->lineEdit_local->setText(settings[QString("Local")]);
if (settings.contains(QString("Remote"))) if (settings.contains(QString("Remote")))
ui->lineEdit_remote->setText(settings[QString("Remote")]); ui->lineEdit_remote->setText(settings[QString("Remote")]);
if (settings.contains(QString("Key")))
ui->lineEdit_key->setText(settings[QString("Key")]);
} }

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>411</width> <width>411</width>
<height>137</height> <height>108</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
@ -166,39 +166,6 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="layout_key">
<item>
<widget class="QLabel" name="label_key">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Key</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_key">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>A key identifying an individual traffic flow within a tunnel</string>
</property>
</widget>
</item>
</layout>
</item>
</layout> </layout>
</widget> </widget>
</widget> </widget>

View File

@ -47,10 +47,6 @@ WiFiMenuWidget::WiFiMenuWidget(QWidget *parent, const QMap<QString, QString> set
ui->tableWidget_wifi->setColumnHidden(6, true); ui->tableWidget_wifi->setColumnHidden(6, true);
updateToolBarState(static_cast<Qt::ToolBarArea>(configuration[QString("WIFI_TOOLBAR")].toInt())); updateToolBarState(static_cast<Qt::ToolBarArea>(configuration[QString("WIFI_TOOLBAR")].toInt()));
// auto update
timer.setSingleShot(true);
timer.setInterval(configuration[QString("WIFIUPDATE")].toInt() * 1000);
createActions(); createActions();
} }
@ -75,12 +71,8 @@ void WiFiMenuWidget::update()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (mainWindow->currentTab() == 2) { updateWifiTab();
updateWifiTab(); updateMenuWifi();
updateMenuWifi();
}
if (timer.interval() != 0) return timer.start();
} }
@ -438,7 +430,6 @@ void WiFiMenuWidget::createActions()
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
// menu actions // menu actions
connect(&timer, SIGNAL(timeout()), this, SLOT(update()));
connect(ui->actionFunc, SIGNAL(triggered(bool)), this, SLOT(wifiTabShowInfo())); connect(ui->actionFunc, SIGNAL(triggered(bool)), this, SLOT(wifiTabShowInfo()));
connect(ui->actionRefresh, SIGNAL(triggered(bool)), this, SLOT(updateWifiTab())); connect(ui->actionRefresh, SIGNAL(triggered(bool)), this, SLOT(updateWifiTab()));
connect(ui->actionStart, SIGNAL(triggered(bool)), this, SLOT(wifiTabStart())); connect(ui->actionStart, SIGNAL(triggered(bool)), this, SLOT(wifiTabStart()));

View File

@ -20,7 +20,6 @@
#include <QApplication> #include <QApplication>
#include <QMainWindow> #include <QMainWindow>
#include <QTimer>
#include <netctlgui/netctlgui.h> #include <netctlgui/netctlgui.h>
@ -71,7 +70,6 @@ private:
void createActions(); void createActions();
bool debug = false; bool debug = false;
bool hiddenNetwork = false; bool hiddenNetwork = false;
QTimer timer;
bool useHelper = true; bool useHelper = true;
// configuration // configuration
QMap<QString, QString> configuration; QMap<QString, QString> configuration;

View File

@ -77,6 +77,7 @@ void WirelessWidget::clear()
} }
ui->comboBox_rfkill->setCurrentIndex(0); ui->comboBox_rfkill->setCurrentIndex(0);
ui->spinBox_timeoutWpa->setValue(15); ui->spinBox_timeoutWpa->setValue(15);
ui->checkBox_exclude->setCheckState(Qt::Unchecked);
ui->pushButton_wirelessAdvanced->setChecked(false); ui->pushButton_wirelessAdvanced->setChecked(false);
showAdvanced(); showAdvanced();
@ -230,6 +231,8 @@ QMap<QString, QString> WirelessWidget::getSettings()
settings[QString("RFKill")] = ui->comboBox_rfkill->currentText(); settings[QString("RFKill")] = ui->comboBox_rfkill->currentText();
if (ui->spinBox_timeoutWpa->value() != 15) if (ui->spinBox_timeoutWpa->value() != 15)
settings[QString("TimeoutWPA")] = QString::number(ui->spinBox_timeoutWpa->value()); settings[QString("TimeoutWPA")] = QString::number(ui->spinBox_timeoutWpa->value());
if (ui->checkBox_exclude->checkState() == Qt::Checked)
settings[QString("ExcludeAuto")] = QString("yes");
return settings; return settings;
} }
@ -307,6 +310,9 @@ void WirelessWidget::setSettings(const QMap<QString, QString> settings)
} }
if (settings.contains(QString("TimeoutWPA"))) if (settings.contains(QString("TimeoutWPA")))
ui->spinBox_timeoutWpa->setValue(settings[QString("TimeoutWPA")].toInt()); ui->spinBox_timeoutWpa->setValue(settings[QString("TimeoutWPA")].toInt());
if (settings.contains(QString("ExcludeAuto")))
if (settings[QString("ExcludeAuto")] == QString("yes"))
ui->checkBox_exclude->setCheckState(Qt::Checked);
changeSecurity(ui->comboBox_security->currentText()); changeSecurity(ui->comboBox_security->currentText());
} }

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>584</width> <width>584</width>
<height>670</height> <height>697</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
@ -280,11 +280,17 @@
<item> <item>
<layout class="QHBoxLayout" name="layout_wirelessAdvanced"> <layout class="QHBoxLayout" name="layout_wirelessAdvanced">
<item> <item>
<widget class="Line" name="line"> <spacer name="spacer_wirelessAdvanced">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
</widget> <property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item> </item>
<item> <item>
<widget class="QToolButton" name="pushButton_wirelessAdvanced"> <widget class="QToolButton" name="pushButton_wirelessAdvanced">
@ -307,6 +313,36 @@
<property name="margin"> <property name="margin">
<number>0</number> <number>0</number>
</property> </property>
<item>
<layout class="QHBoxLayout" name="layout_exclude">
<item>
<widget class="QLabel" name="label_exclude">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_exclude">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Whether or not to exclude this profile from automatic profile selection</string>
</property>
<property name="text">
<string>Exclude auto</string>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<layout class="QHBoxLayout" name="layout_hidden"> <layout class="QHBoxLayout" name="layout_hidden">
<item> <item>

View File

@ -18,16 +18,13 @@ add_subdirectory (${SUBPROJECT_SOURCE_DIR})
# build man # build man
file (GLOB SUBPROJECT_MAN_IN *.1) file (GLOB SUBPROJECT_MAN_IN *.1)
file (GLOB SUBPROJECT_MAN5_IN *.5) file (GLOB SUBPROJECT_MAN5_IN *.5)
file (GLOB SUBPROJECT_CONF_IN netctl-gui.conf)
file (RELATIVE_PATH SUBPROJECT_MAN ${CMAKE_SOURCE_DIR} ${SUBPROJECT_MAN_IN}) file (RELATIVE_PATH SUBPROJECT_MAN ${CMAKE_SOURCE_DIR} ${SUBPROJECT_MAN_IN})
file (RELATIVE_PATH SUBPROJECT_MAN5 ${CMAKE_SOURCE_DIR} ${SUBPROJECT_MAN5_IN}) file (RELATIVE_PATH SUBPROJECT_MAN5 ${CMAKE_SOURCE_DIR} ${SUBPROJECT_MAN5_IN})
file (RELATIVE_PATH SUBPROJECT_CONF ${CMAKE_SOURCE_DIR} ${SUBPROJECT_CONF_IN})
configure_file (${SUBPROJECT_MAN_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_MAN}) configure_file (${SUBPROJECT_MAN_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_MAN})
configure_file (${SUBPROJECT_MAN5_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_MAN5}) configure_file (${SUBPROJECT_MAN5_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_MAN5})
configure_file (${SUBPROJECT_CONF_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_CONF})
install (FILES org.netctlgui.helper.conf DESTINATION ${DBUS_SYSTEMCONF_PATH}) install (FILES org.netctlgui.helper.conf DESTINATION ${DBUS_SYSTEMCONF_PATH})
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_CONF} DESTINATION /etc) install (FILES netctl-gui.conf DESTINATION /etc)
install (FILES netctlgui-helper.service DESTINATION ${SYSTEMD_SERVICE_PATH}) install (FILES netctlgui-helper.service DESTINATION ${SYSTEMD_SERVICE_PATH})
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_MAN} DESTINATION share/man/man1/) install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_MAN} DESTINATION share/man/man1/)
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_MAN5} DESTINATION share/man/man5/) install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_MAN5} DESTINATION share/man/man5/)

View File

@ -5,81 +5,75 @@
[Common] [Common]
# application language # application language
#LANGUAGE="@CFG_LANGUAGE@" LANGUAGE=en
# auto update interval for main tab in seconds
# 0 means there is no updates
#MAINUPDATE="@CFG_MAINUPDATE@"
# auto update interval for wifi tab in seconds
# 0 means there is no updates
#WIFIUPDATE="@CFG_WIFIUPDATE@"
# create system tray icon. # create system tray icon.
# This option is not recognized by netctlgui-helper # This option is not recognized by netctlgui-helper
#SYSTRAY="@CFG_SYSTRAY@" SYSTRAY=true
# close helper after GUI application quit. # close helper after GUI application quit.
# This option is not recognized by netctlgui-helper # This option is not recognized by netctlgui-helper
#CLOSETOTRAY="@CFG_CLOSETOTRAY@" CLOSETOTRAY=true
# start netctl-gui minimized to tray if it is available. # start netctl-gui minimized to tray if it is available.
# This option is not recognized by netctlgui-helper # This option is not recognized by netctlgui-helper
#STARTTOTRAY="@CFG_STARTTOTRAY@" STARTTOTRAY=false
# skip external components checking # skip external components checking
# This option is not recognized by netctlgui-helper # This option is not recognized by netctlgui-helper
#SKIPCOMPONENTS="@CFG_SKIPCOMPONENTS@" SKIPCOMPONENTS=false
[Helper] [Helper]
# use netctlgui-helper if it is available. # use netctlgui-helper if it is available.
# This option is not recognized by netctlgui-helper # This option is not recognized by netctlgui-helper
#USE_HELPER="@CFG_USE_HELPER@" USE_HELPER=true
# force use SUDO_PATH for helper instead of using setuid(3) to child processes # force use SUDO_PATH for helper instead of using setuid(3) to child processes
#FORCE_SUDO="@CFG_FORCE_SUDO@" FORCE_SUDO=false
# hide application to tray on exit if tray is available. # hide application to tray on exit if tray is available.
# This option is not recognized by netctlgui-helper # This option is not recognized by netctlgui-helper
#CLOSE_HELPER="@CFG_CLOSE_HELPER@" CLOSE_HELPER=false
# path to netctlgui-helper. # path to netctlgui-helper.
# This option is not recognized by netctlgui-helper # This option is not recognized by netctlgui-helper
#HELPER_PATH="@CFG_HELPER_PATH@" HELPER_PATH=/usr/bin/netctlgui-helper
# netctlgui-helper service name. # netctlgui-helper service name.
# This option is not recognized by netctlgui-helper # This option is not recognized by netctlgui-helper
#HELPER_SERVICE="@CFG_HELPER_SERVICE@" HELPER_SERVICE=netctlgui-helper.service
[netctl] [netctl]
# path to systemctl # path to systemctl
#SYSTEMCTL_PATH="@CFG_SYSTEMCTL_PATH@" SYSTEMCTL_PATH=/usr/bin/systemctl
# path to netctl # path to netctl
#NETCTL_PATH="@CFG_NETCTL_PATH@" NETCTL_PATH=/usr/bin/netctl
# path to netctl-auto # path to netctl-auto
#NETCTLAUTO_PATH="@CFG_NETCTLAUTO_PATH@" NETCTLAUTO_PATH=/usr/bin/netctl-auto
# netctl-auto service name without .service suffix # netctl-auto service name without .service suffix
#NETCTLAUTO_SERVICE="@CFG_NETCTLAUTO_SERVICE@" NETCTLAUTO_SERVICE=netctl-auto
# path to netctl profile directory # path to netctl profile directory
#PROFILE_DIR="@CFG_PROFILE_DIR@" PROFILE_DIR=/etc/netctl/
[sudo] [sudo]
# path to sudo frontend # path to sudo frontend
#SUDO_PATH="@CFG_SUDO_PATH@" SUDO_PATH=/usr/bin/sudo
[wpa_supplicant] [wpa_supplicant]
# path to wpa_supplicant # path to wpa_supplicant
#WPASUP_PATH="@CFG_WPASUP_PATH@" WPASUP_PATH=/usr/bin/wpa_supplicant
# path to wpa_cli # path to wpa_cli
#WPACLI_PATH="@CFG_WPACLI_PATH@" WPACLI_PATH=/usr/bin/wpa_cli
# wpa_supplicant PID file # wpa_supplicant PID file
# $i is interface # $i is interface
#PID_FILE="@CFG_PID_FILE@" PID_FILE=/run/wpa_supplicant_$i.pid
# wpa_supplicant drivers for wireless interface comma separated # wpa_supplicant drivers for wireless interface comma separated
#WPA_DRIVERS="@CFG_WPA_DRIVERS@" WPA_DRIVERS="nl80211,wext"
# path to control directory which is required by wpa_supplicant # path to control directory which is required by wpa_supplicant
#CTRL_DIR="@CFG_CTRL_DIR@" CTRL_DIR=/run/wpa_supplicant
# group which is owner of CTRL_DIR # group which is owner of CTRL_DIR
#CTRL_GROUP="@CFG_CTRL_GROUP@" CTRL_GROUP=users
[Other] [Other]
# path to external editor # path to external editor
# This option is not recognized by netctlgui-helper # This option is not recognized by netctlgui-helper
#EDITOR_PATH="@CFG_EDITOR_PATH@" EDITOR_PATH=/usr/bin/gvim
# path to directory which contains interface information # path to directory which contains interface information
#IFACE_DIR="@CFG_IFACE_DIR@" IFACE_DIR=/sys/class/net/
# path to directory with rfkill devices. # path to directory with rfkill devices.
# This option is not recognized by netctlgui-helper # This option is not recognized by netctlgui-helper
#RFKILL_DIR="@CFG_RFKILL_DIR@" RFKILL_DIR=/sys/class/rfkill/
# prefered wireless interface # prefered wireless interface
#PREFERED_IFACE="@CFG_PREFERED_IFACE@" PREFERED_IFACE=

View File

@ -32,10 +32,10 @@ force use
for helper instead of using for helper instead of using
.BR setuid (3) .BR setuid (3)
to child processes to child processes
.IP "EDITOR_PATH=gvim" .IP "EDITOR_PATH=/usr/bin/gvim"
path to an external editor. This option is not recognized by path to an external editor. This option is not recognized by
.BR netctlgui-helper (1) .BR netctlgui-helper (1)
.IP "HELPER_PATH=netctlgui-helper" .IP "HELPER_PATH=/usr/bin/netctlgui-helper"
path to path to
.BR netctlgui-helper (1) .BR netctlgui-helper (1)
This option is not recognized by This option is not recognized by
@ -48,12 +48,10 @@ service name. This option is not recognized by
path to directory which contains interface information path to directory which contains interface information
.IP "LANGUAGE=en" .IP "LANGUAGE=en"
application language application language
.IP "MAINUPDATE=0" .IP "NETCTL_PATH=/usr/bin/netctl"
main tab autoupdate interval in seconds. 0 is disable autoupdate
.IP "NETCTL_PATH=netctl"
path to path to
.BR netctl (1) .BR netctl (1)
.IP "NETCTLAUTO_PATH=netctl-auto" .IP "NETCTLAUTO_PATH=/usr/bin/netctl-auto"
path to path to
.BR netctl-auto (1) .BR netctl-auto (1)
.IP "NETCTLAUTO_SERVICE=netctl-auto" .IP "NETCTLAUTO_SERVICE=netctl-auto"
@ -83,11 +81,11 @@ start
.BR netctl-gui (1) .BR netctl-gui (1)
minimized to tray if it is available. This option is not recognized by minimized to tray if it is available. This option is not recognized by
.BR netctlgui-helper (1) .BR netctlgui-helper (1)
.IP "SUDO_PATH=kdesu" .IP "SUDO_PATH=/usr/bin/kdesu"
path to path to
.BR sudo (8) .BR sudo (8)
frontend frontend
.IP "SYSTEMCTL_PATH=systemctl" .IP "SYSTEMCTL_PATH=/usr/bin/systemctl"
path to path to
.BR systemctl (1) .BR systemctl (1)
.IP "SYSTRAY=true" .IP "SYSTRAY=true"
@ -98,12 +96,10 @@ use
.BR netctlgui-helper (1) .BR netctlgui-helper (1)
if it is available. This option is not recognized by if it is available. This option is not recognized by
.BR netctlgui-helper (1) .BR netctlgui-helper (1)
.IP "WIFIUPDATE=0" .IP "WPACLI_PATH=/usr/bin/wpa_cli"
WiFi tab autoupdate interval in seconds. 0 is disable autoupdate
.IP "WPACLI_PATH=wpa_cli"
path to path to
.BR wpa_cli (8) .BR wpa_cli (8)
.IP "WPASUP_PATH=wpa_supplicant" .IP "WPASUP_PATH=/usr/bin/wpa_supplicant"
path to path to
.BR wpa_supplicant (8) .BR wpa_supplicant (8)
.IP "WPA_DRIVERS=nl80211,wext" .IP "WPA_DRIVERS=nl80211,wext"

View File

@ -1,14 +1,7 @@
# set files # set files
if (USE_QT5) file (GLOB_RECURSE SOURCES *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp
file (GLOB_RECURSE SOURCES *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp ${PROJECT_TRDPARTY_DIR}/language/*.cpp
${PROJECT_TRDPARTY_DIR}/language/*.cpp ${PROJECT_TRDPARTY_DIR}/listmap/*.cpp)
${PROJECT_TRDPARTY_DIR}/listmap/*.cpp
${PROJECT_TRDPARTY_DIR}/pdebug/*.cpp)
else ()
file (GLOB_RECURSE SOURCES *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp
${PROJECT_TRDPARTY_DIR}/language/*.cpp
${PROJECT_TRDPARTY_DIR}/listmap/*.cpp)
endif ()
file (GLOB_RECURSE HEADERS *.h ${PROJECT_TRDPARTY_DIR}/task/*.h file (GLOB_RECURSE HEADERS *.h ${PROJECT_TRDPARTY_DIR}/task/*.h
${PROJECT_TRDPARTY_DIR}/language/*.h) ${PROJECT_TRDPARTY_DIR}/language/*.h)

View File

@ -112,7 +112,7 @@ QString ControlAdaptor::SecurityDocs()
bool ControlAdaptor::SelfDestruct(const QString approve) bool ControlAdaptor::SelfDestruct(const QString approve)
{ {
if (approve == QString("Yes please")) return SelfDestruct(approve); if (approve == QString("Yes, please")) return SelfDestruct(approve);
return false; return false;
} }

View File

@ -32,10 +32,6 @@
#include "netctlhelper.h" #include "netctlhelper.h"
#include "version.h" #include "version.h"
#if QT_VERSION >= 0x050000
#include <pdebug/pdebug-time.h>
#endif /* QT_VERSION >= 0x050000 */
using namespace std; using namespace std;
@ -54,7 +50,7 @@ bool existingSessionOperation(const QString operation)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QVariantMap args = getArgs(); QMap<QString, QVariant> args = getArgs();
// reading // reading
for (int i=1; i<argc; i++) { for (int i=1; i<argc; i++) {
if ((QString(argv[i]) == QString("-c")) || (QString(argv[i]) == QString("--config"))) { if ((QString(argv[i]) == QString("-c")) || (QString(argv[i]) == QString("--config"))) {
@ -119,7 +115,6 @@ int main(int argc, char *argv[])
#if QT_VERSION >= 0x050000 #if QT_VERSION >= 0x050000
QCoreApplication::setSetuidAllowed(true); QCoreApplication::setSetuidAllowed(true);
qInstallMessageHandler(debugString);
#endif #endif
QCoreApplication a(argc, argv); QCoreApplication a(argc, argv);
// reread translations according to flags // reread translations according to flags

View File

@ -29,14 +29,14 @@ QString errorMessage()
} }
QVariantMap getArgs() QMap<QString, QVariant> getArgs()
{ {
QVariantMap args; QMap<QString, QVariant> args;
args[QString("config")] = QString("%1/.config/netctl-gui.conf").arg(QDir::homePath()); args[QString("config")] = QString("%1/.config/netctl-gui.conf").arg(QDir::homePath());
args[QString("debug")] = false; args[QString("debug")] = false;
args[QString("nodaemon")] = false; args[QString("nodaemon")] = false;
args[QString("session")] = false; args[QString("session")] = false;
args[QString("state")] = static_cast<int>(0); args[QString("state")] = (int) 0;
args[QString("system")] = false; args[QString("system")] = false;
args[QString("help")] = false; args[QString("help")] = false;
args[QString("info")] = false; args[QString("info")] = false;

View File

@ -25,7 +25,7 @@
QString errorMessage(); QString errorMessage();
QVariantMap getArgs(); QMap<QString, QVariant> getArgs();
QString helpMessage(); QString helpMessage();
QString infoMessage(); QString infoMessage();
QString versionMessage(); QString versionMessage();

View File

@ -39,25 +39,25 @@ NetctlAdaptor::~NetctlAdaptor()
// netctlCommand // netctlCommand
QStringList NetctlAdaptor::ActiveProfile() QString NetctlAdaptor::ActiveProfile()
{ {
if (isNetctlAutoActive()) if (isNetctlAutoActive())
return netctlCommand->autoGetActiveProfile(); return netctlCommand->autoGetActiveProfile();
else else
return netctlCommand->getActiveProfile(); return netctlCommand->getActiveProfile().join(QChar('|'));
} }
QStringList NetctlAdaptor::ActiveProfileStatus() QString NetctlAdaptor::ActiveProfileStatus()
{ {
if (isNetctlAutoActive()) if (isNetctlAutoActive())
return QStringList() << QString("netctl-auto"); return QString("netctl-auto");
else { else {
QStringList status; QStringList status;
QStringList profiles = ActiveProfile(); QStringList profiles = ActiveProfile().split(QChar('|'));
for (int i=0; i<profiles.count(); i++) for (int i=0; i<profiles.count(); i++)
status.append(netctlCommand->getProfileStatus(profiles[i])); status.append(netctlCommand->getProfileStatus(profiles[i]));
return status; return status.join(QChar('|'));
} }
} }
@ -108,9 +108,9 @@ bool NetctlAdaptor::isProfileEnabled(const QString profile)
} }
QStringList NetctlAdaptor::netctlActiveProfile() QString NetctlAdaptor::netctlActiveProfile()
{ {
return netctlCommand->getActiveProfile(); return netctlCommand->getActiveProfile().join(QChar('|'));
} }

View File

@ -37,8 +37,8 @@ public:
public slots: public slots:
// netctlCommand // netctlCommand
QStringList ActiveProfile(); QString ActiveProfile();
QStringList ActiveProfileStatus(); QString ActiveProfileStatus();
bool autoIsProfileActive(const QString profile); bool autoIsProfileActive(const QString profile);
bool autoIsProfileEnabled(const QString profile); bool autoIsProfileEnabled(const QString profile);
QStringList Information(); QStringList Information();
@ -46,7 +46,7 @@ public slots:
bool isNetctlAutoEnabled(); bool isNetctlAutoEnabled();
bool isProfileActive(const QString profile); bool isProfileActive(const QString profile);
bool isProfileEnabled(const QString profile); bool isProfileEnabled(const QString profile);
QStringList netctlActiveProfile(); QString netctlActiveProfile();
QStringList netctlProfileList(); QStringList netctlProfileList();
QStringList netctlVerboseProfileList(); QStringList netctlVerboseProfileList();
QStringList ProfileList(); QStringList ProfileList();

View File

@ -34,7 +34,7 @@
#include "version.h" #include "version.h"
NetctlHelper::NetctlHelper(QObject *parent, QVariantMap args) NetctlHelper::NetctlHelper(QObject *parent, QMap<QString, QVariant> args)
: QObject(parent), : QObject(parent),
configPath(args[QString("config")].toString()), configPath(args[QString("config")].toString()),
debug(args[QString("debug")].toBool()), debug(args[QString("debug")].toBool()),
@ -147,49 +147,47 @@ QMap<QString, QString> NetctlHelper::getSettings(const QString file)
QSettings settings(file, QSettings::IniFormat); QSettings settings(file, QSettings::IniFormat);
settings.beginGroup(QString("Common")); settings.beginGroup(QString("Common"));
config[QString("LANGUAGE")] = settings.value(QString("LANGUAGE"), QString(LANGUAGE)).toString(); config[QString("LANGUAGE")] = settings.value(QString("LANGUAGE"), QString("en")).toString();
config[QString("MAINUPDATE")] = settings.value(QString("MAINUPDATE"), QString(MAINUPDATE)).toString(); config[QString("SYSTRAY")] = settings.value(QString("SYSTRAY"), QString("true")).toString();
config[QString("WIFIUPDATE")] = settings.value(QString("WIFIUPDATE"), QString(WIFIUPDATE)).toString(); config[QString("CLOSETOTRAY")] = settings.value(QString("CLOSETOTRAY"), QString("true")).toString();
config[QString("SYSTRAY")] = settings.value(QString("SYSTRAY"), QString(SYSTRAY)).toString(); config[QString("STARTTOTRAY")] = settings.value(QString("STARTTOTRAY"), QString("false")).toString();
config[QString("CLOSETOTRAY")] = settings.value(QString("CLOSETOTRAY"), QString(CLOSETOTRAY)).toString(); config[QString("SKIPCOMPONENTS")] = settings.value(QString("SKIPCOMPONENTS"), QString("false")).toString();
config[QString("STARTTOTRAY")] = settings.value(QString("STARTTOTRAY"), QString(STARTTOTRAY)).toString();
config[QString("SKIPCOMPONENTS")] = settings.value(QString("SKIPCOMPONENTS"), QString(SKIPCOMPONENTS)).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("Helper")); settings.beginGroup(QString("Helper"));
config[QString("USE_HELPER")] = settings.value(QString("USE_HELPER"), QString(USE_HELPER)).toString(); config[QString("USE_HELPER")] = settings.value(QString("USE_HELPER"), QString("true")).toString();
config[QString("FORCE_SUDO")] = settings.value(QString("FORCE_SUDO"), QString(FORCE_SUDO)).toString(); config[QString("FORCE_SUDO")] = settings.value(QString("FORCE_SUDO"), QString("false")).toString();
config[QString("CLOSE_HELPER")] = settings.value(QString("CLOSE_HELPER"), QString(CLOSE_HELPER)).toString(); config[QString("CLOSE_HELPER")] = settings.value(QString("CLOSE_HELPER"), QString("false")).toString();
config[QString("HELPER_PATH")] = settings.value(QString("HELPER_PATH"), QString(HELPER_PATH)).toString(); config[QString("HELPER_PATH")] = settings.value(QString("HELPER_PATH"), QString("/usr/bin/netctlgui-helper")).toString();
config[QString("HELPER_SERVICE")] = settings.value(QString("HELPER_SERVICE"), QString(HELPER_SERVICE)).toString(); config[QString("HELPER_SERVICE")] = settings.value(QString("HELPER_SERVICE"), QString("netctlgui-helper.service")).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("netctl")); settings.beginGroup(QString("netctl"));
config[QString("SYSTEMCTL_PATH")] = settings.value(QString("SYSTEMCTL_PATH"), QString(SYSTEMCTL_PATH)).toString(); config[QString("SYSTEMCTL_PATH")] = settings.value(QString("SYSTEMCTL_PATH"), QString("/usr/bin/systemctl")).toString();
config[QString("NETCTL_PATH")] = settings.value(QString("NETCTL_PATH"), QString(NETCTL_PATH)).toString(); config[QString("NETCTL_PATH")] = settings.value(QString("NETCTL_PATH"), QString("/usr/bin/netctl")).toString();
config[QString("NETCTLAUTO_PATH")] = settings.value(QString("NETCTLAUTO_PATH"), QString(NETCTLAUTO_PATH)).toString(); config[QString("NETCTLAUTO_PATH")] = settings.value(QString("NETCTLAUTO_PATH"), QString("/usr/bin/netctl-auto")).toString();
config[QString("NETCTLAUTO_SERVICE")] = settings.value(QString("NETCTLAUTO_SERVICE"), QString(NETCTLAUTO_SERVICE)).toString(); config[QString("NETCTLAUTO_SERVICE")] = settings.value(QString("NETCTLAUTO_SERVICE"), QString("netctl-auto")).toString();
config[QString("PROFILE_DIR")] = settings.value(QString("PROFILE_DIR"), QString(PROFILE_DIR)).toString(); config[QString("PROFILE_DIR")] = settings.value(QString("PROFILE_DIR"), QString("/etc/netctl")).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("sudo")); settings.beginGroup(QString("sudo"));
config[QString("SUDO_PATH")] = settings.value(QString("SUDO_PATH"), QString(SUDO_PATH)).toString(); config[QString("SUDO_PATH")] = settings.value(QString("SUDO_PATH"), QString("/usr/bin/kdesu")).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("wpa_supplicant")); settings.beginGroup(QString("wpa_supplicant"));
config[QString("WPASUP_PATH")] = settings.value(QString("WPASUP_PATH"), QString(WPASUP_PATH)).toString(); config[QString("WPASUP_PATH")] = settings.value(QString("WPASUP_PATH"), QString("/usr/bin/wpa_supplicant")).toString();
config[QString("WPACLI_PATH")] = settings.value(QString("WPACLI_PATH"), QString(WPACLI_PATH)).toString(); config[QString("WPACLI_PATH")] = settings.value(QString("WPACLI_PATH"), QString("/usr/bin/wpa_cli")).toString();
config[QString("PID_FILE")] = settings.value(QString("PID_FILE"), QString(PID_FILE)).toString(); config[QString("PID_FILE")] = settings.value(QString("PID_FILE"), QString("/run/wpa_supplicant_$i.pid")).toString();
config[QString("WPA_DRIVERS")] = settings.value(QString("WPA_DRIVERS"), QString(WPA_DRIVERS)).toString(); config[QString("WPA_DRIVERS")] = settings.value(QString("WPA_DRIVERS"), QString("nl80211,wext")).toString();
config[QString("CTRL_DIR")] = settings.value(QString("CTRL_DIR"), QString(CTRL_DIR)).toString(); config[QString("CTRL_DIR")] = settings.value(QString("CTRL_DIR"), QString("/run/wpa_supplicant")).toString();
config[QString("CTRL_GROUP")] = settings.value(QString("CTRL_GROUP"), QString(CTRL_GROUP)).toString(); config[QString("CTRL_GROUP")] = settings.value(QString("CTRL_GROUP"), QString("users")).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("Other")); settings.beginGroup(QString("Other"));
config[QString("EDITOR_PATH")] = settings.value(QString("EDITOR_PATH"), QString(EDITOR_PATH)).toString(); config[QString("EDITOR_PATH")] = settings.value(QString("EDITOR_PATH"), QString("/usr/bin/gvim")).toString();
config[QString("IFACE_DIR")] = settings.value(QString("IFACE_DIR"), QString(IFACE_DIR)).toString(); config[QString("IFACE_DIR")] = settings.value(QString("IFACE_DIR"), QString("/sys/class/net/")).toString();
config[QString("RFKILL_DIR")] = settings.value(QString("RFKILL_DIR"), QString(RFKILL_DIR)).toString(); config[QString("RFKILL_DIR")] = settings.value(QString("RFKILL_DIR"), QString("/sys/class/rfkill/")).toString();
config[QString("PREFERED_IFACE")] = settings.value(QString("PREFERED_IFACE"), QString(PREFERED_IFACE)).toString(); config[QString("PREFERED_IFACE")] = settings.value(QString("PREFERED_IFACE"), QString("")).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("Toolbars")); settings.beginGroup(QString("Toolbars"));
@ -212,7 +210,7 @@ void NetctlHelper::updateConfiguration()
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
deleteInterface(); deleteInterface();
if ((system) || (!QFile(configPath).exists())) if (system)
configuration = getSettings(QString("/etc/netctl-gui.conf")); configuration = getSettings(QString("/etc/netctl-gui.conf"));
else else
configuration = getSettings(configPath); configuration = getSettings(configPath);

View File

@ -29,7 +29,7 @@ class NetctlHelper : public QObject
public: public:
explicit NetctlHelper(QObject *parent = 0, explicit NetctlHelper(QObject *parent = 0,
QVariantMap args = QVariantMap()); QMap<QString, QVariant> args = QMap<QString, QVariant>());
~NetctlHelper(); ~NetctlHelper();
QStringList printSettings(); QStringList printSettings();

View File

@ -32,7 +32,6 @@
class NetctlProfile; class NetctlProfile;
struct TaskResult;
/** /**
* @struct netctlProfileInfo * @struct netctlProfileInfo
@ -93,75 +92,81 @@ public:
/** /**
* @brief Netctl class destructor * @brief Netctl class destructor
*/ */
virtual ~Netctl(); ~Netctl();
// general information // general information
/** /**
* @brief method which returns active profile name * @brief method which returns active profile name
* @return Netctl::getActiveProfileTemplate() * @return profile name or ""
*/ */
QStringList getActiveProfile() const; QStringList getActiveProfile();
/** /**
* @brief method which returns active profile name from netctl-auto * @brief method which returns active profile name from netctl-auto
* @return Netctl::getActiveProfileTemplate() * @return profile name or ""
*/ */
QStringList autoGetActiveProfile() const; QString autoGetActiveProfile();
/** /**
* @brief method which returns profile informations from netctl * @brief method which returns profile informations from netctl
* @return Netctl::getProfileListTemplate() * @return list of profiles
*/ */
QList<netctlProfileInfo> getProfileList() const; QList<netctlProfileInfo> getProfileList();
/** /**
* @brief method which returns profile informations from netctl-auto * @brief method which returns profile informations from netctl-auto
* @return Netctl::getProfileListTemplate() * @return list of profiles from netctl-auto
*/ */
QList<netctlProfileInfo> getProfileListFromNetctlAuto() const; QList<netctlProfileInfo> getProfileListFromNetctlAuto();
/**
* @brief method which gets description from profile
* @param profile profile name
* @return profile description or ""
*/
Q_DECL_DEPRECATED QString getProfileDescription(const QString profile);
/** /**
* @brief method which gets profile status * @brief method which gets profile status
* @param profile profile name * @param profile profile name
* @return profile status. It may be "active (enabled)", "active (static)", * @return profile status. It may be "active (enabled)", "active (static)",
* "inactive (enabled)", "inactive (static)" * "inactive (enabled)", "inactive (static)"
*/ */
QString getProfileStatus(const QString profile) const; QString getProfileStatus(const QString profile);
/** /**
* @brief method which checks if profile is active * @brief method which checks if profile is active
* @param profile profile name * @param profile profile name
* @return false if profile is inactive * @return false if profile is inactive
* @return true if profile is active * @return true if profile is active
*/ */
bool isProfileActive(const QString profile) const; bool isProfileActive(const QString profile);
/** /**
* @brief method which checks if profile is enabled * @brief method which checks if profile is enabled
* @param profile profile name * @param profile profile name
* @return false if profile is disabled * @return false if profile is disabled
* @return true if profile is enabled * @return true if profile is enabled
*/ */
bool isProfileEnabled(const QString profile) const; bool isProfileEnabled(const QString profile);
/** /**
* @brief method which checks if profile is active (netctl-auto) * @brief method which checks if profile is active (netctl-auto)
* @param profile profile name * @param profile profile name
* @return false if profile is inactive * @return false if profile is inactive
* @return true if profile is active * @return true if profile is active
*/ */
bool autoIsProfileActive(const QString profile) const; bool autoIsProfileActive(const QString profile);
/** /**
* @brief method which checks if profile is enabled (netctl-auto) * @brief method which checks if profile is enabled (netctl-auto)
* @param profile profile name * @param profile profile name
* @return false if profile is disabled * @return false if profile is disabled
* @return true if profile is enabled * @return true if profile is enabled
*/ */
bool autoIsProfileEnabled(const QString profile) const; bool autoIsProfileEnabled(const QString profile);
/** /**
* @brief method which checks netctl-auto autoload status * @brief method which checks netctl-auto autoload status
* @return false if netctl-auto is disabled * @return false if netctl-auto is disabled
* @return true if netctl-auto is enabled * @return true if netctl-auto is enabled
*/ */
bool isNetctlAutoEnabled() const; bool isNetctlAutoEnabled();
/** /**
* @brief method which checks netctl-auto status * @brief method which checks netctl-auto status
* @return false if netctl-auto is inactive * @return false if netctl-auto is inactive
* @return true if netctl-auto is active * @return true if netctl-auto is active
*/ */
bool isNetctlAutoRunning() const; bool isNetctlAutoRunning();
/** /**
* @brief method which check system configuration and return recommended values to keys * @brief method which check system configuration and return recommended values to keys
* @return recommended parametrs * @return recommended parametrs
@ -171,7 +176,7 @@ public:
* @brief method which gets wireless interface list from PREFERED_IFACE and IFACE_DIR * @brief method which gets wireless interface list from PREFERED_IFACE and IFACE_DIR
* @return interface list. If PREFERED_IFACE is not empty it will be first element * @return interface list. If PREFERED_IFACE is not empty it will be first element
*/ */
QStringList getWirelessInterfaceList() const; QStringList getWirelessInterfaceList();
public slots: public slots:
// functions // functions
@ -182,101 +187,101 @@ public slots:
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool enableProfile(const QString profile) const; bool enableProfile(const QString profile);
/** /**
* @brief method which force starts profile * @brief method which force starts profile
* @param profile profile name * @param profile profile name
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool forceStartProfile(const QString profile) const; bool forceStartProfile(const QString profile);
/** /**
* @brief method which force stops profile * @brief method which force stops profile
* @param profile profile name * @param profile profile name
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool forceStopProfile(const QString profile) const; bool forceStopProfile(const QString profile);
/** /**
* @brief method which reenables profile * @brief method which reenables profile
* @param profile profile name * @param profile profile name
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool reenableProfile(const QString profile) const; bool reenableProfile(const QString profile);
/** /**
* @brief method which restarts profile * @brief method which restarts profile
* @param profile profile name * @param profile profile name
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool restartProfile(const QString profile) const; bool restartProfile(const QString profile);
/** /**
* @brief method which starts or stops profile * @brief method which starts or stops profile
* @param profile profile name * @param profile profile name
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool startProfile(const QString profile) const; bool startProfile(const QString profile);
/** /**
* @brief method which stops all profiles * @brief method which stops all profiles
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool stopAllProfiles() const; bool stopAllProfiles();
/** /**
* @brief method which starts another profile * @brief method which starts another profile
* @param profile profile name * @param profile profile name
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool switchToProfile(const QString profile) const; bool switchToProfile(const QString profile);
// netctl-auto // netctl-auto
/** /**
* @brief method which sets all profiles disabled (netctl-auto) * @brief method which sets all profiles disabled (netctl-auto)
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool autoDisableAllProfiles() const; bool autoDisableAllProfiles();
/** /**
* @brief method which sets profile disabled or enabled (netctl-auto) * @brief method which sets profile disabled or enabled (netctl-auto)
* @param profile profile name * @param profile profile name
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool autoEnableProfile(const QString profile) const; bool autoEnableProfile(const QString profile);
/** /**
* @brief method which sets all profiles enabled (netctl-auto) * @brief method which sets all profiles enabled (netctl-auto)
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool autoEnableAllProfiles() const; bool autoEnableAllProfiles();
/** /**
* @brief method which switchs to profile (netctl-auto) * @brief method which switchs to profile (netctl-auto)
* @param profile profile name * @param profile profile name
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool autoStartProfile(const QString profile) const; bool autoStartProfile(const QString profile);
// netctl-auto service // netctl-auto service
/** /**
* @brief method which sets netctl-auto service enabled or disabled * @brief method which sets netctl-auto service enabled or disabled
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool autoEnableService() const; bool autoEnableService();
/** /**
* @brief method which restarted netctl-auto service * @brief method which restarted netctl-auto service
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool autoRestartService() const; bool autoRestartService();
/** /**
* @brief method which starts or stops netctl-auto service * @brief method which starts or stops netctl-auto service
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool autoStartService() const; bool autoStartService();
private: private:
/** /**
@ -290,7 +295,7 @@ private:
/** /**
* @brief use RootProcess instead of QProcess. Default is true * @brief use RootProcess instead of QProcess. Default is true
*/ */
bool useSuid; bool useSuid = true;
/** /**
* @brief directory with interfaces. Default is "/sys/class/net/" * @brief directory with interfaces. Default is "/sys/class/net/"
*/ */
@ -298,27 +303,27 @@ private:
/** /**
* @brief prefered interface for WiFi. Default is "" * @brief prefered interface for WiFi. Default is ""
*/ */
QString mainInterface; QString mainInterface = QString("");
/** /**
* @brief path to netctl command. Default is "netctl" * @brief path to netctl command. Default is "/usr/bin/netctl"
*/ */
QString netctlCommand; QString netctlCommand = QString("/usr/bin/netctl");
/** /**
* @brief path to netctl-auto command. Default is "netctl-auto" * @brief path to netctl-auto command. Default is "/usr/bin/netctl-auto"
*/ */
QString netctlAutoCommand; QString netctlAutoCommand = QString("/usr/bin/netctl-auto");
/** /**
* @brief netctl-auto service name. Default is "netctl-auto" * @brief netctl-auto service name. Default is "netctl-auto"
*/ */
QString netctlAutoService; QString netctlAutoService = QString("netctl-auto");
/** /**
* @brief path to sudo command. Default is "kdesu" * @brief path to sudo command. Default is "/usr/bin/kdesu"
*/ */
QString sudoCommand; QString sudoCommand = QString("/usr/bin/kdesu");
/** /**
* @brief path to systemctl command. Default is "systemctl" * @brief path to systemctl command. Default is "/usr/bin/systemctl"
*/ */
QString systemctlCommand; QString systemctlCommand = QString("/usr/bin/systemctl");
// functions // functions
/** /**
* @brief method which calls command * @brief method which calls command
@ -326,22 +331,21 @@ private:
* @param command command which will be called * @param command command which will be called
* @param commandLine command which will be passed to command * @param commandLine command which will be passed to command
* @param argument argument which will be passed to commandLine * @param argument argument which will be passed to commandLine
* @return process object * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors
*/ */
TaskResult cmdCall(const bool sudo, const QString command, bool cmdCall(const bool sudo, const QString command,
const QString commandLine, const QString argument = QString()) const; const QString commandLine, const QString argument = 0);
/** /**
* @brief method which parse output for profile data * @brief method which calls command and returns its output
* @param data profile list data * @param sudo set true if sudo is needed
* @return list of active profiles if any * @param command command which will be called
* @param commandLine command which will be passed to command
* @param argument argument which will be passed to commandLine
* @return command output
*/ */
QStringList getActiveProfileTemplate(const QList<netctlProfileInfo> data) const; QString getCmdOutput(const bool sudo, const QString command,
/** const QString commandLine, const QString argument = 0);
* @brief get profile list from sources
* @param isAuto use netctl-auto instead of netctl
* @return profile list
*/
QList<netctlProfileInfo> getProfileListTemplate(const bool isAuto) const;
}; };

View File

@ -109,7 +109,7 @@ public:
/** /**
* @brief NetctlInterface class destructor * @brief NetctlInterface class destructor
*/ */
virtual ~NetctlInterface(); ~NetctlInterface();
// control methods // control methods
/** /**
* @brief method which creates and copies profile * @brief method which creates and copies profile
@ -120,7 +120,7 @@ public:
* @return InterfaceAnswer::True if profile is created * @return InterfaceAnswer::True if profile is created
* @return InterfaceAnswer::Error if an error occurs * @return InterfaceAnswer::Error if an error occurs
*/ */
InterfaceAnswer createProfile(const QString profile, const QMap<QString, QString> settings) const; InterfaceAnswer createProfile(const QString profile, const QMap<QString, QString> settings);
/** /**
* @brief method which connects to ESSID * @brief method which connects to ESSID
* @remark netctl independ * @remark netctl independ
@ -130,7 +130,7 @@ public:
* @return InterfaceAnswer::True if profile is active * @return InterfaceAnswer::True if profile is active
* @return InterfaceAnswer::Error if an error occurs * @return InterfaceAnswer::Error if an error occurs
*/ */
InterfaceAnswer connectToEssid(const QString essid, QMap<QString, QString> settings) const; InterfaceAnswer connectToEssid(const QString essid, QMap<QString, QString> settings);
/** /**
* @brief method which connects to existent profile by ESSID * @brief method which connects to existent profile by ESSID
* @remark netctl independ * @remark netctl independ
@ -139,7 +139,7 @@ public:
* @return InterfaceAnswer::True if profile is active * @return InterfaceAnswer::True if profile is active
* @return InterfaceAnswer::Error if an error occurs * @return InterfaceAnswer::Error if an error occurs
*/ */
InterfaceAnswer connectToKnownEssid(const QString essid) const; InterfaceAnswer connectToKnownEssid(const QString essid);
/** /**
* @brief method which creates wireless profile and connects to it * @brief method which creates wireless profile and connects to it
* @remark netctl independ * @remark netctl independ
@ -149,7 +149,7 @@ public:
* @return InterfaceAnswer::True if profile is active * @return InterfaceAnswer::True if profile is active
* @return InterfaceAnswer::Error if an error occurs * @return InterfaceAnswer::Error if an error occurs
*/ */
InterfaceAnswer connectToUnknownEssid(const QString essid, QMap<QString, QString> settings) const; InterfaceAnswer connectToUnknownEssid(const QString essid, QMap<QString, QString> settings);
/** /**
* @brief method which enables or disables selected profile and returns its status * @brief method which enables or disables selected profile and returns its status
* @remark netctl only * @remark netctl only
@ -158,7 +158,7 @@ public:
* @return InterfaceAnswer::True if profile is enabled * @return InterfaceAnswer::True if profile is enabled
* @return InterfaceAnswer::Error if an error occurs * @return InterfaceAnswer::Error if an error occurs
*/ */
InterfaceAnswer enableProfile(const QString profile) const; InterfaceAnswer enableProfile(const QString profile);
/** /**
* @brief method which removes selected profile * @brief method which removes selected profile
* @remark netctl independ * @remark netctl independ
@ -166,7 +166,7 @@ public:
* @return InterfaceAnswer::True if profile does not exists anymore * @return InterfaceAnswer::True if profile does not exists anymore
* @return InterfaceAnswer::Error if an error occurs * @return InterfaceAnswer::Error if an error occurs
*/ */
InterfaceAnswer removeProfile(const QString profile) const; InterfaceAnswer removeProfile(const QString profile);
/** /**
* @brief method which restarts selected profile and returns its status * @brief method which restarts selected profile and returns its status
* @remark netctl only * @remark netctl only
@ -175,7 +175,7 @@ public:
* @return InterfaceAnswer::True if profile is active * @return InterfaceAnswer::True if profile is active
* @return InterfaceAnswer::Error if an error occurs * @return InterfaceAnswer::Error if an error occurs
*/ */
InterfaceAnswer restartProfile(const QString profile) const; InterfaceAnswer restartProfile(const QString profile);
/** /**
* @brief method which starts/stops or switchs to selected profile and returns its status * @brief method which starts/stops or switchs to selected profile and returns its status
* @remark netctl only * @remark netctl only
@ -184,14 +184,14 @@ public:
* @return InterfaceAnswer::True if profile is active * @return InterfaceAnswer::True if profile is active
* @return InterfaceAnswer::Error if an error occurs * @return InterfaceAnswer::Error if an error occurs
*/ */
InterfaceAnswer startProfile(const QString profile) const; InterfaceAnswer startProfile(const QString profile);
/** /**
* @brief method which stops all profiles * @brief method which stops all profiles
* @remark netctl only * @remark netctl only
* @return InterfaceAnswer::True if there are no errors * @return InterfaceAnswer::True if there are no errors
* @return InterfaceAnswer::Error if an error occurs * @return InterfaceAnswer::Error if an error occurs
*/ */
InterfaceAnswer stopAllProfiles() const; InterfaceAnswer stopAllProfiles();
/** /**
* @brief method which switchs to selected profile and returns its status * @brief method which switchs to selected profile and returns its status
* @remark both netctl and netctl-auto * @remark both netctl and netctl-auto
@ -200,26 +200,26 @@ public:
* @return InterfaceAnswer::True if profile is active * @return InterfaceAnswer::True if profile is active
* @return InterfaceAnswer::Error if an error occurs * @return InterfaceAnswer::Error if an error occurs
*/ */
InterfaceAnswer switchToProfile(const QString profile) const; InterfaceAnswer switchToProfile(const QString profile);
// information // information
/** /**
* @brief method which returns general information * @brief method which returns general information
* @remark both netctl and netctl-auto * @remark both netctl and netctl-auto
* @return netctlInformation structure * @return netctlInformation structure
*/ */
netctlInformation information() const; netctlInformation information();
/** /**
* @brief method which reads settings from profile * @brief method which reads settings from profile
* @param profile profile name * @param profile profile name
* @return settings from profile * @return settings from profile
*/ */
QMap<QString, QString> profileSettings(const QString profile) const; QMap<QString, QString> profileSettings(const QString profile);
/** /**
* @brief method which returns current status * @brief method which returns current status
* @remark both netctl and netctl-auto * @remark both netctl and netctl-auto
* @return netctlCurrent structure * @return netctlCurrent structure
*/ */
netctlCurrent status() const; netctlCurrent status();
private: private:
/** /**

View File

@ -52,21 +52,21 @@ public:
/** /**
* @brief Netctl class destructor * @brief Netctl class destructor
*/ */
virtual ~NetctlProfile(); ~NetctlProfile();
/** /**
* @brief method which copies temporary profile to PROFILE_DIR * @brief method which copies temporary profile to PROFILE_DIR
* @param oldPath path to temprorary profile * @param oldPath path to temprorary profile
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool copyProfile(const QString oldPath) const; bool copyProfile(const QString oldPath);
/** /**
* @brief method which creates temporary profile * @brief method which creates temporary profile
* @param profile profile name * @param profile profile name
* @param settings profile configuration. All available keys will be printed to the profile * @param settings profile configuration. All available keys will be printed to the profile
* @return temporary profile name * @return temporary profile name
*/ */
QString createProfile(const QString profile, const QMap<QString, QString> settings) const; QString createProfile(const QString profile, const QMap<QString, QString> settings);
/** /**
* @brief method which check system configuration and return recommended values to keys * @brief method which check system configuration and return recommended values to keys
* @return recommended parametrs * @return recommended parametrs
@ -77,28 +77,28 @@ public:
* @param profile profile name * @param profile profile name
* @return settings from profile * @return settings from profile
*/ */
QMap<QString, QString> getSettingsFromProfile(const QString profile) const; QMap<QString, QString> getSettingsFromProfile(const QString profile);
/** /**
* @brief method which return value from profile by key * @brief method which return value from profile by key
* @param profile profile name * @param profile profile name
* @param key required key * @param key required key
* @return value by key * @return value by key
*/ */
QString getValueFromProfile(const QString profile, const QString key) const; QString getValueFromProfile(const QString profile, const QString key);
/** /**
* @brief method which return values from profile by keys * @brief method which return values from profile by keys
* @param profile profile name * @param profile profile name
* @param keys required keys * @param keys required keys
* @return values by keys * @return values by keys
*/ */
QStringList getValuesFromProfile(const QString profile, const QStringList keys) const; QStringList getValuesFromProfile(const QString profile, const QStringList keys);
/** /**
* @brief method which removes profile * @brief method which removes profile
* @param profile profile name * @param profile profile name
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool removeProfile(const QString profile) const; bool removeProfile(const QString profile);
private: private:
/** /**
@ -108,15 +108,15 @@ private:
/** /**
* @brief use RootProcess instead of QProcess. Default is true * @brief use RootProcess instead of QProcess. Default is true
*/ */
bool useSuid; bool useSuid = true;
/** /**
* @brief directory which contains profiles. Default is "/etc/netctl" * @brief directory which contains profiles. Default is "/etc/netctl"
*/ */
QDir *profileDirectory = nullptr; QDir *profileDirectory = nullptr;
/** /**
* @brief path to sudo command. Default is "kdesu" * @brief path to sudo command. Default is "/usr/bin/kdesu"
*/ */
QString sudoCommand; QString sudoCommand = QString("/usr/bin/kdesu");
}; };

View File

@ -111,14 +111,14 @@ public:
/** /**
* @brief WpaSup class destructor * @brief WpaSup class destructor
*/ */
virtual ~WpaSup(); ~WpaSup();
// general information // general information
/** /**
* @brief method which gets profile name by ESSID * @brief method which gets profile name by ESSID
* @param essid ESSID name * @param essid ESSID name
* @return profile name * @return profile name
*/ */
QString existentProfile(const QString essid) const; QString existentProfile(const QString essid);
/** /**
* @brief method which check system configuration and return recommended values to keys * @brief method which check system configuration and return recommended values to keys
* @return recommended parametrs * @return recommended parametrs
@ -130,7 +130,14 @@ public:
* @return false if profile is inactive * @return false if profile is inactive
* @return true if profile is active * @return true if profile is active
*/ */
bool isProfileActive(const QString essid) const; bool isProfileActive(const QString essid);
/**
* @brief method which checks profile existence by ESSID
* @param essid ESSID name
* @return false if profile does not exist
* @return true if profile exists
*/
Q_DECL_DEPRECATED bool isProfileExists(const QString essid);
public slots: public slots:
// functions // functions
@ -138,24 +145,24 @@ public slots:
* @brief method which returns active point information * @brief method which returns active point information
* @return current point information * @return current point information
*/ */
netctlWifiInfo current() const; netctlWifiInfo current();
/** /**
* @brief method which scans WiFi networks * @brief method which scans WiFi networks
* @return list of essids * @return list of essids
*/ */
QList<netctlWifiInfo> scanWifi() const; QList<netctlWifiInfo> scanWifi();
/** /**
* @brief method which calls wpa_supplicant * @brief method which calls wpa_supplicant
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool startWpaSupplicant() const; bool startWpaSupplicant();
/** /**
* @brief method which send TERMINATE signal to wpa_supplicant * @brief method which send TERMINATE signal to wpa_supplicant
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool stopWpaSupplicant() const; bool stopWpaSupplicant();
private: private:
/** /**
@ -173,54 +180,54 @@ private:
/** /**
* @brief use RootProcess instead of QProcess. Default is true * @brief use RootProcess instead of QProcess. Default is true
*/ */
bool useSuid; bool useSuid = true;
/** /**
* @brief path to ctrl_directory. Defaults is "/run/wpa_supplicant" * @brief path to ctrl_directory. Defaults is "/run/wpa_supplicant"
*/ */
QString ctrlDir; QString ctrlDir = QString("/run/wpa_supplicant");
/** /**
* @brief group which is owner of CTRL_DIR. Default is "users" * @brief group which is owner of CTRL_DIR. Default is "users"
*/ */
QString ctrlGroup; QString ctrlGroup = QString("users");
/** /**
* @brief wpa_supplicant PID file. $i is interface. Default is "/run/wpa_supplicant_$i.pid" * @brief wpa_supplicant PID file. $i is interface. Default is "/run/wpa_supplicant_$i.pid"
*/ */
QString pidFile; QString pidFile = QString("/run/wpa_supplicant_$i.pid");
/** /**
* @brief path to sudo command. Default is "kdesu" * @brief path to sudo command. Default is "/usr/bin/kdesu"
*/ */
QString sudoCommand; QString sudoCommand = QString("/usr/bin/kdesu");
/** /**
* @brief path to wpa_cli command. Default is "wpa_cli" * @brief path to wpa_cli command. Default is "/usr/bin/wpa_cli"
*/ */
QString wpaCliPath; QString wpaCliPath = QString("/usr/bin/wpa_cli");
/** /**
* @brief wpa_supplicant drivers comma separated. Default is "nl80211,wext" * @brief wpa_supplicant drivers comma separated. Default is "nl80211,wext"
*/ */
QString wpaDrivers; QString wpaDrivers = QString("nl80211,wext");
/** /**
* @brief path to wpa_supplicant command. Default is "wpa_supplicant" * @brief path to wpa_supplicant command. Default is "/usr/bin/wpa_supplicant"
*/ */
QString wpaSupPath; QString wpaSupPath = QString("/usr/bin/wpa_supplicant");
// functions // functions
/** /**
* @brief method which calls wpa_cli and returns its output * @brief method which calls wpa_cli and returns its output
* @param commandLine command which will be passed to wpa_cli * @param commandLine command which will be passed to wpa_cli
* @return wpa_cli output * @return wpa_cli output
*/ */
QString getWpaCliOutput(const QString commandLine) const; QString getWpaCliOutput(const QString commandLine);
/** /**
* @brief method which will be called to sleep thread * @brief method which will be called to sleep thread
* @param sec time interval, seconds * @param sec time interval, seconds
*/ */
bool waitForProcess(const int sec) const; bool waitForProcess(const int sec);
/** /**
* @brief method which calls wpa_cli * @brief method which calls wpa_cli
* @param commandLine command which will be passed to wpa_cli * @param commandLine command which will be passed to wpa_cli
* @return false if components are not found or command exit code is not equal to 0 * @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors * @return true if the method was completed without errors
*/ */
bool wpaCliCall(const QString commandLine) const; bool wpaCliCall(const QString commandLine);
}; };

View File

@ -1,10 +1,5 @@
# set files # set files
if (USE_QT5) file (GLOB_RECURSE SOURCES *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp)
file (GLOB_RECURSE SOURCES *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp
${PROJECT_TRDPARTY_DIR}/pdebug/*.cpp)
else ()
file (GLOB_RECURSE SOURCES *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp)
endif ()
file (GLOB_RECURSE HEADERS *.h ${SUBPROJECT_INCLUDE_DIR}/*h file (GLOB_RECURSE HEADERS *.h ${SUBPROJECT_INCLUDE_DIR}/*h
${PROJECT_TRDPARTY_DIR}/task/*.h) ${PROJECT_TRDPARTY_DIR}/task/*.h)

View File

@ -30,8 +30,6 @@
#include <pdebug/pdebug.h> #include <pdebug/pdebug.h>
#include <task/taskadds.h> #include <task/taskadds.h>
#include "version.h"
/** /**
* @class Netctl * @class Netctl
@ -44,16 +42,27 @@ Netctl::Netctl(const bool debugCmd, const QMap<QString, QString> settings)
{ {
netctlProfile = new NetctlProfile(debug, settings); netctlProfile = new NetctlProfile(debug, settings);
ifaceDirectory = new QDir(settings.value(QString("IFACE_DIR"), QString(IFACE_DIR))); if (settings.contains(QString("IFACE_DIR")))
mainInterface = settings.value(QString("PREFERED_IFACE"), QString(PREFERED_IFACE)); ifaceDirectory = new QDir(settings[QString("IFACE_DIR")]);
netctlCommand = settings.value(QString("NETCTL_PATH"), QString(NETCTL_PATH)); else
netctlAutoCommand = settings.value(QString("NETCTLAUTO_PATH"), QString(NETCTLAUTO_PATH)); ifaceDirectory = new QDir(QString("/sys/class/net/"));
netctlAutoService = settings.value(QString("NETCTLAUTO_SERVICE"), QString(NETCTLAUTO_SERVICE)); if (settings.contains(QString("PREFERED_IFACE")))
sudoCommand = settings.value(QString("SUDO_PATH"), QString(SUDO_PATH)); mainInterface = settings[QString("PREFERED_IFACE")];
systemctlCommand = settings.value(QString("SYSTEMCTL_PATH"), QString(SYSTEMCTL_PATH)); if (settings.contains(QString("NETCTL_PATH")))
useSuid = (settings.value(QString("FORCE_SUDO"), QString("true")) != QString("true")); netctlCommand = settings[QString("NETCTL_PATH")];
if (settings.contains(QString("NETCTLAUTO_PATH")))
netctlAutoCommand = settings[QString("NETCTLAUTO_PATH")];
if (settings.contains(QString("NETCTLAUTO_SERVICE")))
netctlAutoService = settings[QString("NETCTLAUTO_SERVICE")];
if (settings.contains(QString("SUDO_PATH")))
sudoCommand = settings[QString("SUDO_PATH")];
if (settings.contains(QString("SYSTEMCTL_PATH")))
systemctlCommand = settings[QString("SYSTEMCTL_PATH")];
if (settings.contains(QString("FORCE_SUDO")))
useSuid = (settings[QString("FORCE_SUDO")] != QString("true"));
if (useSuid) sudoCommand = QString(""); if (useSuid)
sudoCommand = QString("");
} }
@ -69,61 +78,208 @@ Netctl::~Netctl()
} }
// functions
/**
* @fn cmdCall
*/
bool Netctl::cmdCall(const bool sudo, const QString command, const QString commandLine, const QString argument)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Command" << command;
if (debug) qDebug() << PDEBUG << ":" << "Command line" << commandLine;
if (debug) qDebug() << PDEBUG << ":" << "Argument" << argument;
if (command.isEmpty()) {
if (debug) qDebug() << PDEBUG << ":" << "Could not find command";
return false;
}
QString cmd = QString("");
if (sudo)
cmd = QString("%1 ").arg(sudoCommand);
cmd += QString("%1 %2").arg(command).arg(commandLine);
if (!argument.isEmpty())
cmd += QString(" \"%1\"").arg(argument);
if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd;
TaskResult process = runTask(cmd, (useSuid && sudo));
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
if (process.exitCode != 0)
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error;
return (process.exitCode == 0);
}
/**
* @fn getCmdOutput
*/
QString Netctl::getCmdOutput(const bool sudo, const QString command, const QString commandLine, const QString argument)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Command" << command;
if (debug) qDebug() << PDEBUG << ":" << "Command line" << commandLine;
if (debug) qDebug() << PDEBUG << ":" << "Argument" << argument;
if (command.isEmpty()) {
if (debug) qDebug() << PDEBUG << ":" << "Could not find command";
return QString();
}
QString cmd = QString("");
if (sudo)
cmd = QString("%1 ").arg(sudoCommand);
cmd += QString("%1 %2").arg(command).arg(commandLine);
if (!argument.isEmpty())
cmd += QString(" \"%1\"").arg(argument);
if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd;
TaskResult process = runTask(cmd, (useSuid && sudo));
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
if (process.exitCode != 0)
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error;
return process.output;
}
// general information // general information
/** /**
* @fn getActiveProfile * @fn getActiveProfile
*/ */
QStringList Netctl::getActiveProfile() const QStringList Netctl::getActiveProfile()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
return getActiveProfileTemplate(getProfileList()); QStringList profile;
QList<netctlProfileInfo> fullProfilesInfo = getProfileList();
for (int i=0; i<fullProfilesInfo.count(); i++)
if (fullProfilesInfo[i].active)
profile.append(fullProfilesInfo[i].name);
return profile;
} }
/** /**
* @fn autoGetActiveProfile * @fn autoGetActiveProfile
*/ */
QStringList Netctl::autoGetActiveProfile() const QString Netctl::autoGetActiveProfile()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
return getActiveProfileTemplate(getProfileListFromNetctlAuto()); QString profile = QString("");
QList<netctlProfileInfo> fullProfilesInfo = getProfileListFromNetctlAuto();
for (int i=0; i<fullProfilesInfo.count(); i++)
if (fullProfilesInfo[i].active) {
profile = fullProfilesInfo[i].name;
break;
}
return profile;
} }
/** /**
* @fn getProfileList * @fn getProfileList
*/ */
QList<netctlProfileInfo> Netctl::getProfileList() const QList<netctlProfileInfo> Netctl::getProfileList()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
return getProfileListTemplate(false); QList<netctlProfileInfo> fullProfilesInfo;
QStringList output = getCmdOutput(false, netctlCommand, QString("list"))
.split(QChar('\n'), QString::SkipEmptyParts);
for (int i=0; i<output.count(); i++) {
netctlProfileInfo profileInfo;
profileInfo.name = output[i].mid(2, -1);
profileInfo.active = (output[i][0] == QChar('*'));
profileInfo.enabled = isProfileEnabled(profileInfo.name);
// external
QStringList keys;
keys.append(QString("Connection"));
keys.append(QString("Description"));
keys.append(QString("ESSID"));
keys.append(QString("Interface"));
QStringList profileValues = netctlProfile->getValuesFromProfile(profileInfo.name,
keys);
profileInfo.description = profileValues[1];
profileInfo.essid = profileValues[2];
profileInfo.interface = profileValues[3];
profileInfo.type = profileValues[0];
profileInfo.netctlAuto = false;
fullProfilesInfo.append(profileInfo);
}
return fullProfilesInfo;
} }
/** /**
* @fn getProfileListFromNetctlAuto * @fn getProfileListFromNetctlAuto
*/ */
QList<netctlProfileInfo> Netctl::getProfileListFromNetctlAuto() const QList<netctlProfileInfo> Netctl::getProfileListFromNetctlAuto()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
return getProfileListTemplate(true); QList<netctlProfileInfo> fullProfilesInfo;
QStringList output = getCmdOutput(false, netctlAutoCommand, QString("list"))
.split(QChar('\n'), QString::SkipEmptyParts);
for (int i=0; i<output.count(); i++) {
netctlProfileInfo profileInfo;
profileInfo.name = output[i].mid(2, -1);
profileInfo.active = (output[i][0] == QChar('*'));
profileInfo.enabled = (output[i][0] != QChar('!'));
// external
QStringList keys;
keys.append(QString("Connection"));
keys.append(QString("Description"));
keys.append(QString("ESSID"));
keys.append(QString("Interface"));
QStringList profileValues = netctlProfile->getValuesFromProfile(profileInfo.name,
keys);
profileInfo.description = profileValues[1];
profileInfo.essid = profileValues[2];
profileInfo.interface = profileValues[3];
profileInfo.type = profileValues[0];
profileInfo.essid = profileValues[1];
profileInfo.netctlAuto = true;
fullProfilesInfo.append(profileInfo);
}
return fullProfilesInfo;
}
/**
* @fn getProfileDescription
*/
QString Netctl::getProfileDescription(const QString profile)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
if (netctlProfile == 0) {
if (debug) qDebug() << PDEBUG << ":" << "Could not find library";
return QString();
}
return netctlProfile->getValueFromProfile(profile, QString("Description"));
} }
/** /**
* @fn getProfileStatus * @fn getProfileStatus
*/ */
QString Netctl::getProfileStatus(const QString profile) const QString Netctl::getProfileStatus(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
QString status = isProfileActive(profile) ? QString("active") : QString("inactive"); QString status;
status += isProfileEnabled(profile) ? QString(" (enabled)") : QString(" (static)"); if (isProfileActive(profile))
status = QString("active");
else
status = QString("inactive");
if (isProfileEnabled(profile))
status += QString(" (enabled)");
else
status += QString(" (static)");
return status; return status;
} }
@ -132,40 +288,42 @@ QString Netctl::getProfileStatus(const QString profile) const
/** /**
* @fn isProfileActive * @fn isProfileActive
*/ */
bool Netctl::isProfileActive(const QString profile) const bool Netctl::isProfileActive(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
return cmdCall(false, netctlCommand, QString("status"), profile).status(); QString output = getCmdOutput(false, netctlCommand, QString("status"), profile);
return (output.contains(QString("Active: active")));
} }
/** /**
* @fn isProfileEnabled * @fn isProfileEnabled
*/ */
bool Netctl::isProfileEnabled(const QString profile) const bool Netctl::isProfileEnabled(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
return cmdCall(false, netctlCommand, QString("is-enabled"), profile).output == QString("enabled\n"); return cmdCall(false, netctlCommand, QString("is-enabled"), profile);
} }
/** /**
* @fn autoIsProfileActive * @fn autoIsProfileActive
*/ */
bool Netctl::autoIsProfileActive(const QString profile) const bool Netctl::autoIsProfileActive(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
bool status = false; bool status = false;
QList<netctlProfileInfo> profiles = getProfileListFromNetctlAuto(); QList<netctlProfileInfo> profiles = getProfileListFromNetctlAuto();
foreach(netctlProfileInfo profileInfo, profiles) { for (int i=0; i<profiles.count(); i++) {
if (profileInfo.name != profile) continue; if (profiles[i].name == profile) continue;
status = profileInfo.active; status = profiles[i].active;
break; break;
} }
@ -176,16 +334,16 @@ bool Netctl::autoIsProfileActive(const QString profile) const
/** /**
* @fn autoIsProfileEnabled * @fn autoIsProfileEnabled
*/ */
bool Netctl::autoIsProfileEnabled(const QString profile) const bool Netctl::autoIsProfileEnabled(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
bool status = false; bool status = false;
QList<netctlProfileInfo> profiles = getProfileListFromNetctlAuto(); QList<netctlProfileInfo> profiles = getProfileListFromNetctlAuto();
foreach(netctlProfileInfo profileInfo, profiles) { for (int i=0; i<profiles.count(); i++) {
if (profileInfo.name != profile) continue; if (profiles[i].name == profile) continue;
status = profileInfo.enabled; status = profiles[i].enabled;
break; break;
} }
@ -196,7 +354,7 @@ bool Netctl::autoIsProfileEnabled(const QString profile) const
/** /**
* @fn isNetctlAutoEnabled * @fn isNetctlAutoEnabled
*/ */
bool Netctl::isNetctlAutoEnabled() const bool Netctl::isNetctlAutoEnabled()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlAutoService.isEmpty()) { if (netctlAutoService.isEmpty()) {
@ -209,16 +367,16 @@ bool Netctl::isNetctlAutoEnabled() const
return false; return false;
} }
QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces.first()); QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces[0]);
return cmdCall(false, systemctlCommand, QString("is-enabled"), argument).status(); return cmdCall(false, systemctlCommand, QString("is-enabled"), argument);
} }
/** /**
* @fn isNetctlAutoRunning * @fn isNetctlAutoRunning
*/ */
bool Netctl::isNetctlAutoRunning() const bool Netctl::isNetctlAutoRunning()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlAutoService.isEmpty()) { if (netctlAutoService.isEmpty()) {
@ -231,9 +389,9 @@ bool Netctl::isNetctlAutoRunning() const
return false; return false;
} }
QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces.first()); QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces[0]);
return cmdCall(false, systemctlCommand, QString("is-active"), argument).status(); return cmdCall(false, systemctlCommand, QString("is-active"), argument);
} }
@ -251,9 +409,9 @@ QMap<QString, QString> Netctl::getRecommendedConfiguration()
recommended.clear(); recommended.clear();
recommended.append(QString("netctlgui-helper")); recommended.append(QString("netctlgui-helper"));
recommended.append(QString("netctlgui-helper-suid")); recommended.append(QString("netctlgui-helper-suid"));
foreach(QString rec, recommended) { for (int i=0; i<recommended.count(); i++) {
process = runTask(QString("which %1").arg(rec), false); process = runTask(QString("which %1").arg(recommended[i]), false);
if (process.status()) { if (process.exitCode == 0) {
settings[QString("FORCE_SUDO")] = QString("false"); settings[QString("FORCE_SUDO")] = QString("false");
break; break;
} }
@ -279,9 +437,9 @@ QMap<QString, QString> Netctl::getRecommendedConfiguration()
settings[QString("NETCTL_PATH")] = QString(""); settings[QString("NETCTL_PATH")] = QString("");
recommended.clear(); recommended.clear();
recommended.append("netctl"); recommended.append("netctl");
foreach(QString rec, recommended) { for (int i=0; i<recommended.count(); i++) {
process = runTask(QString("which %1").arg(rec), false); process = runTask(QString("which %1").arg(recommended[i]), false);
if (process.status()) { if (process.exitCode == 0) {
settings[QString("NETCTL_PATH")] = process.output.trimmed(); settings[QString("NETCTL_PATH")] = process.output.trimmed();
break; break;
} }
@ -291,9 +449,9 @@ QMap<QString, QString> Netctl::getRecommendedConfiguration()
settings[QString("NETCTLAUTO_PATH")] = QString(""); settings[QString("NETCTLAUTO_PATH")] = QString("");
recommended.clear(); recommended.clear();
recommended.append("netctl-auto"); recommended.append("netctl-auto");
foreach(QString rec, recommended) { for (int i=0; i<recommended.count(); i++) {
process = runTask(QString("which %1").arg(rec), false); process = runTask(QString("which %1").arg(recommended[i]), false);
if (process.status()) { if (process.exitCode == 0) {
settings[QString("NETCTLAUTO_PATH")] = process.output.trimmed(); settings[QString("NETCTLAUTO_PATH")] = process.output.trimmed();
break; break;
} }
@ -321,9 +479,9 @@ QMap<QString, QString> Netctl::getRecommendedConfiguration()
recommended.append("sudo"); recommended.append("sudo");
recommended.append("kdesu"); recommended.append("kdesu");
recommended.append("gksu"); recommended.append("gksu");
foreach(QString rec, recommended) { for (int i=0; i<recommended.count(); i++) {
process = runTask(QString("which %1").arg(rec), false); process = runTask(QString("which %1").arg(recommended[i]), false);
if (process.status()) { if (process.exitCode == 0) {
settings[QString("SUDO_PATH")] = process.output.trimmed(); settings[QString("SUDO_PATH")] = process.output.trimmed();
break; break;
} }
@ -333,9 +491,9 @@ QMap<QString, QString> Netctl::getRecommendedConfiguration()
settings[QString("SYSTEMCTL_PATH")] = QString(""); settings[QString("SYSTEMCTL_PATH")] = QString("");
recommended.clear(); recommended.clear();
recommended.append("systemctl"); recommended.append("systemctl");
foreach(QString rec, recommended) { for (int i=0; i<recommended.count(); i++) {
process = runTask(QString("which %1").arg(rec), false); process = runTask(QString("which %1").arg(recommended[i]), false);
if (process.status()) { if (process.exitCode == 0) {
settings[QString("SYSTEMCTL_PATH")] = process.output.trimmed(); settings[QString("SYSTEMCTL_PATH")] = process.output.trimmed();
break; break;
} }
@ -348,7 +506,7 @@ QMap<QString, QString> Netctl::getRecommendedConfiguration()
/** /**
* @fn getWirelessInterfaceList * @fn getWirelessInterfaceList
*/ */
QStringList Netctl::getWirelessInterfaceList() const QStringList Netctl::getWirelessInterfaceList()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (ifaceDirectory == nullptr) { if (ifaceDirectory == nullptr) {
@ -360,11 +518,11 @@ QStringList Netctl::getWirelessInterfaceList() const
if (!mainInterface.isEmpty()) if (!mainInterface.isEmpty())
interfaces.append(mainInterface); interfaces.append(mainInterface);
QStringList allInterfaces = ifaceDirectory->entryList(QDir::Dirs | QDir::NoDotAndDotDot); QStringList allInterfaces = ifaceDirectory->entryList(QDir::Dirs | QDir::NoDotAndDotDot);
foreach(QString interface, allInterfaces) { for (int i=0; i<allInterfaces.count(); i++) {
QString dir = QString("%1/%2/wireless").arg(ifaceDirectory->path()).arg(interface); QString dir = QString("%1/%2/wireless").arg(ifaceDirectory->path()).arg(allInterfaces[i]);
if (debug) qDebug() << PDEBUG << ":" << "Check directory" << dir; if (debug) qDebug() << PDEBUG << ":" << "Check directory" << dir;
if (QDir(dir).exists()) if (QDir(dir).exists())
interfaces.append(interface); interfaces.append(allInterfaces[i]);
} }
return interfaces; return interfaces;
@ -375,156 +533,159 @@ QStringList Netctl::getWirelessInterfaceList() const
/** /**
* @fn enableProfile * @fn enableProfile
*/ */
bool Netctl::enableProfile(const QString profile) const bool Netctl::enableProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
return cmdCall(true, netctlCommand, if (isProfileEnabled(profile))
isProfileEnabled(profile) ? QString("disable") : QString("enable"), return cmdCall(true, netctlCommand, QString("disable"), profile);
profile).status(); else
return cmdCall(true, netctlCommand, QString("enable"), profile);
} }
/** /**
* @fn forceStartProfile * @fn forceStartProfile
*/ */
bool Netctl::forceStartProfile(const QString profile) const bool Netctl::forceStartProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
return cmdCall(true, netctlCommand, QString("start"), profile).status(); return cmdCall(true, netctlCommand, QString("start"), profile);
} }
/** /**
* @fn forceStopProfile * @fn forceStopProfile
*/ */
bool Netctl::forceStopProfile(const QString profile) const bool Netctl::forceStopProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
return cmdCall(true, netctlCommand, QString("stop"), profile).status(); return cmdCall(true, netctlCommand, QString("stop"), profile);
} }
/** /**
* @fn reenableProfile * @fn reenableProfile
*/ */
bool Netctl::reenableProfile(const QString profile) const bool Netctl::reenableProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
return cmdCall(true, netctlCommand, QString("reenable"), profile).status(); return cmdCall(true, netctlCommand, QString("reenable"), profile);
} }
/** /**
* @fn restartProfile * @fn restartProfile
*/ */
bool Netctl::restartProfile(const QString profile) const bool Netctl::restartProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
return cmdCall(true, netctlCommand, QString("restart"), profile).status(); return cmdCall(true, netctlCommand, QString("restart"), profile);
} }
/** /**
* @fn startProfile * @fn startProfile
*/ */
bool Netctl::startProfile(const QString profile) const bool Netctl::startProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
return cmdCall(true, netctlCommand, if (isProfileActive(profile))
isProfileActive(profile) ? QString("stop") : QString("start"), return cmdCall(true, netctlCommand, QString("stop"), profile);
profile).status(); else
return cmdCall(true, netctlCommand, QString("start"), profile);
} }
/** /**
* @fn stopAllProfiles * @fn stopAllProfiles
*/ */
bool Netctl::stopAllProfiles() const bool Netctl::stopAllProfiles()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
return cmdCall(true, netctlCommand, QString("stop-all")).status(); return cmdCall(true, netctlCommand, QString("stop-all"));
} }
/** /**
* @fn switchToProfile * @fn switchToProfile
*/ */
bool Netctl::switchToProfile(const QString profile) const bool Netctl::switchToProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
return ((isProfileActive(profile)) || return ((isProfileActive(profile)) ||
(cmdCall(true, netctlCommand, QString("switch-to"), profile)).status()); (cmdCall(true, netctlCommand, QString("switch-to"), profile)));
} }
/** /**
* @fn autoDisableAllProfiles * @fn autoDisableAllProfiles
*/ */
bool Netctl::autoDisableAllProfiles() const bool Netctl::autoDisableAllProfiles()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
return cmdCall(false, netctlAutoCommand, QString("disable-all")).status(); return cmdCall(false, netctlAutoCommand, QString("disable-all"));
} }
/** /**
* @fn autoEnableProfile * @fn autoEnableProfile
*/ */
bool Netctl::autoEnableProfile(const QString profile) const bool Netctl::autoEnableProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
return cmdCall(false, netctlAutoCommand, if (autoIsProfileEnabled(profile))
autoIsProfileEnabled(profile) ? QString("disable") : QString("enable"), return cmdCall(false, netctlAutoCommand, QString("disable"), profile);
profile).status(); else
return cmdCall(false, netctlAutoCommand, QString("enable"), profile);
} }
/** /**
* @fn autoEnableAllProfiles * @fn autoEnableAllProfiles
*/ */
bool Netctl::autoEnableAllProfiles() const bool Netctl::autoEnableAllProfiles()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
return cmdCall(false, netctlAutoCommand, QString("enable-all")).status(); return cmdCall(false, netctlAutoCommand, QString("enable-all"));
} }
/** /**
* @fn autoStartProfile * @fn autoStartProfile
*/ */
bool Netctl::autoStartProfile(const QString profile) const bool Netctl::autoStartProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
return ((autoIsProfileActive(profile)) || return ((autoIsProfileActive(profile)) ||
(cmdCall(false, netctlAutoCommand, QString("switch-to"), profile)).status()); (cmdCall(false, netctlAutoCommand, QString("switch-to"), profile)));
} }
/** /**
* @fn autoEnableService * @fn autoEnableService
*/ */
bool Netctl::autoEnableService() const bool Netctl::autoEnableService()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlAutoService.isEmpty()) { if (netctlAutoService.isEmpty()) {
@ -537,18 +698,19 @@ bool Netctl::autoEnableService() const
return false; return false;
} }
QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces.first()); QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces[0]);
return cmdCall(true, systemctlCommand, if (isNetctlAutoEnabled())
isNetctlAutoEnabled() ? QString("disable") : QString("enable"), return cmdCall(true, systemctlCommand, QString("disable"), argument);
argument).status(); else
return cmdCall(true, systemctlCommand, QString("enable"), argument);
} }
/** /**
* @fn autoRestartService * @fn autoRestartService
*/ */
bool Netctl::autoRestartService() const bool Netctl::autoRestartService()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlAutoService.isEmpty()) { if (netctlAutoService.isEmpty()) {
@ -561,17 +723,17 @@ bool Netctl::autoRestartService() const
return false; return false;
} }
QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces.first()); QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces[0]);
return ((!isNetctlAutoRunning()) || return ((!isNetctlAutoRunning()) ||
(cmdCall(true, systemctlCommand, QString("restart"), argument)).status()); (cmdCall(true, systemctlCommand, QString("restart"), argument)));
} }
/** /**
* @fn autoStartService * @fn autoStartService
*/ */
bool Netctl::autoStartService() const bool Netctl::autoStartService()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlAutoService.isEmpty()) { if (netctlAutoService.isEmpty()) {
@ -584,87 +746,10 @@ bool Netctl::autoStartService() const
return false; return false;
} }
QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces.first()); QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces[0]);
return cmdCall(true, systemctlCommand, if (isNetctlAutoRunning())
isNetctlAutoRunning() ? QString("stop") : QString("start"), return cmdCall(true, systemctlCommand, QString("stop"), argument);
argument).status(); else
} return cmdCall(true, systemctlCommand, QString("start"), argument);
// functions
/**
* @fn cmdCall
*/
TaskResult Netctl::cmdCall(const bool sudo, const QString command,
const QString commandLine, const QString argument) const
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Command" << command;
if (debug) qDebug() << PDEBUG << ":" << "Command line" << commandLine;
if (debug) qDebug() << PDEBUG << ":" << "Argument" << argument;
QString cmd = QString("");
if (sudo) cmd = QString("%1 ").arg(sudoCommand);
cmd += QString("%1 %2").arg(command).arg(commandLine);
if (!argument.isEmpty()) cmd += QString(" \"%1\"").arg(argument);
if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd;
TaskResult process = runTask(cmd, (useSuid && sudo));
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error;
return process;
};
/**
* @fn getActiveProfileTemplate
*/
QStringList Netctl::getActiveProfileTemplate(const QList<netctlProfileInfo> data) const
{
if (debug) qDebug() << PDEBUG;
QStringList profiles;
foreach(netctlProfileInfo profile, data) {
if (!profile.active) continue;
profiles.append(profile.name);
}
return profiles;
}
/**
* @fn getProfileListTemplate
*/
QList<netctlProfileInfo> Netctl::getProfileListTemplate(const bool isAuto) const
{
if (debug) qDebug() << PDEBUG;
QList<netctlProfileInfo> fullProfilesInfo;
QStringList output = QString(cmdCall(false, isAuto ? netctlAutoCommand : netctlCommand,
QString("list")).output)
.split(QChar('\n'), QString::SkipEmptyParts);
foreach(QString profile, output) {
netctlProfileInfo profileInfo;
profileInfo.name = profile.mid(2, -1);
profileInfo.active = (profile[0] == QChar('*'));
profileInfo.enabled = isAuto ? (profile[0] != QChar('!')) : isProfileEnabled(profileInfo.name);
// external
QStringList keys;
keys.append(QString("Connection"));
keys.append(QString("Description"));
keys.append(QString("ESSID"));
keys.append(QString("Interface"));
QStringList profileValues = netctlProfile->getValuesFromProfile(profileInfo.name,
keys);
profileInfo.description = profileValues[1];
profileInfo.essid = profileValues[2];
profileInfo.interface = profileValues[3];
profileInfo.type = profileValues[0];
profileInfo.netctlAuto = isAuto;
fullProfilesInfo.append(profileInfo);
}
return fullProfilesInfo;
} }

View File

@ -60,8 +60,7 @@ NetctlInterface::~NetctlInterface()
/** /**
* @fn connectToEssid * @fn connectToEssid
*/ */
InterfaceAnswer NetctlInterface::connectToEssid(const QString essid, InterfaceAnswer NetctlInterface::connectToEssid(const QString essid, QMap<QString, QString> settings)
QMap<QString, QString> settings) const
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlCommand == nullptr) { if (netctlCommand == nullptr) {
@ -84,7 +83,7 @@ InterfaceAnswer NetctlInterface::connectToEssid(const QString essid,
/** /**
* @fn connectToKnownEssid * @fn connectToKnownEssid
*/ */
InterfaceAnswer NetctlInterface::connectToKnownEssid(const QString essid) const InterfaceAnswer NetctlInterface::connectToKnownEssid(const QString essid)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlCommand == nullptr) { if (netctlCommand == nullptr) {
@ -106,8 +105,7 @@ InterfaceAnswer NetctlInterface::connectToKnownEssid(const QString essid) const
/** /**
* @fn connectToUnknownEssid * @fn connectToUnknownEssid
*/ */
InterfaceAnswer NetctlInterface::connectToUnknownEssid(const QString essid, InterfaceAnswer NetctlInterface::connectToUnknownEssid(const QString essid, QMap<QString, QString> settings)
QMap<QString, QString> settings) const
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlCommand == nullptr) { if (netctlCommand == nullptr) {
@ -123,7 +121,7 @@ InterfaceAnswer NetctlInterface::connectToUnknownEssid(const QString essid,
QStringList interfaces = netctlCommand->getWirelessInterfaceList(); QStringList interfaces = netctlCommand->getWirelessInterfaceList();
if (interfaces.isEmpty()) return InterfaceAnswer::Error; if (interfaces.isEmpty()) return InterfaceAnswer::Error;
settings[QString("Description")] = QString("'Automatically generated profile by Netctl GUI'"); settings[QString("Description")] = QString("'Automatically generated profile by Netctl GUI'");
settings[QString("Interface")] = interfaces.first(); settings[QString("Interface")] = interfaces[0];
settings[QString("Connection")] = QString("wireless"); settings[QString("Connection")] = QString("wireless");
settings[QString("ESSID")] = QString("'%1'").arg(essid); settings[QString("ESSID")] = QString("'%1'").arg(essid);
settings[QString("IP")] = QString("dhcp"); settings[QString("IP")] = QString("dhcp");
@ -141,8 +139,7 @@ InterfaceAnswer NetctlInterface::connectToUnknownEssid(const QString essid,
/** /**
* @fn createProfile * @fn createProfile
*/ */
InterfaceAnswer NetctlInterface::createProfile(const QString profile, InterfaceAnswer NetctlInterface::createProfile(const QString profile, const QMap<QString, QString> settings)
const QMap<QString, QString> settings) const
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlCommand == nullptr) { if (netctlCommand == nullptr) {
@ -160,7 +157,7 @@ InterfaceAnswer NetctlInterface::createProfile(const QString profile,
/** /**
* @fn enableProfile * @fn enableProfile
*/ */
InterfaceAnswer NetctlInterface::enableProfile(const QString profile) const InterfaceAnswer NetctlInterface::enableProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlCommand == nullptr) { if (netctlCommand == nullptr) {
@ -177,7 +174,7 @@ InterfaceAnswer NetctlInterface::enableProfile(const QString profile) const
/** /**
* @fn removeProfile * @fn removeProfile
*/ */
InterfaceAnswer NetctlInterface::removeProfile(const QString profile) const InterfaceAnswer NetctlInterface::removeProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlProfile == nullptr) { if (netctlProfile == nullptr) {
@ -192,7 +189,7 @@ InterfaceAnswer NetctlInterface::removeProfile(const QString profile) const
/** /**
* @fn restartProfile * @fn restartProfile
*/ */
InterfaceAnswer NetctlInterface::restartProfile(const QString profile) const InterfaceAnswer NetctlInterface::restartProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlCommand == nullptr) { if (netctlCommand == nullptr) {
@ -209,7 +206,7 @@ InterfaceAnswer NetctlInterface::restartProfile(const QString profile) const
/** /**
* @fn startProfile * @fn startProfile
*/ */
InterfaceAnswer NetctlInterface::startProfile(const QString profile) const InterfaceAnswer NetctlInterface::startProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlCommand == nullptr) { if (netctlCommand == nullptr) {
@ -230,7 +227,7 @@ InterfaceAnswer NetctlInterface::startProfile(const QString profile) const
/** /**
* @fn stopAllProfiles * @fn stopAllProfiles
*/ */
InterfaceAnswer NetctlInterface::stopAllProfiles() const InterfaceAnswer NetctlInterface::stopAllProfiles()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlCommand == nullptr) { if (netctlCommand == nullptr) {
@ -245,7 +242,7 @@ InterfaceAnswer NetctlInterface::stopAllProfiles() const
/** /**
* @fn switchToProfile * @fn switchToProfile
*/ */
InterfaceAnswer NetctlInterface::switchToProfile(const QString profile) const InterfaceAnswer NetctlInterface::switchToProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlCommand == nullptr) { if (netctlCommand == nullptr) {
@ -270,7 +267,7 @@ InterfaceAnswer NetctlInterface::switchToProfile(const QString profile) const
/** /**
* @fn information * @fn information
*/ */
netctlInformation NetctlInterface::information() const netctlInformation NetctlInterface::information()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlCommand == nullptr) { if (netctlCommand == nullptr) {
@ -291,7 +288,7 @@ netctlInformation NetctlInterface::information() const
/** /**
* @fn profileSettings * @fn profileSettings
*/ */
QMap<QString, QString> NetctlInterface::profileSettings(const QString profile) const QMap<QString, QString> NetctlInterface::profileSettings(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlProfile == nullptr) { if (netctlProfile == nullptr) {
@ -306,7 +303,7 @@ QMap<QString, QString> NetctlInterface::profileSettings(const QString profile) c
/** /**
* @fn status * @fn status
*/ */
netctlCurrent NetctlInterface::status() const netctlCurrent NetctlInterface::status()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (netctlCommand == nullptr) { if (netctlCommand == nullptr) {
@ -321,11 +318,11 @@ netctlCurrent NetctlInterface::status() const
profiles = netctlCommand->getProfileListFromNetctlAuto(); profiles = netctlCommand->getProfileListFromNetctlAuto();
else else
profiles = netctlCommand->getProfileList(); profiles = netctlCommand->getProfileList();
foreach(netctlProfileInfo profile, profiles) { for (int i=0; i<profiles.count(); i++) {
current.profiles.append(profile.name); current.profiles.append(profiles[i].name);
if (!profile.active) continue; if (!profiles[i].active) continue;
current.current.append(profile.name); current.current.append(profiles[i].name);
current.enables.append(profile.enabled); current.enables.append(profiles[i].enabled);
} }
return current; return current;

View File

@ -33,8 +33,6 @@
#include <pdebug/pdebug.h> #include <pdebug/pdebug.h>
#include <task/taskadds.h> #include <task/taskadds.h>
#include "version.h"
/** /**
* @class NetctlProfile * @class NetctlProfile
@ -45,11 +43,17 @@
NetctlProfile::NetctlProfile(const bool debugCmd, const QMap<QString, QString> settings) NetctlProfile::NetctlProfile(const bool debugCmd, const QMap<QString, QString> settings)
: debug(debugCmd) : debug(debugCmd)
{ {
profileDirectory = new QDir(settings.value(QString("PROFILE_DIR"), QString(PROFILE_DIR))); if (settings.contains(QString("PROFILE_DIR")))
sudoCommand = settings.value(QString("SUDO_PATH"), QString(SUDO_PATH)); profileDirectory = new QDir(settings[QString("PROFILE_DIR")]);
useSuid = (settings.value(QString("FORCE_SUDO"), QString("true")) != QString("true")); else
profileDirectory = new QDir(QString("/etc/netctl/"));
if (settings.contains(QString("SUDO_PATH")))
sudoCommand = settings[QString("SUDO_PATH")];
if (settings.contains(QString("FORCE_SUDO")))
useSuid = (settings[QString("FORCE_SUDO")] != QString("true"));
if (useSuid) sudoCommand = QString(""); if (useSuid)
sudoCommand = QString("");
} }
@ -67,7 +71,7 @@ NetctlProfile::~NetctlProfile()
/** /**
* @fn copyProfile * @fn copyProfile
*/ */
bool NetctlProfile::copyProfile(const QString oldPath) const bool NetctlProfile::copyProfile(const QString oldPath)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Path" << oldPath; if (debug) qDebug() << PDEBUG << ":" << "Path" << oldPath;
@ -83,16 +87,17 @@ bool NetctlProfile::copyProfile(const QString oldPath) const
if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd;
TaskResult process = runTask(cmd, useSuid); TaskResult process = runTask(cmd, useSuid);
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; if (process.exitCode != 0)
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error;
return process.status(); return (process.exitCode == 0);
} }
/** /**
* @fn createProfile * @fn createProfile
*/ */
QString NetctlProfile::createProfile(const QString profile, const QMap<QString, QString> settings) const QString NetctlProfile::createProfile(const QString profile, const QMap<QString, QString> settings)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
@ -103,22 +108,22 @@ QString NetctlProfile::createProfile(const QString profile, const QMap<QString,
if (!profileFile.open(QIODevice::WriteOnly | QIODevice::Text)) if (!profileFile.open(QIODevice::WriteOnly | QIODevice::Text))
return profileTempName; return profileTempName;
QTextStream out(&profileFile); QTextStream out(&profileFile);
foreach(QString key, settings.keys()) { for (int i=0; i<settings.keys().count(); i++) {
out << key << QString("="); out << settings.keys()[i] << QString("=");
if ((key == QString("BindsToInterfaces")) || if ((settings.keys()[i] == QString("BindsToInterfaces")) ||
(key == QString("After")) || (settings.keys()[i] == QString("After")) ||
(key == QString("Address")) || (settings.keys()[i] == QString("Address")) ||
(key == QString("Routes")) || (settings.keys()[i] == QString("Routes")) ||
(key == QString("Address6")) || (settings.keys()[i] == QString("Address6")) ||
(key == QString("Routes6")) || (settings.keys()[i] == QString("Routes6")) ||
(key == QString("IPCustom")) || (settings.keys()[i] == QString("IPCustom")) ||
(key == QString("DNS")) || (settings.keys()[i] == QString("DNS")) ||
(key == QString("DNSOptions")) || (settings.keys()[i] == QString("DNSOptions")) ||
(key == QString("ScanFrequencies")) || (settings.keys()[i] == QString("ScanFrequencies")) ||
(key == QString("WPAConfigSection"))) (settings.keys()[i] == QString("WPAConfigSection")))
out << QString("(%1)").arg(settings[key]) << endl; out << QString("(%1)").arg(settings[settings.keys()[i]]) << endl;
else else
out << settings[key] << endl; out << settings[settings.keys()[i]] << endl;
} }
profileFile.close(); profileFile.close();
@ -140,9 +145,9 @@ QMap<QString, QString> NetctlProfile::getRecommendedConfiguration()
recommended.clear(); recommended.clear();
recommended.append(QString("netctlgui-helper")); recommended.append(QString("netctlgui-helper"));
recommended.append(QString("netctlgui-helper-suid")); recommended.append(QString("netctlgui-helper-suid"));
foreach(QString rec, recommended) { for (int i=0; i<recommended.count(); i++) {
process = runTask(QString("which %1").arg(rec), false); process = runTask(QString("which %1").arg(recommended[i]), false);
if (process.status()) { if (process.exitCode == 0) {
settings[QString("FORCE_SUDO")] = QString("false"); settings[QString("FORCE_SUDO")] = QString("false");
break; break;
} }
@ -167,9 +172,9 @@ QMap<QString, QString> NetctlProfile::getRecommendedConfiguration()
recommended.append("sudo"); recommended.append("sudo");
recommended.append("kdesu"); recommended.append("kdesu");
recommended.append("gksu"); recommended.append("gksu");
foreach(QString rec, recommended) { for (int i=0; i<recommended.count(); i++) {
process = runTask(QString("which %1").arg(rec), false); process = runTask(QString("which %1").arg(recommended[i]), false);
if (process.status()) { if (process.exitCode == 0) {
settings[QString("SUDO_PATH")] = process.output.trimmed(); settings[QString("SUDO_PATH")] = process.output.trimmed();
break; break;
} }
@ -182,7 +187,7 @@ QMap<QString, QString> NetctlProfile::getRecommendedConfiguration()
/** /**
* @fn getSettingsFromProfile * @fn getSettingsFromProfile
*/ */
QMap<QString, QString> NetctlProfile::getSettingsFromProfile(const QString profile) const QMap<QString, QString> NetctlProfile::getSettingsFromProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
@ -197,12 +202,13 @@ QMap<QString, QString> NetctlProfile::getSettingsFromProfile(const QString profi
if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd;
TaskResult process = runTask(cmd, false); TaskResult process = runTask(cmd, false);
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; if (process.exitCode != 0)
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error;
QStringList output = QString(process.output).trimmed().split(QChar('\n')); QStringList output = QString(process.output).trimmed().split(QChar('\n'));
QStringList systemVariables; QStringList systemVariables;
systemVariables.append(QString("PIPESTATUS")); systemVariables.append(QString("PIPESTATUS"));
foreach(QString str, output) for (int i=0; i<output.count(); i++)
systemVariables.append(str.split(QChar('=')).first()); systemVariables.append(output[i].split(QChar('='))[0]);
// profile variables // profile variables
QMap<QString, QString> settings; QMap<QString, QString> settings;
QString profileUrl = QString("%1/%2").arg(profileDirectory->absolutePath()).arg(QFileInfo(profile).fileName()); QString profileUrl = QString("%1/%2").arg(profileDirectory->absolutePath()).arg(QFileInfo(profile).fileName());
@ -210,19 +216,20 @@ QMap<QString, QString> NetctlProfile::getSettingsFromProfile(const QString profi
if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd;
process = runTask(cmd, false); process = runTask(cmd, false);
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; if (process.exitCode != 0)
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error;
output = QString(process.output).trimmed().split(QChar('\n')); output = QString(process.output).trimmed().split(QChar('\n'));
// read variables // read variables
QStringList keys; QStringList keys;
foreach(QString str, output) for (int i=0; i<output.count(); i++)
if (!systemVariables.contains(str.split(QChar('=')).first())) if (!systemVariables.contains(output[i].split(QChar('='))[0]))
keys.append(str.split(QChar('=')).first()); keys.append(output[i].split(QChar('='))[0]);
foreach(QString key, keys) { for (int i=0; i<keys.count(); i++){
cmd = QString("env -i bash -c \"source '%1'; for i in ${!%2[@]}; do echo ${%2[$i]}; done\"").arg(profileUrl).arg(key); cmd = QString("env -i bash -c \"source '%1'; for i in ${!%2[@]}; do echo ${%2[$i]}; done\"").arg(profileUrl).arg(keys[i]);
process = runTask(cmd, false); process = runTask(cmd, false);
settings[key] = process.output.trimmed(); settings[keys[i]] = process.output.trimmed();
if (debug) qDebug() << PDEBUG << ":" << key << "=" << settings[key]; if (debug) qDebug() << PDEBUG << ":" << keys[i] << "=" << settings[keys[i]];
} }
return settings; return settings;
@ -232,20 +239,20 @@ QMap<QString, QString> NetctlProfile::getSettingsFromProfile(const QString profi
/** /**
* @fn getValueFromProfile * @fn getValueFromProfile
*/ */
QString NetctlProfile::getValueFromProfile(const QString profile, const QString key) const QString NetctlProfile::getValueFromProfile(const QString profile, const QString key)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
if (debug) qDebug() << PDEBUG << ":" << "Key" << key; if (debug) qDebug() << PDEBUG << ":" << "Key" << key;
return getValuesFromProfile(profile, QStringList() << key).first(); return getValuesFromProfile(profile, QStringList() << key)[0];
} }
/** /**
* @fn getValuesFromProfile * @fn getValuesFromProfile
*/ */
QStringList NetctlProfile::getValuesFromProfile(const QString profile, const QStringList keys) const QStringList NetctlProfile::getValuesFromProfile(const QString profile, const QStringList keys)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
@ -253,8 +260,8 @@ QStringList NetctlProfile::getValuesFromProfile(const QString profile, const QSt
QMap<QString, QString> settings = getSettingsFromProfile(profile); QMap<QString, QString> settings = getSettingsFromProfile(profile);
QStringList values; QStringList values;
foreach(QString key, keys) for (int i=0; i<keys.count(); i++)
values.append(settings[key]); values.append(settings[keys[i]]);
return values; return values;
} }
@ -263,7 +270,7 @@ QStringList NetctlProfile::getValuesFromProfile(const QString profile, const QSt
/** /**
* @fn removeProfile * @fn removeProfile
*/ */
bool NetctlProfile::removeProfile(const QString profile) const bool NetctlProfile::removeProfile(const QString profile)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
@ -277,7 +284,8 @@ bool NetctlProfile::removeProfile(const QString profile) const
if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd;
TaskResult process = runTask(cmd, useSuid); TaskResult process = runTask(cmd, useSuid);
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; if (process.exitCode != 0)
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error;
return process.status(); return (process.exitCode == 0);
} }

View File

@ -30,8 +30,6 @@
#include <pdebug/pdebug.h> #include <pdebug/pdebug.h>
#include <task/taskadds.h> #include <task/taskadds.h>
#include "version.h"
/** /**
* @class WpaSup * @class WpaSup
@ -45,16 +43,25 @@ WpaSup::WpaSup(const bool debugCmd, const QMap<QString, QString> settings)
netctlCommand = new Netctl(debug, settings); netctlCommand = new Netctl(debug, settings);
netctlProfile = new NetctlProfile(debug, settings); netctlProfile = new NetctlProfile(debug, settings);
ctrlDir = settings.value(QString("CTRL_DIR"), QString(CTRL_DIR)); if (settings.contains(QString("CTRL_DIR")))
ctrlGroup = settings.value(QString("CTRL_GROUP"), QString(CTRL_GROUP)); ctrlDir = settings[QString("CTRL_DIR")];
pidFile = settings.value(QString("PID_FILE"), QString(PID_FILE)); if (settings.contains(QString("CTRL_GROUP")))
sudoCommand = settings.value(QString("SUDO_PATH"), QString(SUDO_PATH)); ctrlGroup = settings[QString("CTRL_GROUP")];
wpaCliPath = settings.value(QString("WPACLI_PATH"), QString(WPACLI_PATH)); if (settings.contains(QString("PID_FILE")))
wpaDrivers = settings.value(QString("WPA_DRIVERS"), QString(WPA_DRIVERS)); pidFile = settings[QString("PID_FILE")];
wpaSupPath = settings.value(QString("WPASUP_PATH"), QString(WPASUP_PATH)); if (settings.contains(QString("SUDO_PATH")))
useSuid = (settings.value(QString("FORCE_SUDO"), QString("true")) != QString("true")); sudoCommand = settings[QString("SUDO_PATH")];
if (settings.contains(QString("WPACLI_PATH")))
wpaCliPath = settings[QString("WPACLI_PATH")];
if (settings.contains(QString("WPA_DRIVERS")))
wpaDrivers = settings[QString("WPA_DRIVERS")];
if (settings.contains(QString("WPASUP_PATH")))
wpaSupPath = settings[QString("WPASUP_PATH")];
if (settings.contains(QString("FORCE_SUDO")))
useSuid = (settings[QString("FORCE_SUDO")] != QString("true"));
if (useSuid) sudoCommand = QString(""); if (useSuid)
sudoCommand = QString("");
} }
@ -74,7 +81,7 @@ WpaSup::~WpaSup()
/** /**
* @fn existentProfile * @fn existentProfile
*/ */
QString WpaSup::existentProfile(const QString essid) const QString WpaSup::existentProfile(const QString essid)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "ESSID" << essid; if (debug) qDebug() << PDEBUG << ":" << "ESSID" << essid;
@ -87,11 +94,11 @@ QString WpaSup::existentProfile(const QString essid) const
return QString(); return QString();
} }
QString profileFile; QString profileFile = QString("");
QList<netctlProfileInfo> profileList = netctlCommand->getProfileList(); QList<netctlProfileInfo> profileList = netctlCommand->getProfileList();
foreach(netctlProfileInfo profile, profileList) { for (int i=0; i<profileList.count(); i++) {
if (essid != profile.essid) continue; if (essid != profileList[i].essid) continue;
profileFile = profile.name; profileFile = profileList[i].name;
break; break;
} }
@ -114,16 +121,16 @@ QMap<QString, QString> WpaSup::getRecommendedConfiguration()
// ctrl group // ctrl group
// check group list and find out 'network', 'users', 'root' // check group list and find out 'network', 'users', 'root'
settings[QString("CTRL_GROUP")] = QString(""); settings[QString("CTRL_GROUP")] = QString("");
gid_t gtpList[size]; gid_t gtpList[99];
int grpSize = getgroups(size, gtpList); int grpSize = getgroups(size, gtpList);
recommended.clear(); recommended.clear();
recommended.append("network"); recommended.append("network");
recommended.append("users"); recommended.append("users");
recommended.append("root"); recommended.append("root");
foreach(QString rec, recommended) { for (int i=0; i<recommended.count(); i++) {
for (int i=0; i<grpSize; i++) for (int j=0; j<grpSize; j++)
if (rec == QString(getgrgid(gtpList[i])->gr_name)) { if (recommended[i] == QString(getgrgid(gtpList[j])->gr_name)) {
settings[QString("CTRL_GROUP")] = rec; settings[QString("CTRL_GROUP")] = recommended[i];
break; break;
} }
if (!settings[QString("CTRL_GROUP")].isEmpty()) break; if (!settings[QString("CTRL_GROUP")].isEmpty()) break;
@ -134,9 +141,9 @@ QMap<QString, QString> WpaSup::getRecommendedConfiguration()
recommended.clear(); recommended.clear();
recommended.append(QString("netctlgui-helper")); recommended.append(QString("netctlgui-helper"));
recommended.append(QString("netctlgui-helper-suid")); recommended.append(QString("netctlgui-helper-suid"));
foreach(QString rec, recommended) { for (int i=0; i<recommended.count(); i++) {
process = runTask(QString("which %1").arg(rec), false); process = runTask(QString("which %1").arg(recommended[i]), false);
if (process.status()) { if (process.exitCode == 0) {
settings[QString("FORCE_SUDO")] = QString("false"); settings[QString("FORCE_SUDO")] = QString("false");
break; break;
} }
@ -151,9 +158,9 @@ QMap<QString, QString> WpaSup::getRecommendedConfiguration()
recommended.append("sudo"); recommended.append("sudo");
recommended.append("kdesu"); recommended.append("kdesu");
recommended.append("gksu"); recommended.append("gksu");
foreach(QString rec, recommended) { for (int i=0; i<recommended.count(); i++) {
process = runTask(QString("which %1").arg(rec), false); process = runTask(QString("which %1").arg(recommended[i]), false);
if (process.status()) { if (process.exitCode == 0) {
settings[QString("SUDO_PATH")] = process.output.trimmed(); settings[QString("SUDO_PATH")] = process.output.trimmed();
break; break;
} }
@ -163,9 +170,9 @@ QMap<QString, QString> WpaSup::getRecommendedConfiguration()
settings[QString("WPACLI_PATH")] = QString("true"); settings[QString("WPACLI_PATH")] = QString("true");
recommended.clear(); recommended.clear();
recommended.append("wpa_cli"); recommended.append("wpa_cli");
foreach(QString rec, recommended) { for (int i=0; i<recommended.count(); i++) {
process = runTask(QString("which %1").arg(rec), false); process = runTask(QString("which %1").arg(recommended[i]), false);
if (process.status()) { if (process.exitCode == 0) {
settings[QString("WPACLI_PATH")] = process.output.trimmed(); settings[QString("WPACLI_PATH")] = process.output.trimmed();
break; break;
} }
@ -178,9 +185,9 @@ QMap<QString, QString> WpaSup::getRecommendedConfiguration()
settings[QString("WPASUP_PATH")] = QString("true"); settings[QString("WPASUP_PATH")] = QString("true");
recommended.clear(); recommended.clear();
recommended.append("wpa_supplicant"); recommended.append("wpa_supplicant");
foreach(QString rec, recommended) { for (int i=0; i<recommended.count(); i++) {
process = runTask(QString("which %1").arg(rec), false); process = runTask(QString("which %1").arg(recommended[i]), false);
if (process.status()) { if (process.exitCode == 0) {
settings[QString("WPASUP_PATH")] = process.output.trimmed(); settings[QString("WPASUP_PATH")] = process.output.trimmed();
break; break;
} }
@ -193,7 +200,7 @@ QMap<QString, QString> WpaSup::getRecommendedConfiguration()
/** /**
* @fn isProfileActive * @fn isProfileActive
*/ */
bool WpaSup::isProfileActive(const QString essid) const bool WpaSup::isProfileActive(const QString essid)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "ESSID" << essid; if (debug) qDebug() << PDEBUG << ":" << "ESSID" << essid;
@ -206,14 +213,50 @@ bool WpaSup::isProfileActive(const QString essid) const
return false; return false;
} }
return netctlCommand->isProfileActive(existentProfile(essid)); QString profileFile;
QList<netctlProfileInfo> profileList = netctlCommand->getProfileList();
for (int i=0; i<profileList.count(); i++) {
if (essid != profileList[i].essid) continue;
profileFile = profileList[i].name;
break;
}
return netctlCommand->isProfileActive(profileFile);
}
/**
* @fn isProfileExists
*/
bool WpaSup::isProfileExists(const QString essid)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "ESSID" << essid;
if (netctlCommand == nullptr) {
if (debug) qDebug() << PDEBUG << ":" << "Could not find library";
return false;
}
if (netctlProfile == nullptr) {
if (debug) qDebug() << PDEBUG << ":" << "Could not find library";
return false;
}
bool exists = false;
QList<netctlProfileInfo> profileList = netctlCommand->getProfileList();
for (int i=0; i<profileList.count(); i++) {
if (essid != profileList[i].essid) continue;
exists = true;
break;
}
return exists;
} }
/** /**
* @fn current * @fn current
*/ */
netctlWifiInfo WpaSup::current() const netctlWifiInfo WpaSup::current()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (pidFile.isEmpty()) { if (pidFile.isEmpty()) {
@ -226,7 +269,7 @@ netctlWifiInfo WpaSup::current() const
return netctlWifiInfo(); return netctlWifiInfo();
} }
QString _pidFile = pidFile; QString _pidFile = pidFile;
_pidFile.replace(QString("$i"), interfaces.first()); _pidFile.replace(QString("$i"), interfaces[0]);
if (debug) qDebug() << PDEBUG << ":" << "PID file" << _pidFile << QFile(_pidFile).exists(); if (debug) qDebug() << PDEBUG << ":" << "PID file" << _pidFile << QFile(_pidFile).exists();
netctlWifiInfo current; netctlWifiInfo current;
@ -235,21 +278,21 @@ netctlWifiInfo WpaSup::current() const
if (!rawText.contains(QString("wpa_state=COMPLETED\n"))) return current; if (!rawText.contains(QString("wpa_state=COMPLETED\n"))) return current;
QStringList rawList = rawText.split(QChar('\n'), QString::SkipEmptyParts); QStringList rawList = rawText.split(QChar('\n'), QString::SkipEmptyParts);
foreach(QString element, rawList) { for (int i=0; i<rawList.count(); i++) {
QStringList line = element.split(QChar('=')); QStringList line = rawList[i].split(QChar('='));
if (line.count() != 2) continue; if (line.count() != 2) continue;
if (line.at(0) == QString("bssid")) if (line[0] == QString("bssid"))
current.macs.append(line.at(1)); current.macs.append(line[1]);
else if (line.at(0) == QString("freq")) { else if (line[0] == QString("freq")) {
if ((line.at(1).toInt() >= 5000) && (line.at(1).toInt() < 6000)) if ((line[1].toInt() >= 5000) && (line[1].toInt() < 6000))
current.type = PointType::FiveG; current.type = PointType::FiveG;
else if ((line.at(1).toInt() < 5000) && (line.at(1).toInt() > 2000)) else if ((line[1].toInt() < 5000) && (line[1].toInt() > 2000))
current.type = PointType::TwoG; current.type = PointType::TwoG;
current.frequencies.append(line.at(1).toInt()); current.frequencies.append(line[1].toInt());
} else if (line.at(0) == QString("ssid")) } else if (line[0] == QString("ssid"))
current.name = line.at(1); current.name = line[1];
else if (line.at(0) == QString("key_mgmt")) { else if (line[0] == QString("key_mgmt")) {
QString security = line.at(1); QString security = line[1];
if (security.contains(QString("WPA2"))) if (security.contains(QString("WPA2")))
security = QString("WPA2"); security = QString("WPA2");
else if (security.contains(QString("WPA"))) else if (security.contains(QString("WPA")))
@ -273,7 +316,7 @@ netctlWifiInfo WpaSup::current() const
/** /**
* @fn scanWifi * @fn scanWifi
*/ */
QList<netctlWifiInfo> WpaSup::scanWifi() const QList<netctlWifiInfo> WpaSup::scanWifi()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (pidFile.isEmpty()) { if (pidFile.isEmpty()) {
@ -286,7 +329,7 @@ QList<netctlWifiInfo> WpaSup::scanWifi() const
return QList<netctlWifiInfo>(); return QList<netctlWifiInfo>();
} }
QString _pidFile = pidFile; QString _pidFile = pidFile;
_pidFile.replace(QString("$i"), interfaces.first()); _pidFile.replace(QString("$i"), interfaces[0]);
if (debug) qDebug() << PDEBUG << ":" << "PID file" << _pidFile << QFile(_pidFile).exists(); if (debug) qDebug() << PDEBUG << ":" << "PID file" << _pidFile << QFile(_pidFile).exists();
bool terminateOnExit = (!QFile(_pidFile).exists()); bool terminateOnExit = (!QFile(_pidFile).exists());
@ -303,32 +346,26 @@ QList<netctlWifiInfo> WpaSup::scanWifi() const
rawList.removeFirst(); rawList.removeFirst();
QStringList names; QStringList names;
// init profile list QList<netctlProfileInfo> profiles = netctlCommand->getProfileList();
QList<netctlProfileInfo> profiles; for (int i=0; i<rawList.count(); i++) {
if (netctlCommand->isNetctlAutoRunning()) QStringList line = rawList[i].split(QChar('\t'));
profiles = netctlCommand->getProfileListFromNetctlAuto();
else
profiles = netctlCommand->getProfileList();
// iterate by wifi output
foreach(QString element, rawList) {
QStringList line = element.split(QChar('\t'));
if (line.count() != 5) continue; if (line.count() != 5) continue;
QString name = line.at(4); QString name = line[4];
if (name.isEmpty()) name = QString("<hidden>"); if (name.isEmpty()) name = QString("<hidden>");
// append mac and frequency if exists // append mac and frequency if exists
int index = names.indexOf(name); int index = names.indexOf(name);
if ((name != QString("<hidden>")) && (index > -1)) { if ((name != QString("<hidden>")) && (index > -1)) {
scanResults[index].frequencies.append(line.at(1).toInt()); scanResults[index].frequencies.append(line[1].toInt());
scanResults[index].macs.append(line.at(0)); scanResults[index].macs.append(line[0]);
if (scanResults[index].signal < line.at(2).toInt()) if (scanResults[index].signal < line[2].toInt())
scanResults[index].signal = line.at(2).toInt(); scanResults[index].signal = line[2].toInt();
// check type // check type
if ((line.at(1).toInt() >= 5000) && (line.at(1).toInt() < 6000)) { if ((line[1].toInt() >= 5000) && (line[1].toInt() < 6000)) {
if (scanResults[index].type == PointType::None) if (scanResults[index].type == PointType::None)
scanResults[index].type = PointType::FiveG; scanResults[index].type = PointType::FiveG;
else if (scanResults[index].type == PointType::TwoG) else if (scanResults[index].type == PointType::TwoG)
scanResults[index].type = PointType::TwoAndFiveG; scanResults[index].type = PointType::TwoAndFiveG;
} else if ((line.at(1).toInt() < 5000) && (line.at(1).toInt() > 2000)) { } else if ((line[1].toInt() < 5000) && (line[1].toInt() > 2000)) {
if (scanResults[index].type == PointType::None) if (scanResults[index].type == PointType::None)
scanResults[index].type = PointType::TwoG; scanResults[index].type = PointType::TwoG;
else if (scanResults[index].type == PointType::FiveG) else if (scanResults[index].type == PointType::FiveG)
@ -345,28 +382,28 @@ QList<netctlWifiInfo> WpaSup::scanWifi() const
netctlProfileInfo profile; netctlProfileInfo profile;
profile.name = QString(""); profile.name = QString("");
profile.active = false; profile.active = false;
foreach(netctlProfileInfo pr, profiles) { for (int j=0; j<profiles.count(); j++) {
if (wifiPoint.name != pr.essid) continue; if (wifiPoint.name != profiles[j].essid) continue;
profile = pr; profile = profiles[j];
break; break;
} }
wifiPoint.active = profile.active; wifiPoint.active = profile.active;
wifiPoint.exists = (!profile.name.isEmpty()); wifiPoint.exists = (!profile.name.isEmpty());
// mac // mac
wifiPoint.macs.append(line.at(0)); wifiPoint.macs.append(line[0]);
// frequencies // frequencies
wifiPoint.frequencies.append(line.at(1).toInt()); wifiPoint.frequencies.append(line[1].toInt());
// type // type
// check type // check type
if ((line.at(1).toInt() >= 5000) && (line.at(1).toInt() < 6000)) { if ((line[1].toInt() >= 5000) && (line[1].toInt() < 6000)) {
wifiPoint.type = PointType::FiveG; wifiPoint.type = PointType::FiveG;
} else if ((line.at(1).toInt() < 5000) && (line.at(1).toInt() > 2000)) { } else if ((line[1].toInt() < 5000) && (line[1].toInt() > 2000)) {
wifiPoint.type = PointType::TwoG; wifiPoint.type = PointType::TwoG;
} }
// point signal // point signal
wifiPoint.signal = line.at(2).toInt(); wifiPoint.signal = line[2].toInt();
// point security // point security
QString security = line.at(3); QString security = line[3];
if (security.contains(QString("WPA2"))) if (security.contains(QString("WPA2")))
security = QString("WPA2"); security = QString("WPA2");
else if (security.contains(QString("WPA"))) else if (security.contains(QString("WPA")))
@ -390,7 +427,7 @@ QList<netctlWifiInfo> WpaSup::scanWifi() const
/** /**
* @fn startWpaSupplicant * @fn startWpaSupplicant
*/ */
bool WpaSup::startWpaSupplicant() const bool WpaSup::startWpaSupplicant()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (ctrlDir.isEmpty()) { if (ctrlDir.isEmpty()) {
@ -423,27 +460,28 @@ bool WpaSup::startWpaSupplicant() const
return false; return false;
} }
QString _pidFile = pidFile; QString _pidFile = pidFile;
_pidFile.replace(QString("$i"), interfaces.first()); _pidFile.replace(QString("$i"), interfaces[0]);
if (debug) qDebug() << PDEBUG << ":" << "PID file" << _pidFile << QFile(_pidFile).exists(); if (debug) qDebug() << PDEBUG << ":" << "PID file" << _pidFile << QFile(_pidFile).exists();
if (QFile(_pidFile).exists()) return (QFileInfo(ctrlDir).group() == ctrlGroup); if (QFile(_pidFile).exists()) return (QFileInfo(ctrlDir).group() == ctrlGroup);
QString cmd = QString("%1 %2 -B -P \"%3\" -i %4 -D %5 -C \"DIR=%6 GROUP=%7\"") QString cmd = QString("%1 %2 -B -P \"%3\" -i %4 -D %5 -C \"DIR=%6 GROUP=%7\"")
.arg(sudoCommand).arg(wpaSupPath).arg(_pidFile).arg(interfaces.first()) .arg(sudoCommand).arg(wpaSupPath).arg(_pidFile).arg(interfaces[0])
.arg(wpaDrivers).arg(ctrlDir).arg(ctrlGroup); .arg(wpaDrivers).arg(ctrlDir).arg(ctrlGroup);
if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd;
TaskResult process = runTask(cmd, useSuid); TaskResult process = runTask(cmd, useSuid);
waitForProcess(1); waitForProcess(1);
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; if (process.exitCode != 0)
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error;
return process.status(); return (process.exitCode == 0);
} }
/** /**
* @fn stopWpaSupplicant * @fn stopWpaSupplicant
*/ */
bool WpaSup::stopWpaSupplicant() const bool WpaSup::stopWpaSupplicant()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -455,7 +493,7 @@ bool WpaSup::stopWpaSupplicant() const
/** /**
* @fn getWpaCliOutput * @fn getWpaCliOutput
*/ */
QString WpaSup::getWpaCliOutput(const QString commandLine) const QString WpaSup::getWpaCliOutput(const QString commandLine)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Command" << commandLine; if (debug) qDebug() << PDEBUG << ":" << "Command" << commandLine;
@ -473,11 +511,12 @@ QString WpaSup::getWpaCliOutput(const QString commandLine) const
return QString(); return QString();
} }
QString cmd = QString("%1 -i %2 -p %3 %4").arg(wpaCliPath).arg(interfaces.first()).arg(ctrlDir).arg(commandLine); QString cmd = QString("%1 -i %2 -p %3 %4").arg(wpaCliPath).arg(interfaces[0]).arg(ctrlDir).arg(commandLine);
if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd;
TaskResult process = runTask(cmd); TaskResult process = runTask(cmd);
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; if (process.exitCode != 0)
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error;
return process.output; return process.output;
} }
@ -486,7 +525,7 @@ QString WpaSup::getWpaCliOutput(const QString commandLine) const
/** /**
* @fn waitForProcess * @fn waitForProcess
*/ */
bool WpaSup::waitForProcess(const int sec) const bool WpaSup::waitForProcess(const int sec)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Interval" << sec; if (debug) qDebug() << PDEBUG << ":" << "Interval" << sec;
@ -501,7 +540,7 @@ bool WpaSup::waitForProcess(const int sec) const
/** /**
* @fn wpaCliCall * @fn wpaCliCall
*/ */
bool WpaSup::wpaCliCall(const QString commandLine) const bool WpaSup::wpaCliCall(const QString commandLine)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Command" << commandLine; if (debug) qDebug() << PDEBUG << ":" << "Command" << commandLine;
@ -519,12 +558,13 @@ bool WpaSup::wpaCliCall(const QString commandLine) const
return false; return false;
} }
QString cmd = QString("%1 -i %2 -p %3 %4").arg(wpaCliPath).arg(interfaces.first()).arg(ctrlDir).arg(commandLine); QString cmd = QString("%1 -i %2 -p %3 %4").arg(wpaCliPath).arg(interfaces[0]).arg(ctrlDir).arg(commandLine);
if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd;
TaskResult process = runTask(cmd); TaskResult process = runTask(cmd);
waitForProcess(1); waitForProcess(1);
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; if (process.exitCode != 0)
if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error;
return process.status(); return (process.exitCode == 0);
} }

View File

@ -154,8 +154,8 @@ QMap<QString, QString> Netctl::readDataEngineConfiguration()
QSettings settings(fileName, QSettings::IniFormat); QSettings settings(fileName, QSettings::IniFormat);
settings.beginGroup(QString("Netctl commands")); settings.beginGroup(QString("Netctl commands"));
configuration[QString("NETCTLCMD")] = settings.value(QString("NETCTLCMD"), QString("netctl")).toString(); configuration[QString("NETCTLCMD")] = settings.value(QString("NETCTLCMD"), QString("/usr/bin/netctl")).toString();
configuration[QString("NETCTLAUTOCMD")] = settings.value(QString("NETCTLAUTOCMD"), QString("netctl-auto")).toString(); configuration[QString("NETCTLAUTOCMD")] = settings.value(QString("NETCTLAUTOCMD"), QString("/usr/bin/netctl-auto")).toString();
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("External IP")); settings.beginGroup(QString("External IP"));
@ -836,12 +836,12 @@ void Netctl::configChanged()
KConfigGroup cg = config(); KConfigGroup cg = config();
autoUpdateInterval = cg.readEntry("autoUpdateInterval", 1000); autoUpdateInterval = cg.readEntry("autoUpdateInterval", 1000);
paths[QString("gui")] = cg.readEntry("guiPath", "netctl-gui"); paths[QString("gui")] = cg.readEntry("guiPath", "/usr/bin/netctl-gui");
paths[QString("helper")] = cg.readEntry("helperPath", "netctlgui-helper"); paths[QString("helper")] = cg.readEntry("helperPath", "/usr/bin/netctlgui-helper");
paths[QString("netctl")] = cg.readEntry("netctlPath", "netctl"); paths[QString("netctl")] = cg.readEntry("netctlPath", "/usr/bin/netctl");
paths[QString("netctlAuto")] = cg.readEntry("netctlAutoPath", "netctl-auto"); paths[QString("netctlAuto")] = cg.readEntry("netctlAutoPath", "/usr/bin/netctl-auto");
paths[QString("sudo")] = cg.readEntry("sudoPath", "kdesu"); paths[QString("sudo")] = cg.readEntry("sudoPath", "/usr/bin/kdesu");
paths[QString("wifi")] = cg.readEntry("wifiPath", "netctl-gui -t 3"); paths[QString("wifi")] = cg.readEntry("wifiPath", "/usr/bin/netctl-gui -t 3");
useSudo = cg.readEntry("useSudo", true); useSudo = cg.readEntry("useSudo", true);
useWifi = cg.readEntry("useWifi", false); useWifi = cg.readEntry("useWifi", false);
useHelper = cg.readEntry("useHelper", true); useHelper = cg.readEntry("useHelper", true);

View File

@ -12,7 +12,7 @@ X-KDE-PluginInfo-Author=Evgeniy Alekseev
X-KDE-PluginInfo-Email=esalexeev@gmail.com X-KDE-PluginInfo-Email=esalexeev@gmail.com
X-KDE-PluginInfo-Name=netctl X-KDE-PluginInfo-Name=netctl
X-KDE-PluginInfo-Version=@PROJECT_VERSION@ X-KDE-PluginInfo-Version=@PROJECT_VERSION@
X-KDE-PluginInfo-Website=https://arcanis.me/projects/netctl-gui/ X-KDE-PluginInfo-Website=http://arcanis.name/projects/netctl-gui/
X-KDE-PluginInfo-Category=Network X-KDE-PluginInfo-Category=Network
X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPLv3 X-KDE-PluginInfo-License=GPLv3

View File

@ -15,7 +15,7 @@ X-KDE-PluginInfo-Author=Evgeniy Alekseev
X-KDE-PluginInfo-Email=esalexeev@gmail.com X-KDE-PluginInfo-Email=esalexeev@gmail.com
X-KDE-PluginInfo-Name=org.kde.plasma.netctl X-KDE-PluginInfo-Name=org.kde.plasma.netctl
X-KDE-PluginInfo-Version=@PROJECT_VERSION@ X-KDE-PluginInfo-Version=@PROJECT_VERSION@
X-KDE-PluginInfo-Website=https://arcanis.me/projects/netctl-gui X-KDE-PluginInfo-Website=http://arcanis.name/projects/netctl-gui
X-KDE-PluginInfo-Category=Network X-KDE-PluginInfo-Category=Network
X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPLv3 X-KDE-PluginInfo-License=GPLv3

View File

@ -11,22 +11,22 @@
<default>100</default> <default>100</default>
</entry> </entry>
<entry name="guiPath" type="string"> <entry name="guiPath" type="string">
<default>netctl-gui</default> <default>/usr/bin/netctl-gui</default>
</entry> </entry>
<entry name="helperPath" type="string"> <entry name="helperPath" type="string">
<default>netctlgui-helper</default> <default>/usr/bin/netctlgui-helper</default>
</entry> </entry>
<entry name="netctlPath" type="string"> <entry name="netctlPath" type="string">
<default>netctl</default> <default>/usr/bin/netctl</default>
</entry> </entry>
<entry name="netctlAutoPath" type="string"> <entry name="netctlAutoPath" type="string">
<default>netctl-auto</default> <default>/usr/bin/netctl-auto</default>
</entry> </entry>
<entry name="sudoPath" type="string"> <entry name="sudoPath" type="string">
<default>kdesu</default> <default>/usr/bin/kdesu</default>
</entry> </entry>
<entry name="wifiPath" type="string"> <entry name="wifiPath" type="string">
<default>netctl-gui -t 3</default> <default>/usr/bin/netctl-gui -t 3</default>
</entry> </entry>
<entry name="useHelper" type="bool"> <entry name="useHelper" type="bool">
<default>true</default> <default>true</default>

View File

@ -24,20 +24,16 @@ import org.kde.plasma.private.netctl 1.0
Item { Item {
id: aboutPage id: aboutPage
// backend
NetctlAdds {
id: netctlAdds;
}
width: childrenRect.width width: childrenRect.width
height: childrenRect.height height: childrenRect.height
implicitWidth: pageColumn.implicitWidth implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight implicitHeight: pageColumn.implicitHeight
property bool debug: netctlAdds.isDebugEnabled() property bool debug: NetctlAdds.isDebugEnabled()
Column { Column {
id: pageColumn id: pageColumn
anchors.fill: parent width: units.gridUnit * 25
QtControls.TabView { QtControls.TabView {
height: parent.height height: parent.height
width: parent.width width: parent.width
@ -48,21 +44,20 @@ Item {
QtControls.Label { QtControls.Label {
QtLayouts.Layout.fillWidth: true QtLayouts.Layout.fillWidth: true
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
text: netctlAdds.getAboutText("header") text: NetctlAdds.getAboutText("header")
} }
QtControls.Label { QtControls.Label {
QtLayouts.Layout.fillWidth: true QtLayouts.Layout.fillWidth: true
horizontalAlignment: Text.AlignJustify horizontalAlignment: Text.AlignJustify
text: netctlAdds.getAboutText("description") text: NetctlAdds.getAboutText("description")
} }
QtControls.Label { QtControls.Label {
QtLayouts.Layout.fillWidth: true QtLayouts.Layout.fillWidth: true
horizontalAlignment: Text.AlignLeft horizontalAlignment: Text.AlignLeft
textFormat: Text.RichText textFormat: Text.RichText
text: netctlAdds.getAboutText("links") text: NetctlAdds.getAboutText("links")
onLinkActivated: Qt.openUrlExternally(link);
} }
QtControls.Label { QtControls.Label {
@ -70,7 +65,7 @@ Item {
font.capitalization: Font.SmallCaps font.capitalization: Font.SmallCaps
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
textFormat: Text.RichText textFormat: Text.RichText
text: netctlAdds.getAboutText("copy") text: NetctlAdds.getAboutText("copy")
} }
} }
} }
@ -82,15 +77,14 @@ Item {
QtControls.Label { QtControls.Label {
QtLayouts.Layout.fillWidth: true QtLayouts.Layout.fillWidth: true
horizontalAlignment: Text.AlignJustify horizontalAlignment: Text.AlignJustify
text: netctlAdds.getAboutText("translators") text: NetctlAdds.getAboutText("translators")
} }
QtControls.Label { QtControls.Label {
QtLayouts.Layout.fillWidth: true QtLayouts.Layout.fillWidth: true
horizontalAlignment: Text.AlignJustify horizontalAlignment: Text.AlignJustify
textFormat: Text.RichText textFormat: Text.RichText
text: netctlAdds.getAboutText("3rdparty") text: NetctlAdds.getAboutText("3rdparty")
onLinkActivated: Qt.openUrlExternally(link);
} }
} }
} }

View File

@ -26,16 +26,12 @@ import org.kde.plasma.private.netctl 1.0
Item { Item {
id: appearancePage id: appearancePage
// backend
NetctlAdds {
id: netctlAdds;
}
width: childrenRect.width width: childrenRect.width
height: childrenRect.height height: childrenRect.height
implicitWidth: pageColumn.implicitWidth implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight implicitHeight: pageColumn.implicitHeight
property bool debug: netctlAdds.isDebugEnabled() property bool debug: NetctlAdds.isDebugEnabled()
property variant weight: { property variant weight: {
25: 0, 25: 0,
50: 1, 50: 1,
@ -56,7 +52,7 @@ Item {
Column { Column {
id: pageColumn id: pageColumn
anchors.fill: parent width: units.gridUnit * 25
Row { Row {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
@ -114,10 +110,7 @@ Item {
id: selectFont id: selectFont
width: parent.width * 2 / 3 width: parent.width * 2 / 3
text: plasmoid.configuration.fontFamily text: plasmoid.configuration.fontFamily
onClicked: { onClicked: fontDialog.visible = true
fontDialog.setFont()
fontDialog.visible = true
}
} }
} }
@ -315,28 +308,21 @@ Item {
id: colorDialog id: colorDialog
title: i18n("Select a color") title: i18n("Select a color")
color: selectColor.text color: selectColor.text
onAccepted: selectColor.text = colorDialog.color onAccepted: {
selectColor.text = colorDialog.color
}
} }
QtDialogs.FontDialog { QtDialogs.FontDialog {
id: fontDialog id: fontDialog
title: i18n("Select a font") title: i18n("Select a font")
signal setFont font: Qt.font({ family: selectFont.text, pointSize: fontSize.value, weight: Font.Normal })
onAccepted: { onAccepted: {
selectFont.text = fontDialog.font.family selectFont.text = fontDialog.font.family
fontSize.value = fontDialog.font.pointSize fontSize.value = fontDialog.font.pointSize
fontStyle.currentIndex = fontDialog.font.italic ? 1 : 0 fontStyle.currentIndex = fontDialog.font.italic ? 1 : 0
fontWeight.currentIndex = weight[fontDialog.font.weight] fontWeight.currentIndex = weight[fontDialog.font.weight]
} }
onSetFont: {
fontDialog.font = Qt.font({
family: selectFont.text,
pointSize: fontSize.value > 0 ? fontSize.value : 12,
italic: fontStyle.currentIndex == 1,
weight: Font.Normal,
})
}
} }
Component.onCompleted: { Component.onCompleted: {

View File

@ -26,22 +26,18 @@ import org.kde.plasma.private.netctl 1.0
Item { Item {
id: dataenginePage id: dataenginePage
// backend
NetctlAdds {
id: netctlAdds;
}
width: childrenRect.width width: childrenRect.width
height: childrenRect.height height: childrenRect.height
implicitWidth: pageColumn.implicitWidth implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight implicitHeight: pageColumn.implicitHeight
property bool debug: netctlAdds.isDebugEnabled() property bool debug: NetctlAdds.isDebugEnabled()
property variant cfg_dataengine: netctlAdds.readDataEngineConfiguration() property variant cfg_dataengine: NetctlAdds.readDataEngineConfiguration()
Column { Column {
id: pageColumn id: pageColumn
anchors.fill: parent width: units.gridUnit * 25
Row { Row {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
@ -232,6 +228,6 @@ Item {
Component.onDestruction: { Component.onDestruction: {
cfg_dataengine["EXTIP4"] = extIp4.checked ? "true" : "false" cfg_dataengine["EXTIP4"] = extIp4.checked ? "true" : "false"
cfg_dataengine["EXTIP6"] = extIp6.checked ? "true" : "false" cfg_dataengine["EXTIP6"] = extIp6.checked ? "true" : "false"
netctlAdds.writeDataEngineConfiguration(cfg_dataengine) NetctlAdds.writeDataEngineConfiguration(cfg_dataengine)
} }
} }

View File

@ -17,7 +17,6 @@
import QtQuick 2.4 import QtQuick 2.4
import QtQuick.Controls 1.3 as QtControls import QtQuick.Controls 1.3 as QtControls
import QtQuick.Layouts 1.1
import org.kde.plasma.plasmoid 2.0 import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.components 2.0 as PlasmaComponents
@ -27,14 +26,10 @@ import org.kde.plasma.private.netctl 1.0
Item { Item {
id: main id: main
// backend
NetctlAdds {
id: netctlAdds;
}
// variables // variables
// internal // internal
property bool debug: netctlAdds.isDebugEnabled() property bool debug: NetctlAdds.isDebugEnabled()
property variant fontWeight: { property variant fontWeight: {
"light": Font.Light, "light": Font.Light,
"normal": Font.Normal, "normal": Font.Normal,
@ -56,9 +51,8 @@ Item {
} }
property string sudoPath: plasmoid.configuration.useSudo ? plasmoid.configuration.sudoPath : "" property string sudoPath: plasmoid.configuration.useSudo ? plasmoid.configuration.sudoPath : ""
// signals // signals
signal needIconUpdate(string newIcon) signal needUpdate
signal needTextUpdate(string newText, string newToolTip) signal needMenuUpdate
signal needMenuUpdate(string current, string stringStatus, bool status)
// init // init
Plasmoid.icon: iconPath["false"] Plasmoid.icon: iconPath["false"]
@ -76,13 +70,13 @@ Item {
onNewData: { onNewData: {
if (debug) console.log("[main::onNewData] : Update source " + sourceName) if (debug) console.log("[main::onNewData] : Update source " + sourceName)
netctlAdds.setDataBySource(sourceName, data) NetctlAdds.setDataBySource(sourceName, data)
} }
} }
// ui // ui
GridLayout { Grid {
anchors.fill: parent id: mainGrid
columns: 2 columns: 2
Image { Image {
@ -97,7 +91,6 @@ Item {
font.pointSize: plasmoid.configuration.fontSize font.pointSize: plasmoid.configuration.fontSize
font.weight: fontWeight[plasmoid.configuration.fontWeight] font.weight: fontWeight[plasmoid.configuration.fontWeight]
horizontalAlignment: align[plasmoid.configuration.textAlign] horizontalAlignment: align[plasmoid.configuration.textAlign]
renderType: Text.NativeRendering
textFormat: Text.RichText textFormat: Text.RichText
text: "N\\A" text: "N\\A"
} }
@ -115,30 +108,37 @@ Item {
plasmoid.setAction("restartProfile", i18n("Restart profile"), "view-refresh") plasmoid.setAction("restartProfile", i18n("Restart profile"), "view-refresh")
plasmoid.setAction("enableProfile", i18n("Enable profile")) plasmoid.setAction("enableProfile", i18n("Enable profile"))
plasmoid.setAction("startWifi", i18n("Show WiFi menu"), "netctl-gui-wifi") plasmoid.setAction("startWifi", i18n("Show WiFi menu"), "netctl-gui-wifi")
// init submodule // helper
Plasmoid.userConfiguringChanged(false) if (plasmoid.configuration.useHelper) {
NetctlAdds.runCmd(plasmoid.configuration.helperPath)
plasmoid.configuration.useHelper = NetctlAdds.checkHelperStatus()
}
netctlAdds.needIconToBeUpdated.connect(needIconUpdate) NetctlAdds.needToBeUpdated.connect(needUpdate)
netctlAdds.needMenuUpdate.connect(needMenuUpdate)
netctlAdds.needTextToBeUpdated.connect(needTextUpdate)
} }
onNeedIconUpdate: { onNeedUpdate: {
if (debug) console.log("[main::onNeedIconUpdate]") if (debug) console.log("[main::onNeedUpdate]")
icon.source = iconPath[newIcon] var iconStatus = NetctlAdds.valueByKey("active")
Plasmoid.icon = iconPath[newIcon] icon.source = iconPath[iconStatus]
} Plasmoid.icon = iconPath[iconStatus]
text.text = NetctlAdds.parsePattern(plasmoid.configuration.textPattern)
Plasmoid.toolTipSubText = NetctlAdds.valueByKey("info")
needMenuUpdate()
// updae geometry
text.update()
icon.height = text.contentHeight
icon.width = text.contentHeight
icon.update()
height = text.contentHeight
width = icon.paintedWidth + text.contentWidth
update()
onNeedTextUpdate: {
if (debug) console.log("[main::onNeedTextUpdate]")
text.text = newText
Plasmoid.toolTipSubText = newToolTip
} }
onNeedMenuUpdate: { onNeedMenuUpdate: {
if (debug) console.log("[main::onNeedMenuUpdate]") if (debug) console.log("[main::onNetctlStateChanged]")
var titleAction = plasmoid.action("titleAction") var titleAction = plasmoid.action("titleAction")
var startAction = plasmoid.action("startProfile") var startAction = plasmoid.action("startProfile")
@ -149,6 +149,10 @@ Item {
var enableAction = plasmoid.action("enableProfile") var enableAction = plasmoid.action("enableProfile")
var wifiAction = plasmoid.action("startWifi") var wifiAction = plasmoid.action("startWifi")
var current = NetctlAdds.valueByKey("current")
var status = NetctlAdds.valueByKey("active") == "true"
var stringStatus = NetctlAdds.valueByKey("status")
titleAction.iconSource = plasmoid.icon titleAction.iconSource = plasmoid.icon
titleAction.text = current + " " + stringStatus titleAction.text = current + " " + stringStatus
@ -190,29 +194,16 @@ Item {
wifiAction.visible = plasmoid.configuration.useWifi wifiAction.visible = plasmoid.configuration.useWifi
} }
Plasmoid.onUserConfiguringChanged: {
if (plasmoid.userConfiguring) return
if (debug) console.log("[main::onUserConfiguringChanged]")
// helper
if (plasmoid.configuration.useHelper) {
netctlAdds.runCmd(plasmoid.configuration.helperPath)
plasmoid.configuration.useHelper = netctlAdds.checkHelperStatus()
}
// init submodule
netctlAdds.setPattern(plasmoid.configuration.textPattern)
}
function action_titleAction() { function action_titleAction() {
if (debug) console.log("[main::action_titleAction]") if (debug) console.log("[main::action_titleAction]")
netctlAdds.runCmd(plasmoid.configuration.guiPath) NetctlAdds.runCmd(plasmoid.configuration.guiPath)
} }
function action_startProfile() { function action_startProfile() {
if (debug) console.log("[main::action_startProfile]") if (debug) console.log("[main::action_startProfile]")
netctlAdds.startProfileSlot(plasmoid.configuration.useHelper, NetctlAdds.startProfileSlot(plasmoid.configuration.useHelper,
plasmoid.configuration.netctlPath, plasmoid.configuration.netctlPath,
sudoPath) sudoPath)
} }
@ -220,7 +211,7 @@ Item {
function action_stopProfile() { function action_stopProfile() {
if (debug) console.log("[main::action_stopProfile]") if (debug) console.log("[main::action_stopProfile]")
netctlAdds.stopProfileSlot(plasmoid.configuration.useHelper, NetctlAdds.stopProfileSlot(plasmoid.configuration.useHelper,
plasmoid.configuration.netctlPath, plasmoid.configuration.netctlPath,
sudoPath) sudoPath)
} }
@ -228,7 +219,7 @@ Item {
function action_stopAllProfiles() { function action_stopAllProfiles() {
if (debug) console.log("[main::action_stopAllProfiles]") if (debug) console.log("[main::action_stopAllProfiles]")
netctlAdds.stopAllProfilesSlot(plasmoid.configuration.useHelper, NetctlAdds.stopAllProfilesSlot(plasmoid.configuration.useHelper,
plasmoid.configuration.netctlPath, plasmoid.configuration.netctlPath,
sudoPath) sudoPath)
} }
@ -236,14 +227,14 @@ Item {
function action_switchToProfile() { function action_switchToProfile() {
if (debug) console.log("[main::action_switchToProfile]") if (debug) console.log("[main::action_switchToProfile]")
netctlAdds.switchToProfileSlot(plasmoid.configuration.useHelper, NetctlAdds.switchToProfileSlot(plasmoid.configuration.useHelper,
plasmoid.configuration.netctlAutoPath) plasmoid.configuration.netctlAutoPath)
} }
function action_restartProfile() { function action_restartProfile() {
if (debug) console.log("[main::action_restartProfile]") if (debug) console.log("[main::action_restartProfile]")
netctlAdds.restartProfileSlot(plasmoid.configuration.useHelper, NetctlAdds.restartProfileSlot(plasmoid.configuration.useHelper,
plasmoid.configuration.netctlPath, plasmoid.configuration.netctlPath,
sudoPath) sudoPath)
} }
@ -251,7 +242,7 @@ Item {
function action_enableProfile() { function action_enableProfile() {
if (debug) console.log("[main::action_enableProfile]") if (debug) console.log("[main::action_enableProfile]")
netctlAdds.enableProfileSlot(plasmoid.configuration.useHelper, NetctlAdds.enableProfileSlot(plasmoid.configuration.useHelper,
plasmoid.configuration.netctlPath, plasmoid.configuration.netctlPath,
sudoPath) sudoPath)
} }
@ -259,6 +250,6 @@ Item {
function action_startWifi() { function action_startWifi() {
if (debug) console.log("[main::action_startWifi]") if (debug) console.log("[main::action_startWifi]")
netctlAdds.runCmd(plasmoid.configuration.wifiPath) NetctlAdds.runCmd(plasmoid.configuration.wifiPath)
} }
} }

View File

@ -26,15 +26,12 @@ import org.kde.plasma.private.netctl 1.0
Item { Item {
id: widgetPage id: widgetPage
NetctlAdds {
id: netctlAdds;
}
width: childrenRect.width width: childrenRect.width
height: childrenRect.height height: childrenRect.height
implicitWidth: pageColumn.implicitWidth implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight implicitHeight: pageColumn.implicitHeight
property bool debug: netctlAdds.isDebugEnabled() property bool debug: NetctlAdds.isDebugEnabled()
property alias cfg_autoUpdateInterval: autoUpdate.value property alias cfg_autoUpdateInterval: autoUpdate.value
property alias cfg_guiPath: guiPath.text property alias cfg_guiPath: guiPath.text
@ -51,7 +48,7 @@ Item {
Column { Column {
id: pageColumn id: pageColumn
anchors.fill: parent width: units.gridUnit * 25
Row { Row {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width

View File

@ -14,8 +14,8 @@ X-Plasma-RemoteLocation=
X-KDE-PluginInfo-Author=Evgeniy Alekseev X-KDE-PluginInfo-Author=Evgeniy Alekseev
X-KDE-PluginInfo-Email=esalexeev@gmail.com X-KDE-PluginInfo-Email=esalexeev@gmail.com
X-KDE-PluginInfo-Name=org.kde.plasma.netctl X-KDE-PluginInfo-Name=org.kde.plasma.netctl
X-KDE-PluginInfo-Version=1.4.9 X-KDE-PluginInfo-Version=1.4.3
X-KDE-PluginInfo-Website=https://arcanis.me/projects/netctl-gui X-KDE-PluginInfo-Website=http://arcanis.name/projects/netctl-gui
X-KDE-PluginInfo-Category=Network X-KDE-PluginInfo-Category=Network
X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPLv3 X-KDE-PluginInfo-License=GPLv3

View File

@ -1,5 +1,4 @@
set (PLUGIN_NAME netctlplugin) set (PLUGIN_NAME netctlplugin)
add_definitions(-DTRANSLATION_DOMAIN=\"plasma_applet_org.kde.plasma.netctl\")
add_definitions (${Qt5Core_DEFINITIONS} ${Qt5DBus_DEFINITIONS} ${Qt5Qml_DEFINITIONS}) add_definitions (${Qt5Core_DEFINITIONS} ${Qt5DBus_DEFINITIONS} ${Qt5Qml_DEFINITIONS})
set (Qt_INCLUDE ${Qt5Core_INCLUDE_DIRS} set (Qt_INCLUDE ${Qt5Core_INCLUDE_DIRS}
@ -21,7 +20,7 @@ include_directories (${CMAKE_SOURCE_DIR}
${Qt_INCLUDE} ${Qt_INCLUDE}
${Kf5_INCLUDE}) ${Kf5_INCLUDE})
file (GLOB_RECURSE SUBPROJECT_SOURCE *.cpp) file (GLOB SUBPROJECT_SOURCE *.cpp)
file (GLOB SUBPROJECT_NOTIFY *.notifyrc) file (GLOB SUBPROJECT_NOTIFY *.notifyrc)
add_library (${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE}) add_library (${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE})

View File

@ -21,9 +21,18 @@
#include "netctladds.h" #include "netctladds.h"
static QObject *netctl_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
{
Q_UNUSED(engine);
Q_UNUSED(scriptEngine);
return new NetctlAdds();
}
void NetctlPlugin::registerTypes(const char *uri) void NetctlPlugin::registerTypes(const char *uri)
{ {
Q_ASSERT(uri == QLatin1String("org.kde.plasma.private.netctl")); Q_ASSERT(uri == QLatin1String("org.kde.plasma.private.netctl"));
qmlRegisterType<NetctlAdds>(uri, 1, 0, "NetctlAdds"); qmlRegisterSingletonType<NetctlAdds>(uri, 1, 0, "NetctlAdds", netctl_singletontype_provider);
} }

View File

@ -39,9 +39,6 @@ NetctlAdds::NetctlAdds(QObject *parent)
QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); QProcessEnvironment environment = QProcessEnvironment::systemEnvironment();
QString debugEnv = environment.value(QString("DEBUG"), QString("no")); QString debugEnv = environment.value(QString("DEBUG"), QString("no"));
debug = (debugEnv == QString("yes")); debug = (debugEnv == QString("yes"));
connect(this, SIGNAL(needToNotify(bool)), this, SLOT(notifyAboutStatusChanging(bool)));
connect(this, SIGNAL(needToBeUpdated()), this, SLOT(parsePattern()));
} }
@ -51,33 +48,7 @@ NetctlAdds::~NetctlAdds()
} }
void NetctlAdds::notifyAboutStatusChanging(const bool currentStatus) const QList<QVariant> NetctlAdds::sendDBusRequest(const QString cmd, const QList<QVariant> args)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Status" << currentStatus;
if (currentStatus)
return NetctlAdds::sendNotification(QString("Info"), i18n("Network status has been changed to active"));
else
return NetctlAdds::sendNotification(QString("Info"), i18n("Network status has been changed to inactive"));
}
void NetctlAdds::parsePattern() const
{
if (debug) qDebug() << PDEBUG;
QString parsed = pattern;
foreach(QString value, values.keys())
parsed.replace(QString("$%1").arg(value), values[value]);
// fix newline
parsed.replace(QString("\n"), QString("<br>"));
return emit(needTextToBeUpdated(parsed, values[QString("info")]));
}
QVariantList NetctlAdds::sendDBusRequest(const QString cmd, const QVariantList args) const
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "cmd" << cmd; if (debug) qDebug() << PDEBUG << ":" << "cmd" << cmd;
@ -86,24 +57,26 @@ QVariantList NetctlAdds::sendDBusRequest(const QString cmd, const QVariantList a
QDBusConnection bus = QDBusConnection::systemBus(); QDBusConnection bus = QDBusConnection::systemBus();
QDBusMessage request = QDBusMessage::createMethodCall(DBUS_HELPER_SERVICE, DBUS_CTRL_PATH, QDBusMessage request = QDBusMessage::createMethodCall(DBUS_HELPER_SERVICE, DBUS_CTRL_PATH,
DBUS_HELPER_INTERFACE, cmd); DBUS_HELPER_INTERFACE, cmd);
if (!args.isEmpty()) request.setArguments(args); if (!args.isEmpty())
request.setArguments(args);
QDBusMessage response = bus.call(request, QDBus::BlockWithGui); QDBusMessage response = bus.call(request, QDBus::BlockWithGui);
QVariantList arguments = response.arguments(); QList<QVariant> arguments = response.arguments();
if (debug) qDebug() << PDEBUG << ":" << "Error message" << response.errorMessage(); if (arguments.size() == 0)
if (debug) qDebug() << PDEBUG << ":" << "Error message" << response.errorMessage();
return arguments; return arguments;
} }
bool NetctlAdds::checkHelperStatus() const bool NetctlAdds::checkHelperStatus()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
return !sendDBusRequest(QString("Active")).isEmpty(); return sendDBusRequest(QString("Active"), QList<QVariant>()).isEmpty();
} }
QString NetctlAdds::getAboutText(const QString type) const QString NetctlAdds::getAboutText(const QString type)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Type" << type; if (debug) qDebug() << PDEBUG << ":" << "Type" << type;
@ -131,9 +104,9 @@ QString NetctlAdds::getAboutText(const QString type) const
QStringList trdPartyList = QString(TRDPARTY_LICENSE).split(QChar(';'), QString::SkipEmptyParts); QStringList trdPartyList = QString(TRDPARTY_LICENSE).split(QChar(';'), QString::SkipEmptyParts);
for (int i=0; i<trdPartyList.count(); i++) for (int i=0; i<trdPartyList.count(); i++)
trdPartyList[i] = QString("<a href=\"%3\">%1</a> (%2 license)") trdPartyList[i] = QString("<a href=\"%3\">%1</a> (%2 license)")
.arg(trdPartyList.at(i).split(QChar(',')).at(0)) .arg(trdPartyList[i].split(QChar(','))[0])
.arg(trdPartyList.at(i).split(QChar(',')).at(1)) .arg(trdPartyList[i].split(QChar(','))[1])
.arg(trdPartyList.at(i).split(QChar(',')).at(2)); .arg(trdPartyList[i].split(QChar(','))[2]);
text = i18n("This software uses: %1", trdPartyList.join(QString(", "))); text = i18n("This software uses: %1", trdPartyList.join(QString(", ")));
} }
@ -141,7 +114,7 @@ QString NetctlAdds::getAboutText(const QString type) const
} }
bool NetctlAdds::isDebugEnabled() const bool NetctlAdds::isDebugEnabled()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -149,7 +122,21 @@ bool NetctlAdds::isDebugEnabled() const
} }
void NetctlAdds::runCmd(const QString cmd) const QString NetctlAdds::parsePattern(const QString pattern)
{
if (debug) qDebug() << PDEBUG;
QString parsed = pattern;
for (int i=0; i<values.keys().count(); i++)
parsed.replace(QString("$%1").arg(values.keys()[i]), valueByKey(values.keys()[i]));
// fix newline
parsed.replace(QString("\n"), QString("<br>"));
return parsed;
}
void NetctlAdds::runCmd(const QString cmd)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Cmd" << cmd; if (debug) qDebug() << PDEBUG << ":" << "Cmd" << cmd;
@ -161,7 +148,7 @@ void NetctlAdds::runCmd(const QString cmd) const
} }
void NetctlAdds::setDataBySource(const QString sourceName, const QVariantMap data) void NetctlAdds::setDataBySource(const QString sourceName, const QMap<QString, QVariant> data)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Source" << sourceName; if (debug) qDebug() << PDEBUG << ":" << "Source" << sourceName;
@ -169,46 +156,35 @@ void NetctlAdds::setDataBySource(const QString sourceName, const QVariantMap dat
bool needUpdate = (values[sourceName] != data[QString("value")].toString()); bool needUpdate = (values[sourceName] != data[QString("value")].toString());
values[sourceName] = data[QString("value")].toString(); values[sourceName] = data[QString("value")].toString();
if ((needUpdate) && (sourceName == QString("active"))) {
if (needUpdate) { if (values[sourceName] == QString("true"))
if (sourceName == QString("active")) { sendNotification(QString("Info"), i18n("Network status has been changed to active"));
emit(needToNotify(values[QString("active")] == QString("true"))); else
emit(needIconToBeUpdated(values[QString("active")])); sendNotification(QString("Info"), i18n("Network status has been changed to inactive"));
}
emit(needToBeUpdated());
emit(needMenuUpdate(values[QString("current")], values[QString("status")],
values[QString("active")] == QString("true")));
} }
}
if (needUpdate) emit(needToBeUpdated());
void NetctlAdds::setPattern(const QString _pattern)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Pattern" << _pattern;
pattern = _pattern;
} }
void NetctlAdds::sendNotification(const QString eventId, const QString message) void NetctlAdds::sendNotification(const QString eventId, const QString message)
{ {
// since it is a static method we need to identify is debug enabled again
QProcessEnvironment environment = QProcessEnvironment::systemEnvironment();
QString debugEnv = environment.value(QString("DEBUG"), QString("no"));
bool debugLocal = (debugEnv == QString("yes"));
if (debugLocal) qDebug() << PDEBUG;
if (debugLocal) qDebug() << PDEBUG << ":" << "Event" << eventId;
if (debugLocal) qDebug() << PDEBUG << ":" << "Message" << message;
KNotification *notification = KNotification::event(eventId, QString("Netctl ::: %1").arg(eventId), message); KNotification *notification = KNotification::event(eventId, QString("Netctl ::: %1").arg(eventId), message);
notification->setComponentName(QString("plasma-applet-org.kde.plasma.netctl")); notification->setComponentName(QString("plasma-applet-org.kde.plasma.netctl"));
} }
QString NetctlAdds::valueByKey(const QString key)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Key" << key;
return values[key];
}
// context menu // context menu
void NetctlAdds::enableProfileSlot(const bool useHelper, const QString cmd, const QString sudoCmd) const void NetctlAdds::enableProfileSlot(const bool useHelper, const QString cmd, const QString sudoCmd)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -221,75 +197,82 @@ void NetctlAdds::enableProfileSlot(const bool useHelper, const QString cmd, cons
sendNotification(QString("Info"), i18n("Set profile %1 enabled", values[QString("current")])); sendNotification(QString("Info"), i18n("Set profile %1 enabled", values[QString("current")]));
} }
if (useHelper) { if (useHelper) {
QVariantList args; QList<QVariant> args;
args.append(values[QString("current")]); args.append(values[QString("current")]);
sendDBusRequest(QString("Enable"), args); sendDBusRequest(QString("Enable"), args);
} else { } else {
runCmd(QString("%1 %2%3%4").arg(sudoCmd).arg(cmd).arg(enableStatus).arg(values[QString("current")])); QProcess command;
QString commandLine = QString("%1 %2%3%4").arg(sudoCmd).arg(cmd).arg(enableStatus).arg(values[QString("current")]);
command.startDetached(commandLine);
} }
} }
void NetctlAdds::restartProfileSlot(const bool useHelper, const QString cmd, const QString sudoCmd) const void NetctlAdds::restartProfileSlot(const bool useHelper, const QString cmd, const QString sudoCmd)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
sendNotification(QString("Info"), i18n("Restart profile %1", values[QString("current")])); sendNotification(QString("Info"), i18n("Restart profile %1", values[QString("current")]));
if (useHelper) { if (useHelper) {
QVariantList args; QList<QVariant> args;
args.append(values[QString("current")]); args.append(values[QString("current")]);
sendDBusRequest(QString("Restart"), args); sendDBusRequest(QString("Restart"), args);
} else { } else {
runCmd(QString("%1 %2 restart %3").arg(sudoCmd).arg(cmd).arg(values[QString("current")])); QProcess command;
QString commandLine = QString("%1 %2 restart %3").arg(sudoCmd).arg(cmd).arg(values[QString("current")]);
command.startDetached(commandLine);
} }
} }
void NetctlAdds::startProfileSlot(const bool useHelper, const QString cmd, const QString sudoCmd) const void NetctlAdds::startProfileSlot(const bool useHelper, const QString cmd, const QString sudoCmd)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
QStringList profiles = values[QString("profiles")].split(QChar(',')); QStringList profiles = values[QString("profiles")].split(QChar(','));
bool ok; bool ok;
QString profile = QInputDialog::getItem(nullptr, i18n("Select profile"), i18n("Profile:"), QString profile = QInputDialog::getItem(0, i18n("Select profile"), i18n("Profile:"),
profiles, 0, false, &ok); profiles, 0, false, &ok);
if (!ok || profile.isEmpty()) return; if (!ok || profile.isEmpty()) return;
sendNotification(QString("Info"), i18n("Start profile %1", profile)); sendNotification(QString("Info"), i18n("Start profile %1", profile));
if (useHelper) { if (useHelper) {
QVariantList args; QList<QVariant> args;
args.append(profile); args.append(profile);
if (values[QString("active")] == QString("true")) if (values[QString("active")] == QString("true"))
sendDBusRequest(QString("SwitchTo"), args); sendDBusRequest(QString("SwitchTo"), args);
else else
sendDBusRequest(QString("Start"), args); sendDBusRequest(QString("Start"), args);
} else { } else {
QProcess command;
QString commandLine = QString("%1 %2").arg(sudoCmd).arg(cmd); QString commandLine = QString("%1 %2").arg(sudoCmd).arg(cmd);
if (values[QString("active")] == QString("true")) if (values[QString("active")] == QString("true"))
commandLine += QString(" switch-to %1").arg(profile); commandLine += QString(" switch-to %1").arg(profile);
else else
commandLine += QString(" start %1").arg(profile); commandLine += QString(" start %1").arg(profile);
runCmd(commandLine); command.startDetached(commandLine);
} }
} }
void NetctlAdds::stopProfileSlot(const bool useHelper, const QString cmd, const QString sudoCmd) const void NetctlAdds::stopProfileSlot(const bool useHelper, const QString cmd, const QString sudoCmd)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
sendNotification(QString("Info"), i18n("Stop profile %1", values[QString("current")])); sendNotification(QString("Info"), i18n("Stop profile %1", values[QString("current")]));
if (useHelper) { if (useHelper) {
QVariantList args; QList<QVariant> args;
args.append(values[QString("current")]); args.append(values[QString("current")]);
sendDBusRequest(QString("Start"), args); sendDBusRequest(QString("Start"), args);
} else { } else {
runCmd(QString("%1 %2 stop %3").arg(sudoCmd).arg(cmd).arg(values[QString("current")])); QProcess command;
QString commandLine = QString("%1 %2 stop %3").arg(sudoCmd).arg(cmd).arg(values[QString("current")]);
command.startDetached(commandLine);
} }
} }
void NetctlAdds::stopAllProfilesSlot(const bool useHelper, const QString cmd, const QString sudoCmd) const void NetctlAdds::stopAllProfilesSlot(const bool useHelper, const QString cmd, const QString sudoCmd)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -297,45 +280,49 @@ void NetctlAdds::stopAllProfilesSlot(const bool useHelper, const QString cmd, co
if (useHelper) if (useHelper)
sendDBusRequest(QString("StopAll"), QList<QVariant>()); sendDBusRequest(QString("StopAll"), QList<QVariant>());
else { else {
runCmd(QString("%1 %2 stop-all").arg(sudoCmd).arg(cmd)); QProcess command;
QString commandLine = QString("%1 %2 stop-all").arg(sudoCmd).arg(cmd);
command.startDetached(commandLine);
} }
} }
void NetctlAdds::switchToProfileSlot(const bool useHelper, const QString cmd) const void NetctlAdds::switchToProfileSlot(const bool useHelper, const QString cmd)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
QStringList profiles = values[QString("profiles")].split(QChar(',')); QStringList profiles = values[QString("profiles")].split(QChar(','));
bool ok; bool ok;
QString profile = QInputDialog::getItem(nullptr, i18n("Select profile"), i18n("Profile:"), QString profile = QInputDialog::getItem(0, i18n("Select profile"), i18n("Profile:"),
profiles, 0, false, &ok); profiles, 0, false, &ok);
if (!ok || profile.isEmpty()) return; if (!ok || profile.isEmpty()) return;
sendNotification(QString("Info"), i18n("Switch to profile %1", profile)); sendNotification(QString("Info"), i18n("Switch to profile %1", profile));
if (useHelper) { if (useHelper) {
QVariantList args; QList<QVariant> args;
args.append(profile); args.append(profile);
sendDBusRequest(QString("autoStart"), args); sendDBusRequest(QString("autoStart"), args);
} else { } else {
runCmd(QString("%1 switch-to %2").arg(cmd).arg(profile)); QProcess command;
QString commandLine = QString("%1 switch-to %2").arg(cmd).arg(profile);
command.startDetached(commandLine);
} }
} }
QVariantMap NetctlAdds::readDataEngineConfiguration() const QMap<QString, QVariant> NetctlAdds::readDataEngineConfiguration()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
QVariantMap configuration; QMap<QString, QVariant> configuration;
QString fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, QString("plasma-dataengine-netctl.conf")); QString fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, QString("plasma-dataengine-netctl.conf"));
if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName; if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName;
QSettings settings(fileName, QSettings::IniFormat); QSettings settings(fileName, QSettings::IniFormat);
settings.beginGroup(QString("Netctl commands")); settings.beginGroup(QString("Netctl commands"));
configuration[QString("NETCTLCMD")] = settings.value(QString("NETCTLCMD"), QString("netctl")); configuration[QString("NETCTLCMD")] = settings.value(QString("NETCTLCMD"), QString("/usr/bin/netctl"));
configuration[QString("NETCTLAUTOCMD")] = settings.value(QString("NETCTLAUTOCMD"), QString("netctl-auto")); configuration[QString("NETCTLAUTOCMD")] = settings.value(QString("NETCTLAUTOCMD"), QString("/usr/bin/netctl-auto"));
settings.endGroup(); settings.endGroup();
settings.beginGroup(QString("External IP")); settings.beginGroup(QString("External IP"));
@ -349,7 +336,7 @@ QVariantMap NetctlAdds::readDataEngineConfiguration() const
} }
void NetctlAdds::writeDataEngineConfiguration(const QVariantMap configuration) const void NetctlAdds::writeDataEngineConfiguration(const QMap<QString, QVariant> configuration)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;

View File

@ -32,52 +32,43 @@ public:
NetctlAdds(QObject *parent = 0); NetctlAdds(QObject *parent = 0);
~NetctlAdds(); ~NetctlAdds();
Q_INVOKABLE bool checkHelperStatus() const; Q_INVOKABLE bool checkHelperStatus();
Q_INVOKABLE QString getAboutText(const QString type = QString("header")) const; Q_INVOKABLE QString getAboutText(const QString type = "header");
Q_INVOKABLE bool isDebugEnabled() const; Q_INVOKABLE bool isDebugEnabled();
Q_INVOKABLE void runCmd(const QString cmd) const; Q_INVOKABLE QString parsePattern(const QString pattern);
Q_INVOKABLE void setDataBySource(const QString sourceName, const QVariantMap data); Q_INVOKABLE void runCmd(const QString cmd);
Q_INVOKABLE void setPattern(const QString _pattern); Q_INVOKABLE void setDataBySource(const QString sourceName, const QMap<QString, QVariant> data);
Q_INVOKABLE static void sendNotification(const QString eventId, const QString message); Q_INVOKABLE static void sendNotification(const QString eventId, const QString message);
Q_INVOKABLE QString valueByKey(const QString key);
// context menu // context menu
Q_INVOKABLE void enableProfileSlot(const bool useHelper = true, Q_INVOKABLE void enableProfileSlot(const bool useHelper = true,
const QString cmd = QString("netctl"), const QString cmd = QString("/usr/bin/netctl"),
const QString sudoCmd = QString("")) const; const QString sudoCmd = QString(""));
Q_INVOKABLE void restartProfileSlot(const bool useHelper = true, Q_INVOKABLE void restartProfileSlot(const bool useHelper = true,
const QString cmd = QString("netctl"), const QString cmd = QString("/usr/bin/netctl"),
const QString sudoCmd = QString("")) const; const QString sudoCmd = QString(""));
Q_INVOKABLE void startProfileSlot(const bool useHelper = true, Q_INVOKABLE void startProfileSlot(const bool useHelper = true,
const QString cmd = QString("netctl"), const QString cmd = QString("/usr/bin/netctl"),
const QString sudoCmd = QString("")) const; const QString sudoCmd = QString(""));
Q_INVOKABLE void stopProfileSlot(const bool useHelper = true, Q_INVOKABLE void stopProfileSlot(const bool useHelper = true,
const QString cmd = QString("netctl"), const QString cmd = QString("/usr/bin/netctl"),
const QString sudoCmd = QString("")) const; const QString sudoCmd = QString(""));
Q_INVOKABLE void stopAllProfilesSlot(const bool useHelper = true, Q_INVOKABLE void stopAllProfilesSlot(const bool useHelper = true,
const QString cmd = QString("netctl"), const QString cmd = QString("/usr/bin/netctl"),
const QString sudoCmd = QString("")) const; const QString sudoCmd = QString(""));
Q_INVOKABLE void switchToProfileSlot(const bool useHelper = true, Q_INVOKABLE void switchToProfileSlot(const bool useHelper = true,
const QString cmd = QString("netctl-auto")) const; const QString cmd = QString("/usr/bin/netctl-auto"));
// dataengine // dataengine
Q_INVOKABLE QVariantMap readDataEngineConfiguration() const; Q_INVOKABLE QMap<QString, QVariant> readDataEngineConfiguration();
Q_INVOKABLE void writeDataEngineConfiguration(const QVariantMap configuration) const; Q_INVOKABLE void writeDataEngineConfiguration(const QMap<QString, QVariant> configuration);
signals: signals:
void needIconToBeUpdated(const QString newIcon) const; void needToBeUpdated();
void needMenuUpdate(const QString current, const QString status, const bool isActive) const;
void needTextToBeUpdated(const QString newText, const QString newToolTip) const;
void needToBeUpdated() const;
void needToNotify(const bool currentStatus) const;
private slots:
void notifyAboutStatusChanging(const bool currentStatus) const;
void parsePattern() const;
private: private:
bool debug = false; bool debug = false;
QVariantList sendDBusRequest(const QString cmd, QList<QVariant> sendDBusRequest(const QString cmd, const QList<QVariant> args = QList<QVariant>());
const QVariantList args = QVariantList()) const; QMap<QString, QString> values;
QString pattern;
QHash<QString, QString> values;
}; };

View File

@ -65,21 +65,6 @@
<translation>This software uses: %1</translation> <translation>This software uses: %1</translation>
</message> </message>
</context> </context>
<context>
<name>BondWidget</name>
<message>
<source>Bond settings</source>
<translation>Bond settings</translation>
</message>
<message>
<source>Mode</source>
<translation>Mode</translation>
</message>
<message>
<source>The bonding policy. See the kernel documentation on bonding for details</source>
<translation>The bonding policy. See the kernel documentation on bonding for details</translation>
</message>
</context>
<context> <context>
<name>BridgeWidget</name> <name>BridgeWidget</name>
<message> <message>
@ -205,10 +190,6 @@
<source>IP address does not match the standard</source> <source>IP address does not match the standard</source>
<translation>IP address does not match the standard</translation> <translation>IP address does not match the standard</translation>
</message> </message>
<message>
<source>Key is required for &apos;gre&apos; mode</source>
<translation>Key is required for &apos;gre&apos; mode</translation>
</message>
</context> </context>
<context> <context>
<name>EthernetWidget</name> <name>EthernetWidget</name>
@ -300,14 +281,6 @@
<source>Maximum time, in seconds, to wait for 802.1x authentication to succeed</source> <source>Maximum time, in seconds, to wait for 802.1x authentication to succeed</source>
<translation>Maximum time, in seconds, to wait for 802.1x authentication to succeed</translation> <translation>Maximum time, in seconds, to wait for 802.1x authentication to succeed</translation>
</message> </message>
<message>
<source>Priority</source>
<translation>Priority</translation>
</message>
<message>
<source>Priority level of the profile. In case of automatic profile selection, profiles are tried in decreasing order of priority</source>
<translation>Priority level of the profile. In case of automatic profile selection, profiles are tried in decreasing order of priority</translation>
</message>
</context> </context>
<context> <context>
<name>GeneralWidget</name> <name>GeneralWidget</name>
@ -403,14 +376,6 @@
<source>A description of the profile</source> <source>A description of the profile</source>
<translation>A description of the profile</translation> <translation>A description of the profile</translation>
</message> </message>
<message>
<source>Whether or not to exclude this profile from automatic profile selection</source>
<translation>Whether or not to exclude this profile from automatic profile selection</translation>
</message>
<message>
<source>Exclude auto</source>
<translation>Exclude auto</translation>
</message>
</context> </context>
<context> <context>
<name>IpWidget</name> <name>IpWidget</name>
@ -1554,30 +1519,6 @@ Should be according to standards</translation>
<source>Browse</source> <source>Browse</source>
<translation>Browse</translation> <translation>Browse</translation>
</message> </message>
<message>
<source>Select chat file</source>
<translation>Select chat file</translation>
</message>
<message>
<source>All (*.*)</source>
<translation>All (*.*)</translation>
</message>
<message>
<source>Init</source>
<translation>Init</translation>
</message>
<message>
<source>An initialization string sent to the modem before dialing</source>
<translation>An initialization string sent to the modem before dialing</translation>
</message>
<message>
<source>Chat script</source>
<translation>Chat script</translation>
</message>
<message>
<source>Path to a chat file</source>
<translation>Path to a chat file</translation>
</message>
</context> </context>
<context> <context>
<name>NetctlAutoWindow</name> <name>NetctlAutoWindow</name>
@ -2344,14 +2285,6 @@ Should be according to standards</translation>
<source>External editor</source> <source>External editor</source>
<translation>External editor</translation> <translation>External editor</translation>
</message> </message>
<message>
<source>Main tab autoupdate, sec</source>
<translation>Main tab autoupdate, sec</translation>
</message>
<message>
<source>WiFi tab autoupdate, sec</source>
<translation>WiFi tab autoupdate, sec</translation>
</message>
</context> </context>
<context> <context>
<name>TrayIcon</name> <name>TrayIcon</name>
@ -2526,14 +2459,6 @@ Should be according to standards</translation>
<source>The address of the remote end of the tunnel</source> <source>The address of the remote end of the tunnel</source>
<translation>The address of the remote end of the tunnel</translation> <translation>The address of the remote end of the tunnel</translation>
</message> </message>
<message>
<source>Key</source>
<translation>Key</translation>
</message>
<message>
<source>A key identifying an individual traffic flow within a tunnel</source>
<translation>A key identifying an individual traffic flow within a tunnel</translation>
</message>
</context> </context>
<context> <context>
<name>TuntapWidget</name> <name>TuntapWidget</name>
@ -2876,11 +2801,11 @@ Should be according to standards</translation>
</message> </message>
<message> <message>
<source>Whether or not to exclude this profile from automatic profile selection</source> <source>Whether or not to exclude this profile from automatic profile selection</source>
<translation type="vanished">Whether or not to exclude this profile from automatic profile selection</translation> <translation>Whether or not to exclude this profile from automatic profile selection</translation>
</message> </message>
<message> <message>
<source>Exclude auto</source> <source>Exclude auto</source>
<translation type="vanished">Exclude auto</translation> <translation>Exclude auto</translation>
</message> </message>
<message> <message>
<source>Frequency</source> <source>Frequency</source>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -65,21 +65,6 @@
<translation>Данное приложение использует: %1</translation> <translation>Данное приложение использует: %1</translation>
</message> </message>
</context> </context>
<context>
<name>BondWidget</name>
<message>
<source>Bond settings</source>
<translation>Настройки bond соединения</translation>
</message>
<message>
<source>Mode</source>
<translation>Режим</translation>
</message>
<message>
<source>The bonding policy. See the kernel documentation on bonding for details</source>
<translation>Политка соединения. Обратитесь к документации ядра для более подробной информации</translation>
</message>
</context>
<context> <context>
<name>BridgeWidget</name> <name>BridgeWidget</name>
<message> <message>
@ -205,10 +190,6 @@
<source>IP address does not match the standard</source> <source>IP address does not match the standard</source>
<translation>IP адрес не соответствует стандартам</translation> <translation>IP адрес не соответствует стандартам</translation>
</message> </message>
<message>
<source>Key is required for &apos;gre&apos; mode</source>
<translation>Необходимо указать ключ для &apos;gre&apos; режима</translation>
</message>
</context> </context>
<context> <context>
<name>EthernetWidget</name> <name>EthernetWidget</name>
@ -300,14 +281,6 @@
<source>Maximum time, in seconds, to wait for 802.1x authentication to succeed</source> <source>Maximum time, in seconds, to wait for 802.1x authentication to succeed</source>
<translation>Максимальное время в секундах для ожидания выполнения 802.1x авторизации</translation> <translation>Максимальное время в секундах для ожидания выполнения 802.1x авторизации</translation>
</message> </message>
<message>
<source>Priority</source>
<translation>Приоритет</translation>
</message>
<message>
<source>Priority level of the profile. In case of automatic profile selection, profiles are tried in decreasing order of priority</source>
<translation>Приоритет профиля. В случае автоматического выбора профиля, профили будут выбираться по уменьшению приоритета</translation>
</message>
</context> </context>
<context> <context>
<name>GeneralWidget</name> <name>GeneralWidget</name>
@ -403,14 +376,6 @@
<source>A description of the profile</source> <source>A description of the profile</source>
<translation>Описание профиля</translation> <translation>Описание профиля</translation>
</message> </message>
<message>
<source>Whether or not to exclude this profile from automatic profile selection</source>
<translation>Исключить ли профиль из автоматического выбора</translation>
</message>
<message>
<source>Exclude auto</source>
<translation>Исключить профиль</translation>
</message>
</context> </context>
<context> <context>
<name>IpWidget</name> <name>IpWidget</name>
@ -1553,30 +1518,6 @@ Should be according to standards</source>
<source>Browse</source> <source>Browse</source>
<translation>Обзор</translation> <translation>Обзор</translation>
</message> </message>
<message>
<source>Select chat file</source>
<translation>Выберете скрипт с настройками чата</translation>
</message>
<message>
<source>All (*.*)</source>
<translation>Все (*.*)</translation>
</message>
<message>
<source>Init</source>
<translation>Инициализация</translation>
</message>
<message>
<source>An initialization string sent to the modem before dialing</source>
<translation>Команда, которая будет послана при инициализации модема</translation>
</message>
<message>
<source>Chat script</source>
<translation>Скрипт</translation>
</message>
<message>
<source>Path to a chat file</source>
<translation>Путь к скрипту с настройками чата</translation>
</message>
</context> </context>
<context> <context>
<name>NetctlAutoWindow</name> <name>NetctlAutoWindow</name>
@ -2343,14 +2284,6 @@ Should be according to standards</source>
<source>External editor</source> <source>External editor</source>
<translation>Внешний редактор</translation> <translation>Внешний редактор</translation>
</message> </message>
<message>
<source>Main tab autoupdate, sec</source>
<translation>Интервал обновления основной вкладки, сек</translation>
</message>
<message>
<source>WiFi tab autoupdate, sec</source>
<translation>Интервал обновления WiFi вкладки, сек</translation>
</message>
</context> </context>
<context> <context>
<name>TrayIcon</name> <name>TrayIcon</name>
@ -2525,14 +2458,6 @@ Should be according to standards</source>
<source>The address of the remote end of the tunnel</source> <source>The address of the remote end of the tunnel</source>
<translation>Адрес удаленного конца туннеля</translation> <translation>Адрес удаленного конца туннеля</translation>
</message> </message>
<message>
<source>Key</source>
<translation>Ключ</translation>
</message>
<message>
<source>A key identifying an individual traffic flow within a tunnel</source>
<translation>Ключ, указывающий на отдельные потоки трафика в туннеле</translation>
</message>
</context> </context>
<context> <context>
<name>TuntapWidget</name> <name>TuntapWidget</name>
@ -2875,11 +2800,11 @@ Should be according to standards</source>
</message> </message>
<message> <message>
<source>Whether or not to exclude this profile from automatic profile selection</source> <source>Whether or not to exclude this profile from automatic profile selection</source>
<translation type="vanished">Исключить ли профиль из автоматического выбора</translation> <translation>Исключить ли профиль из автоматического выбора</translation>
</message> </message>
<message> <message>
<source>Exclude auto</source> <source>Exclude auto</source>
<translation type="vanished">Исключить профиль</translation> <translation>Исключить профиль</translation>
</message> </message>
<message> <message>
<source>Frequency</source> <source>Frequency</source>

View File

@ -133,7 +133,7 @@ void TestNetctl::test_getActiveProfile()
QStringList result = netctl->getActiveProfile(); QStringList result = netctl->getActiveProfile();
QStringList dbus; QStringList dbus;
if (helper) if (helper)
dbus = sendDBusRequest(QString("/netctl"), QString("netctlActiveProfile"))[0].toStringList(); dbus = sendDBusRequest(QString("/netctl"), QString("netctlActiveProfile"))[0].toString().split(QChar('|'));
netctl->startProfile(QString("netctlgui-test-dummy")); netctl->startProfile(QString("netctlgui-test-dummy"));
delete netctl; delete netctl;

View File

@ -12,7 +12,7 @@
#define DOCS_PATH "@CMAKE_INSTALL_PREFIX@/share/doc/netctl-gui/" #define DOCS_PATH "@CMAKE_INSTALL_PREFIX@/share/doc/netctl-gui/"
// links // links
#define HOMEPAGE "https://arcanis.me/projects/netctl-gui/" #define HOMEPAGE "http://arcanis.name/projects/netctl-gui/"
#define REPOSITORY "https://github.com/arcan1s/netctl-gui" #define REPOSITORY "https://github.com/arcan1s/netctl-gui"
#define BUGTRACKER "https://github.com/arcan1s/netctl-gui/issues" #define BUGTRACKER "https://github.com/arcan1s/netctl-gui/issues"
#define TRANSLATION "https://github.com/arcan1s/netctl-gui/issues/3" #define TRANSLATION "https://github.com/arcan1s/netctl-gui/issues/3"
@ -52,40 +52,4 @@
#define DBUS_INTERFACE_PATH "/interface" #define DBUS_INTERFACE_PATH "/interface"
#define DBUS_LIB_PATH "/netctl" #define DBUS_LIB_PATH "/netctl"
// defaul configuration
// [Common] section
#define LANGUAGE "@CFG_LANGUAGE@"
#define MAINUPDATE "@CFG_MAINUPDATE@"
#define WIFIUPDATE "@CFG_WIFIUPDATE@"
#define SYSTRAY "@CFG_SYSTRAY@"
#define CLOSETOTRAY "@CFG_CLOSETOTRAY@"
#define STARTTOTRAY "@CFG_STARTTOTRAY@"
#define SKIPCOMPONENTS "@CFG_SKIPCOMPONENTS@"
// [Helper] section
#define USE_HELPER "@CFG_USE_HELPER@"
#define FORCE_SUDO "@CFG_FORCE_SUDO@"
#define CLOSE_HELPER "@CFG_CLOSE_HELPER@"
#define HELPER_PATH "@CFG_HELPER_PATH@"
#define HELPER_SERVICE "@CFG_HELPER_SERVICE@"
// [netctl] section
#define SYSTEMCTL_PATH "@CFG_SYSTEMCTL_PATH@"
#define NETCTL_PATH "@CFG_NETCTL_PATH@"
#define NETCTLAUTO_PATH "@CFG_NETCTLAUTO_PATH@"
#define NETCTLAUTO_SERVICE "@CFG_NETCTLAUTO_SERVICE@"
#define PROFILE_DIR "@CFG_PROFILE_DIR@"
// [sudo] section
#define SUDO_PATH "@CFG_SUDO_PATH@"
// [wpa_supplicant] section
#define WPASUP_PATH "@CFG_WPASUP_PATH@"
#define WPACLI_PATH "@CFG_WPACLI_PATH@"
#define PID_FILE "@CFG_PID_FILE@"
#define WPA_DRIVERS "@CFG_WPA_DRIVERS@"
#define CTRL_DIR "@CFG_CTRL_DIR@"
#define CTRL_GROUP "@CFG_CTRL_GROUP@"
// [Other] section
#define EDITOR_PATH "@CFG_EDITOR_PATH@"
#define IFACE_DIR "@CFG_IFACE_DIR@"
#define RFKILL_DIR "@CFG_RFKILL_DIR@"
#define PREFERED_IFACE "@CFG_PREFERED_IFACE@"
#endif /* VERSION_H */ #endif /* VERSION_H */