diff --git a/.gitignore b/.gitignore index 33a027a..a8e4dd9 100644 --- a/.gitignore +++ b/.gitignore @@ -27,7 +27,3 @@ usr/ # temporary bckps *~ - -# kdevelop files -.kdev4 -*.kdev4 diff --git a/arch/PKGBUILD b/arch/PKGBUILD index c625277..637700a 100644 --- a/arch/PKGBUILD +++ b/arch/PKGBUILD @@ -9,7 +9,7 @@ pkgdesc="Qt4/Qt5 GUI for netctl. Also provides a widget for KDE" arch=('i686' 'x86_64') url="http://arcanis.name/projects/netctl-gui" license=('GPL3') -makedepends=('automoc4' '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") md5sums=('172fff4b59c15c991b016db35971eca1') diff --git a/create_archive.sh b/create_archive.sh index a693f57..32a88cd 100755 --- a/create_archive.sh +++ b/create_archive.sh @@ -1,12 +1,14 @@ #!/bin/bash -ARCHIVE="netctl-gui" SRCDIR="sources" +MAJOR=$(grep -m1 PROJECT_VERSION_MAJOR ${SRCDIR}/CMakeLists.txt | awk '{print $3}' | sed 's/.$//g') +MINOR=$(grep -m1 PROJECT_VERSION_MINOR ${SRCDIR}/CMakeLists.txt | awk '{print $3}' | sed 's/.$//g') +PATCH=$(grep -m1 PROJECT_VERSION_PATCH ${SRCDIR}/CMakeLists.txt | awk '{print $3}' | sed 's/.$//g') +VERSION="${MAJOR}.${MINOR}.${PATCH}" + +ARCHIVE="netctl-gui" FILES="AUTHORS CHANGELOG COPYING README.md" -IGNORELIST="build *.qm *.cppcheck .git*" -VERSION=$(grep -m1 PROJECT_VERSION_MAJOR sources/CMakeLists.txt | awk '{print $3}' | cut -c 1).\ -$(grep -m1 PROJECT_VERSION_MINOR sources/CMakeLists.txt | awk '{print $3}' | cut -c 1).\ -$(grep -m1 PROJECT_VERSION_PATCH sources/CMakeLists.txt | awk '{print $3}' | cut -c 1) +IGNORELIST="build *.qm *.cppcheck .git* .kdev4 sources.kdev4" # update submodules git submodule update --init --recursive # create archive @@ -18,6 +20,7 @@ for FILE in ${IGNORELIST[*]}; do find "${ARCHIVE}" -name "${FILE}" -exec rm -rf tar cJf "${ARCHIVE}-${VERSION}-src.tar.xz" "${ARCHIVE}" ln -sf "../${ARCHIVE}-${VERSION}-src.tar.xz" arch rm -rf "${ARCHIVE}" + # update md5sum MD5SUMS=$(md5sum ${ARCHIVE}-${VERSION}-src.tar.xz | awk '{print $1}') sed -i "/md5sums=('[0-9A-Fa-f]*/s/[^'][^)]*/md5sums=('${MD5SUMS}'/" arch/PKGBUILD{,-qt4} diff --git a/sources/.kdev4/sources.kdev4 b/sources/.kdev4/sources.kdev4 new file mode 100644 index 0000000..587b19d --- /dev/null +++ b/sources/.kdev4/sources.kdev4 @@ -0,0 +1,23 @@ +[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=Debug +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 diff --git a/sources/dataengine/netctl.cpp b/sources/dataengine/netctl.cpp index f8e0769..4561782 100644 --- a/sources/dataengine/netctl.cpp +++ b/sources/dataengine/netctl.cpp @@ -47,10 +47,7 @@ Netctl::Netctl(QObject *parent, const QVariantList &args) // debug QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); QString debugEnv = environment.value(QString("DEBUG"), QString("no")); - if (debugEnv == QString("yes")) - debug = true; - else - debug = false; + debug = (debugEnv == QString("yes")); setMinimumPollingInterval(333); readConfiguration(); @@ -73,6 +70,7 @@ QStringList Netctl::sources() const sources.append(QString("current")); sources.append(QString("extip4")); sources.append(QString("extip6")); + sources.append(QString("info")); sources.append(QString("interfaces")); sources.append(QString("intip4")); sources.append(QString("intip6")); @@ -96,18 +94,18 @@ void Netctl::readConfiguration() #endif /* BUILD_KDE4 */ if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName; QSettings settings(fileName, QSettings::IniFormat); + settings.beginGroup(QString("Netctl commands")); configuration[QString("NETCTLCMD")] = settings.value(QString("NETCTLCMD"), QString("/usr/bin/netctl")).toString(); configuration[QString("NETCTLAUTOCMD")] = settings.value(QString("NETCTLAUTOCMD"), QString("/usr/bin/netctl-auto")).toString(); settings.endGroup(); + settings.beginGroup(QString("External IP")); configuration[QString("EXTIP4")] = settings.value(QString("EXTIP4"), QString("false")).toString(); configuration[QString("EXTIP4CMD")] = settings.value(QString("EXTIP4CMD"), QString("curl ip4.telize.com")).toString(); configuration[QString("EXTIP6")] = settings.value(QString("EXTIP6"), QString("false")).toString(); configuration[QString("EXTIP6CMD")] = settings.value(QString("EXTIP6CMD"), QString("curl ip6.telize.com")).toString(); settings.endGroup(); - - return; } @@ -138,9 +136,10 @@ QStringList Netctl::getCurrentProfile(const QString cmdNetctl, const QString cmd QStringList currentProfile; QString cmdOutput = QTextCodec::codecForMib(106)->toUnicode(process.output); QStringList profileList = cmdOutput.split(QChar('\n'), QString::SkipEmptyParts); - for (int i=0; i configuration; void readConfiguration(); }; diff --git a/sources/gui/src/errorwindow.cpp b/sources/gui/src/errorwindow.cpp index c7032cd..8a9f2a6 100644 --- a/sources/gui/src/errorwindow.cpp +++ b/sources/gui/src/errorwindow.cpp @@ -196,5 +196,4 @@ void ErrorWindow::showWindow(const int mess, const QString sender, const QString layout->addItem(horizontalSpacer, layout->rowCount(), 0, 1, layout->columnCount()); messageBox.exec(); - return; } diff --git a/sources/gui/src/mainprivateslots.cpp b/sources/gui/src/mainprivateslots.cpp index 566e624..38abb66 100644 --- a/sources/gui/src/mainprivateslots.cpp +++ b/sources/gui/src/mainprivateslots.cpp @@ -186,8 +186,11 @@ void MainWindow::updateToolBars() void MainWindow::updateMainTab() { if (debug) qDebug() << PDEBUG; - if (!checkExternalApps(QString("netctl"))) - return errorWin->showWindow(1, QString(PDEBUG)); + if (!checkExternalApps(QString("netctl"))) { + errorWin->showWindow(1, QString(PDEBUG)); + emit(needToBeConfigured()); + return; + } ui->tabWidget->setDisabled(true); QList profiles; @@ -281,8 +284,11 @@ void MainWindow::updateWifiTab() { if (debug) qDebug() << PDEBUG; wifiTabSetEnabled(checkExternalApps(QString("wpasup"))); - if (!checkExternalApps(QString("wpasup"))) - return errorWin->showWindow(1, QString(PDEBUG)); + if (!checkExternalApps(QString("wpasup"))) { + errorWin->showWindow(1, QString(PDEBUG)); + emit(needToBeConfigured()); + return; + } ui->tabWidget->setDisabled(true); QList scanResults; @@ -436,8 +442,11 @@ void MainWindow::mainTabEditProfile() void MainWindow::mainTabEnableProfile() { if (debug) qDebug() << PDEBUG; - if (!checkExternalApps(QString("netctl"))) - return errorWin->showWindow(1, QString(PDEBUG)); + if (!checkExternalApps(QString("netctl"))) { + errorWin->showWindow(1, QString(PDEBUG)); + emit(needToBeConfigured()); + return; + } if (ui->tableWidget_main->currentItem() == 0) return; ui->tabWidget->setDisabled(true); @@ -493,8 +502,11 @@ void MainWindow::mainTabRemoveProfile() void MainWindow::mainTabRestartProfile() { if (debug) qDebug() << PDEBUG; - if (!checkExternalApps(QString("netctl"))) - return errorWin->showWindow(1, QString(PDEBUG)); + if (!checkExternalApps(QString("netctl"))) { + errorWin->showWindow(1, QString(PDEBUG)); + emit(needToBeConfigured()); + return; + } if (ui->tableWidget_main->currentItem() == 0) return; ui->tabWidget->setDisabled(true); @@ -512,8 +524,11 @@ void MainWindow::mainTabRestartProfile() void MainWindow::mainTabStartProfile() { if (debug) qDebug() << PDEBUG; - if (!checkExternalApps(QString("netctl"))) - return errorWin->showWindow(1, QString(PDEBUG)); + if (!checkExternalApps(QString("netctl"))) { + errorWin->showWindow(1, QString(PDEBUG)); + emit(needToBeConfigured()); + return; + } if (ui->tableWidget_main->currentItem() == 0) return; ui->tabWidget->setDisabled(true); @@ -532,8 +547,11 @@ void MainWindow::mainTabStartProfile() void MainWindow::mainTabStopAllProfiles() { if (debug) qDebug() << PDEBUG; - if (!checkExternalApps(QString("netctl"))) - return errorWin->showWindow(1, QString(PDEBUG)); + if (!checkExternalApps(QString("netctl"))) { + errorWin->showWindow(1, QString(PDEBUG)); + emit(needToBeConfigured()); + return; + } ui->tabWidget->setDisabled(true); bool status; @@ -555,8 +573,11 @@ void MainWindow::mainTabStopAllProfiles() void MainWindow::mainTabSwitchToProfile() { if (debug) qDebug() << PDEBUG; - if (!checkExternalApps(QString("netctl"))) - return errorWin->showWindow(1, QString(PDEBUG)); + if (!checkExternalApps(QString("netctl"))) { + errorWin->showWindow(1, QString(PDEBUG)); + emit(needToBeConfigured()); + return; + } if (ui->tableWidget_main->currentItem() == 0) return; ui->tabWidget->setDisabled(true); @@ -1056,8 +1077,11 @@ void MainWindow::wifiTabSetEnabled(const bool state) void MainWindow::wifiTabStart() { if (debug) qDebug() << PDEBUG; - if (!checkExternalApps(QString("wpasup"))) - return errorWin->showWindow(1, QString(PDEBUG)); + if (!checkExternalApps(QString("wpasup"))) { + errorWin->showWindow(1, QString(PDEBUG)); + emit(needToBeConfigured()); + return; + } if (ui->tableWidget_wifi->currentItem() == 0) return; ui->tabWidget->setDisabled(true); diff --git a/sources/gui/src/mainpublicslots.cpp b/sources/gui/src/mainpublicslots.cpp index 26231fb..58f7bf5 100644 --- a/sources/gui/src/mainpublicslots.cpp +++ b/sources/gui/src/mainpublicslots.cpp @@ -268,6 +268,7 @@ bool MainWindow::forceStartHelper() if (debug) qDebug() << PDEBUG; if (!checkExternalApps(QString("helper"))) { errorWin->showWindow(1, QString(PDEBUG)); + emit(needToBeConfigured()); return false; } diff --git a/sources/gui/src/mainwindow.cpp b/sources/gui/src/mainwindow.cpp index 0703ead..3173ad6 100644 --- a/sources/gui/src/mainwindow.cpp +++ b/sources/gui/src/mainwindow.cpp @@ -278,18 +278,23 @@ bool MainWindow::checkExternalApps(const QString apps = QString("all")) if (configuration[QString("SKIPCOMPONENTS")] == QString("true")) return true; QStringList cmd; cmd.append("which"); - cmd.append(configuration[QString("SUDO_PATH")]); if ((apps == QString("helper")) || (apps == QString("all"))) { cmd.append(configuration[QString("HELPER_PATH")]); } if ((apps == QString("netctl")) || (apps == QString("all"))) { cmd.append(configuration[QString("NETCTL_PATH")]); cmd.append(configuration[QString("NETCTLAUTO_PATH")]); + cmd.append(configuration[QString("SUDO_PATH")]); + } + if ((apps == QString("sudo")) || (apps == QString("all"))) { + cmd.append(configuration[QString("SUDO_PATH")]); } if ((apps == QString("systemctl")) || (apps == QString("all"))) { cmd.append(configuration[QString("SYSTEMCTL_PATH")]); + cmd.append(configuration[QString("SUDO_PATH")]); } if ((apps == QString("wpasup")) || (apps == QString("all"))) { + cmd.append(configuration[QString("SUDO_PATH")]); cmd.append(configuration[QString("WPACLI_PATH")]); cmd.append(configuration[QString("WPASUP_PATH")]); } @@ -349,6 +354,7 @@ void MainWindow::createActions() connect(ui->pushButton_menu, SIGNAL(clicked(bool)), this, SLOT(updateToolBars())); connect(ui->pushButton_action, SIGNAL(clicked(bool)), this, SLOT(updateToolBars())); connect(ui->pushButton_help, SIGNAL(clicked(bool)), this, SLOT(updateToolBars())); + connect(this, SIGNAL(needToBeConfigured()), this, SLOT(showSettingsWindow())); // main tab events connect(ui->pushButton_netctlAuto, SIGNAL(clicked(bool)), this, SLOT(showNetctlAutoWindow())); diff --git a/sources/gui/src/mainwindow.h b/sources/gui/src/mainwindow.h index b2a7d7e..9aad4d1 100644 --- a/sources/gui/src/mainwindow.h +++ b/sources/gui/src/mainwindow.h @@ -99,6 +99,9 @@ public slots: void connectToUnknownEssid(const QString passwd); void setHiddenName(const QString name); +signals: + void needToBeConfigured(); + private slots: void reportABug(); // menu update slots diff --git a/sources/plasmoid-kde4/netctl.cpp b/sources/plasmoid-kde4/netctl.cpp index 76cb401..0cbfd61 100644 --- a/sources/plasmoid-kde4/netctl.cpp +++ b/sources/plasmoid-kde4/netctl.cpp @@ -68,10 +68,7 @@ Netctl::Netctl(QObject *parent, const QVariantList &args) // debug QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); QString debugEnv = environment.value(QString("DEBUG"), QString("no")); - if (debugEnv == QString("yes")) - debug = true; - else - debug = false; + debug = (debugEnv == QString("yes")); setBackgroundHints(DefaultBackground); setAspectRatioMode(Plasma::IgnoreAspectRatio); diff --git a/sources/plasmoid-kf5/CMakeLists.txt b/sources/plasmoid-kf5/CMakeLists.txt index 085d0a9..a5d1f1a 100644 --- a/sources/plasmoid-kf5/CMakeLists.txt +++ b/sources/plasmoid-kf5/CMakeLists.txt @@ -2,10 +2,13 @@ set (SUBPROJECT plasma_applet_netctl) message (STATUS "Subproject ${SUBPROJECT}") +# prepare +configure_file (metadata.desktop ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.desktop) + find_package (ECM 0.0.12 REQUIRED NO_MODULE) set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) -find_package (Qt5 REQUIRED COMPONENTS Core DBus Qml Quick) +find_package (Qt5 REQUIRED COMPONENTS Core DBus Qml) find_package (KF5 REQUIRED COMPONENTS I18n Notifications Plasma) include (KDEInstallDirs) diff --git a/sources/plasmoid-kf5/package/metadata.desktop b/sources/plasmoid-kf5/metadata.desktop similarity index 100% rename from sources/plasmoid-kf5/package/metadata.desktop rename to sources/plasmoid-kf5/metadata.desktop diff --git a/sources/plasmoid-kf5/package/contents/ui/main.qml b/sources/plasmoid-kf5/package/contents/ui/main.qml index 98c8257..58ad5d3 100644 --- a/sources/plasmoid-kf5/package/contents/ui/main.qml +++ b/sources/plasmoid-kf5/package/contents/ui/main.qml @@ -46,26 +46,13 @@ Item { // external property variant iconPath: { "true": plasmoid.configuration.activeIconPath, - "false": plasmoid.configuration.inactiveIconPath + "false": plasmoid.configuration.inactiveIconPath, + "N\\A": plasmoid.configuration.inactiveIconPath } - property variant info: { - "active": "false", - "current": "N\\A", - "extip4": "127.0.0.1", - "extip6": "::1", - "info": "N\\A", - "intip4": "127.0.0.1", - "intip6": "::1", - "interfaces": "lo", - "profiles": "", - "status": "N\\A" - } - property string pattern: plasmoid.configuration.textPattern - property bool status: false property string sudoPath: plasmoid.configuration.useSudo ? plasmoid.configuration.sudoPath : "" // signals signal needUpdate - signal netctlStateChanged + signal needMenuUpdate // init Plasmoid.icon: iconPath["false"] @@ -76,27 +63,14 @@ Item { PlasmaCore.DataSource { id: mainData engine: "netctl" - connectedSources: ["active", "current", "extip4", "extip6", "interfaces", "intip4", "intip6", "profiles", "status"] + connectedSources: ["active", "current", "extip4", "extip6", "info", + "interfaces", "intip4", "intip6", "profiles", "status"] interval: plasmoid.configuration.autoUpdateInterval onNewData: { if (debug) console.log("[main::onNewData] : Update source " + sourceName) - var needToBeUpdated = false - if (data.value == "N\\A") return - if (info[sourceName] != data.value) needToBeUpdated = true - if (sourceName == "active") { - if (info[sourceName] != data.value) - // inverterd status - NetctlAdds.sendNotification("Info", i18n("Network status has been changed to '%1'", - status ? i18n("inactive") : i18n("active"))) - status = data.value == "true" - } else if (sourceName == "current") { - info["info"] = NetctlAdds.getInfo(data.value, info["status"]) - } - // update - info[sourceName] = data.value - if (needToBeUpdated) needUpdate() + NetctlAdds.setDataBySource(sourceName, data) } } @@ -133,22 +107,25 @@ Item { plasmoid.setAction("switchToProfile", i18n("Switch to profile")) plasmoid.setAction("restartProfile", i18n("Restart profile"), "stock-refresh") plasmoid.setAction("enableProfile", i18n("Enable profile")) - plasmoid.setAction("startWifi", i18n("Show WiFi menu"), "image://netctl/wifi.png") + plasmoid.setAction("startWifi", i18n("Show WiFi menu"), "netctl-gui-wifi") // helper if (plasmoid.configuration.useHelper) { NetctlAdds.runCmd(plasmoid.configuration.helperPath) plasmoid.configuration.useHelper = NetctlAdds.checkHelperStatus() } + + NetctlAdds.needToBeUpdated.connect(needUpdate) } onNeedUpdate: { if (debug) console.log("[main::onNeedUpdate]") - icon.source = iconPath[info["active"]] - Plasmoid.icon = iconPath[info["active"]] - text.text = NetctlAdds.parsePattern(pattern, info) - Plasmoid.toolTipSubText = info["info"] - netctlStateChanged() + var iconStatus = NetctlAdds.valueByKey("active") + 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 @@ -160,7 +137,7 @@ Item { } - onNetctlStateChanged: { + onNeedMenuUpdate: { if (debug) console.log("[main::onNetctlStateChanged]") var titleAction = plasmoid.action("titleAction") @@ -172,10 +149,14 @@ Item { var enableAction = plasmoid.action("enableProfile") var wifiAction = plasmoid.action("startWifi") - titleAction.iconSource = plasmoid.icon - titleAction.text = info["current"] + " " + info["status"] + var current = NetctlAdds.valueByKey("current") + var status = NetctlAdds.valueByKey("active") == "true" + var stringStatus = NetctlAdds.valueByKey("status") - if (info["status"] == "(netctl-auto)") { + titleAction.iconSource = plasmoid.icon + titleAction.text = current + " " + stringStatus + + if (stringStatus == "(netctl-auto)") { startAction.visible = false stopAction.visible = false stopAllAction.visible = false @@ -183,7 +164,7 @@ Item { restartAction.visible = false enableAction.visible = false } else { - if (info["current"].indexOf("|") > -1) { + if (current.indexOf("|") > -1) { startAction.visible = true stopAction.visible = false stopAllAction.visible = true @@ -200,12 +181,12 @@ Item { } if (status) { startAction.text = i18n("Start another profile") - stopAction.text = i18n("Stop %1", info["current"]) - restartAction.text = i18n("Restart %1", info["current"]) - if (info["status"].indexOf("enabled") > -1) - enableAction.text = i18n("Disable %1", info["current"]) + stopAction.text = i18n("Stop %1", current) + restartAction.text = i18n("Restart %1", current) + if (stringStatus.indexOf("enabled") > -1) + enableAction.text = i18n("Disable %1", current) else - enableAction.text = i18n("Enable %1", info["current"]) + enableAction.text = i18n("Enable %1", current) } else startAction.text = i18n("Start profile") } @@ -222,8 +203,7 @@ Item { function action_startProfile() { if (debug) console.log("[main::action_startProfile]") - NetctlAdds.startProfileSlot(info["profiles"].split(","), status, - plasmoid.configuration.useHelper, + NetctlAdds.startProfileSlot(plasmoid.configuration.useHelper, plasmoid.configuration.netctlPath, sudoPath) } @@ -231,7 +211,7 @@ Item { function action_stopProfile() { if (debug) console.log("[main::action_stopProfile]") - NetctlAdds.stopProfileSlot(info, plasmoid.configuration.useHelper, + NetctlAdds.stopProfileSlot(plasmoid.configuration.useHelper, plasmoid.configuration.netctlPath, sudoPath) } @@ -247,15 +227,14 @@ Item { function action_switchToProfile() { if (debug) console.log("[main::action_switchToProfile]") - NetctlAdds.switchToProfileSlot(info["profiles"].split(","), - plasmoid.configuration.useHelper, + NetctlAdds.switchToProfileSlot(plasmoid.configuration.useHelper, plasmoid.configuration.netctlAutoPath) } function action_restartProfile() { if (debug) console.log("[main::action_restartProfile]") - NetctlAdds.restartProfileSlot(info, plasmoid.configuration.useHelper, + NetctlAdds.restartProfileSlot(plasmoid.configuration.useHelper, plasmoid.configuration.netctlPath, sudoPath) } @@ -263,7 +242,7 @@ Item { function action_enableProfile() { if (debug) console.log("[main::action_enableProfile]") - NetctlAdds.enableProfileSlot(info, plasmoid.configuration.useHelper, + NetctlAdds.enableProfileSlot(plasmoid.configuration.useHelper, plasmoid.configuration.netctlPath, sudoPath) } diff --git a/sources/plasmoid-kf5/plugin/CMakeLists.txt b/sources/plasmoid-kf5/plugin/CMakeLists.txt index 162994d..79265b2 100644 --- a/sources/plasmoid-kf5/plugin/CMakeLists.txt +++ b/sources/plasmoid-kf5/plugin/CMakeLists.txt @@ -3,12 +3,10 @@ set (PLUGIN_NAME netctlplugin) add_definitions (${Qt5Core_DEFINITIONS} ${Qt5DBus_DEFINITIONS} ${Qt5Qml_DEFINITIONS}) set (Qt_INCLUDE ${Qt5Core_INCLUDE_DIRS} ${Qt5DBus_INCLUDE_DIRS} - ${Qt5Qml_INCLUDE_DIRS} - ${Qt5Quick_INCLUDE_DIRS}) + ${Qt5Qml_INCLUDE_DIRS}) set (Qt_LIBRARIES ${Qt5Core_LIBRARIES} ${Qt5DBus_LIBRARIES} - ${Qt5Qml_LIBRARIES} - ${Qt5Quick_LIBRARIES}) + ${Qt5Qml_LIBRARIES}) set (Kf5_INCLUDE ${I18n_INCLUDE_DIR} ${Notifications_INCLUDE_DIR}) set (Kf5_LIBRARIES KF5::I18n @@ -24,10 +22,8 @@ include_directories (${CMAKE_SOURCE_DIR} file (GLOB SUBPROJECT_SOURCE *.cpp) file (GLOB SUBPROJECT_NOTIFY *.notifyrc) -set (RESOURCES ${PROJECT_RESOURCE_DIR}/resources-plasmoid.qrc) -qt5_add_resources (QRC_SOURCES ${RESOURCES}) -add_library (${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE} ${QRC_SOURCES}) +add_library (${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE}) target_link_libraries (${PLUGIN_NAME} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) install (TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/netctl) diff --git a/sources/plasmoid-kf5/plugin/netctl.cpp b/sources/plasmoid-kf5/plugin/netctl.cpp index 5e0963d..e6c75f6 100644 --- a/sources/plasmoid-kf5/plugin/netctl.cpp +++ b/sources/plasmoid-kf5/plugin/netctl.cpp @@ -30,14 +30,6 @@ static QObject *netctl_singletontype_provider(QQmlEngine *engine, QJSEngine *scr } -void NetctlPlugin::initializeEngine(QQmlEngine *engine, const char *uri) -{ - Q_UNUSED(uri); - - engine->addImageProvider("netctl", new NetctlAddsIconProvider()); -} - - void NetctlPlugin::registerTypes(const char *uri) { Q_ASSERT(uri == QLatin1String("org.kde.plasma.private.netctl")); diff --git a/sources/plasmoid-kf5/plugin/netctl.h b/sources/plasmoid-kf5/plugin/netctl.h index 7e25a58..a77269e 100644 --- a/sources/plasmoid-kf5/plugin/netctl.h +++ b/sources/plasmoid-kf5/plugin/netctl.h @@ -30,7 +30,6 @@ class NetctlPlugin : public QQmlExtensionPlugin Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") public: - void initializeEngine(QQmlEngine *engine, const char *uri); void registerTypes(const char *uri); }; diff --git a/sources/plasmoid-kf5/plugin/netctladds.cpp b/sources/plasmoid-kf5/plugin/netctladds.cpp index 0a650a8..ed6aa09 100644 --- a/sources/plasmoid-kf5/plugin/netctladds.cpp +++ b/sources/plasmoid-kf5/plugin/netctladds.cpp @@ -32,21 +32,6 @@ #include "version.h" -NetctlAddsIconProvider::NetctlAddsIconProvider() - : QQuickImageProvider(QQmlImageProviderBase::Pixmap) -{ -} - - -QPixmap NetctlAddsIconProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) -{ - Q_UNUSED(size); - Q_UNUSED(requestedSize); - - return QPixmap(QString("qrc:/") + id); -} - - NetctlAdds::NetctlAdds(QObject *parent) : QObject(parent) { @@ -127,22 +112,6 @@ QString NetctlAdds::getAboutText(const QString type) } -QString NetctlAdds::getInfo(const QString current, const QString status) -{ - if (debug) qDebug() << PDEBUG; - if (debug) qDebug() << PDEBUG << ":" << "Current profiles" << current; - if (debug) qDebug() << PDEBUG << ":" << "Statuses" << status; - - QStringList profiles; - for (int i=0; i dict) +QString NetctlAdds::parsePattern(const QString pattern) { if (debug) qDebug() << PDEBUG; - if (debug) qDebug() << PDEBUG << ":" << "Dictionary" << dict; QString parsed = pattern; - for (int i=0; i")); @@ -178,67 +146,88 @@ void NetctlAdds::runCmd(const QString cmd) } -void NetctlAdds::sendNotification(const QString eventId, const QString message) +void NetctlAdds::setDataBySource(const QString sourceName, const QMap data) { if (debug) qDebug() << PDEBUG; - if (debug) qDebug() << PDEBUG << ":" << "Event" << eventId; - if (debug) qDebug() << PDEBUG << ":" << "Message" << message; + if (debug) qDebug() << PDEBUG << ":" << "Source" << sourceName; + if (debug) qDebug() << PDEBUG << ":" << "Data" << data; + bool needUpdate = (values[sourceName] != data[QString("value")].toString()); + values[sourceName] = data[QString("value")].toString(); + if ((needUpdate) && (sourceName == QString("active"))) { + if (values[sourceName] == QString("true")) + sendNotification(QString("Info"), i18n("Network status has been changed to active")); + else + sendNotification(QString("Info"), i18n("Network status has been changed to inactive")); + } + + if (needUpdate) emit(needToBeUpdated()); +} + + +void NetctlAdds::sendNotification(const QString eventId, const QString message) +{ KNotification *notification = KNotification::event(eventId, QString("Netctl ::: ") + eventId, message); 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 -void NetctlAdds::enableProfileSlot(const QMap dict, const bool useHelper, - const QString cmd, const QString sudoCmd) +void NetctlAdds::enableProfileSlot(const bool useHelper, const QString cmd, const QString sudoCmd) { if (debug) qDebug() << PDEBUG; QString enableStatus = QString(""); - if (dict[QString("status")].toString().contains(QString("enabled"))) { + if (values[QString("status")].contains(QString("enabled"))) { enableStatus = QString(" disable "); - sendNotification(QString("Info"), i18n("Set profile %1 disabled", dict[QString("current")].toString())); + sendNotification(QString("Info"), i18n("Set profile %1 disabled", values[QString("current")])); } else { enableStatus = QString(" enable "); - sendNotification(QString("Info"), i18n("Set profile %1 enabled", dict[QString("current")].toString())); + sendNotification(QString("Info"), i18n("Set profile %1 enabled", values[QString("current")])); } if (useHelper) { QList args; - args.append(dict[QString("current")].toString()); + args.append(values[QString("current")]); sendDBusRequest(QString("Enable"), args); } else { QProcess command; - QString commandLine = sudoCmd + QString(" ") + cmd + enableStatus + dict[QString("current")].toString(); + QString commandLine = sudoCmd + QString(" ") + cmd + enableStatus + values[QString("current")]; command.startDetached(commandLine); } } -void NetctlAdds::restartProfileSlot(const QMap dict, const bool useHelper, - const QString cmd, const QString sudoCmd) +void NetctlAdds::restartProfileSlot(const bool useHelper, const QString cmd, const QString sudoCmd) { if (debug) qDebug() << PDEBUG; - sendNotification(QString("Info"), i18n("Restart profile %1", dict[QString("current")].toString())); + sendNotification(QString("Info"), i18n("Restart profile %1", values[QString("current")])); if (useHelper) { QList args; - args.append(dict[QString("current")].toString()); + args.append(values[QString("current")]); sendDBusRequest(QString("Restart"), args); } else { QProcess command; - QString commandLine = sudoCmd + QString(" ") + cmd + QString(" restart ") + dict[QString("current")].toString(); + QString commandLine = sudoCmd + QString(" ") + cmd + QString(" restart ") + values[QString("current")]; command.startDetached(commandLine); } } -void NetctlAdds::startProfileSlot(const QStringList profiles, const bool status, - const bool useHelper, const QString cmd, const QString sudoCmd) +void NetctlAdds::startProfileSlot(const bool useHelper, const QString cmd, const QString sudoCmd) { if (debug) qDebug() << PDEBUG; - if (debug) qDebug() << PDEBUG << ":" << "Profiles" << profiles; + QStringList profiles = values[QString("profiles")].split(QChar(',')); bool ok; QString profile = QInputDialog::getItem(0, i18n("Select profile"), i18n("Profile:"), profiles, 0, false, &ok); @@ -248,14 +237,14 @@ void NetctlAdds::startProfileSlot(const QStringList profiles, const bool status, if (useHelper) { QList args; args.append(profile); - if (status) + if (values[QString("active")] == QString("true")) sendDBusRequest(QString("SwitchTo"), args); else sendDBusRequest(QString("Start"), args); } else { QProcess command; QString commandLine = sudoCmd + QString(" ") + cmd; - if (status) + if (values[QString("active")] == QString("true")) commandLine += QString(" switch-to ") + profile; else commandLine += QString(" start ") + profile; @@ -264,19 +253,18 @@ void NetctlAdds::startProfileSlot(const QStringList profiles, const bool status, } -void NetctlAdds::stopProfileSlot(const QMap dict, const bool useHelper, - const QString cmd, const QString sudoCmd) +void NetctlAdds::stopProfileSlot(const bool useHelper, const QString cmd, const QString sudoCmd) { if (debug) qDebug() << PDEBUG; - sendNotification(QString("Info"), i18n("Stop profile %1", dict[QString("current")].toString())); + sendNotification(QString("Info"), i18n("Stop profile %1", values[QString("current")])); if (useHelper) { QList args; - args.append(dict[QString("current")].toString()); + args.append(values[QString("current")]); sendDBusRequest(QString("Start"), args); } else { QProcess command; - QString commandLine = sudoCmd + QString(" ") + cmd + QString(" stop ") + dict[QString("current")].toString(); + QString commandLine = sudoCmd + QString(" ") + cmd + QString(" stop ") + values[QString("current")]; command.startDetached(commandLine); } } @@ -297,12 +285,11 @@ void NetctlAdds::stopAllProfilesSlot(const bool useHelper, const QString cmd, co } -void NetctlAdds::switchToProfileSlot(const QStringList profiles, const bool useHelper, - const QString cmd) +void NetctlAdds::switchToProfileSlot(const bool useHelper, const QString cmd) { if (debug) qDebug() << PDEBUG; - if (debug) qDebug() << PDEBUG << ":" << "Profiles" << profiles; + QStringList profiles = values[QString("profiles")].split(QChar(',')); bool ok; QString profile = QInputDialog::getItem(0, i18n("Select profile"), i18n("Profile:"), profiles, 0, false, &ok); diff --git a/sources/plasmoid-kf5/plugin/netctladds.h b/sources/plasmoid-kf5/plugin/netctladds.h index cf47f2b..4b45041 100644 --- a/sources/plasmoid-kf5/plugin/netctladds.h +++ b/sources/plasmoid-kf5/plugin/netctladds.h @@ -19,22 +19,11 @@ #ifndef NETCTLADDS_H #define NETCTLADDS_H -#include #include #include -#include #include -class NetctlAddsIconProvider : public QQuickImageProvider -{ -public: - NetctlAddsIconProvider(); - - virtual QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize); -}; - - class NetctlAdds : public QObject { Q_OBJECT @@ -45,41 +34,41 @@ public: Q_INVOKABLE bool checkHelperStatus(); Q_INVOKABLE QString getAboutText(const QString type = "header"); - Q_INVOKABLE QString getInfo(const QString current, const QString status); Q_INVOKABLE bool isDebugEnabled(); - Q_INVOKABLE QString parsePattern(const QString pattern, const QMap dict); + Q_INVOKABLE QString parsePattern(const QString pattern); Q_INVOKABLE void runCmd(const QString cmd); - Q_INVOKABLE void sendNotification(const QString eventId, const QString message); + Q_INVOKABLE void setDataBySource(const QString sourceName, const QMap data); + Q_INVOKABLE static void sendNotification(const QString eventId, const QString message); + Q_INVOKABLE QString valueByKey(const QString key); // context menu - Q_INVOKABLE void enableProfileSlot(const QMap dict, - const bool useHelper = true, + Q_INVOKABLE void enableProfileSlot(const bool useHelper = true, const QString cmd = QString("/usr/bin/netctl"), const QString sudoCmd = QString("")); - Q_INVOKABLE void restartProfileSlot(const QMap dict, - const bool useHelper = true, + Q_INVOKABLE void restartProfileSlot(const bool useHelper = true, const QString cmd = QString("/usr/bin/netctl"), const QString sudoCmd = QString("")); - Q_INVOKABLE void startProfileSlot(const QStringList profiles, const bool status, - const bool useHelper = true, + Q_INVOKABLE void startProfileSlot(const bool useHelper = true, const QString cmd = QString("/usr/bin/netctl"), const QString sudoCmd = QString("")); - Q_INVOKABLE void stopProfileSlot(const QMap dict, - const bool useHelper = true, + Q_INVOKABLE void stopProfileSlot(const bool useHelper = true, const QString cmd = QString("/usr/bin/netctl"), const QString sudoCmd = QString("")); Q_INVOKABLE void stopAllProfilesSlot(const bool useHelper = true, const QString cmd = QString("/usr/bin/netctl"), const QString sudoCmd = QString("")); - Q_INVOKABLE void switchToProfileSlot(const QStringList profiles, - const bool useHelper = true, + Q_INVOKABLE void switchToProfileSlot(const bool useHelper = true, const QString cmd = QString("/usr/bin/netctl-auto")); // dataengine Q_INVOKABLE QMap readDataEngineConfiguration(); Q_INVOKABLE void writeDataEngineConfiguration(const QMap configuration); +signals: + void needToBeUpdated(); + private: bool debug = false; QList sendDBusRequest(const QString cmd, const QList args = QList()); + QMap values; }; diff --git a/sources/resources/CMakeLists.txt b/sources/resources/CMakeLists.txt index 88bd0be..af15d79 100644 --- a/sources/resources/CMakeLists.txt +++ b/sources/resources/CMakeLists.txt @@ -7,6 +7,7 @@ if (BUILD_GUI) endif () if (BUILD_PLASMOID) install (FILES icon-plasmoid.png DESTINATION share/pixmaps RENAME netctl-gui-widget.png) + install (FILES wifi.png DESTINATION share/pixmaps RENAME netctl-gui-wifi.png) install (FILES network-idle-64x64.png DESTINATION share/icons/hicolor/64x64/apps RENAME netctl-idle.png) install (FILES network-offline-64x64.png DESTINATION share/icons/hicolor/64x64/apps RENAME netctl-offline.png) add_subdirectory (translations-plasmoid) diff --git a/sources/sources.kdev4 b/sources/sources.kdev4 new file mode 100644 index 0000000..8e49584 --- /dev/null +++ b/sources/sources.kdev4 @@ -0,0 +1,3 @@ +[Project] +Manager=KDevCMakeManager +Name=netctl-gui