add FindSettings key

This commit is contained in:
arcan1s 2014-08-13 11:41:30 +04:00
parent b63d883eb2
commit d3e1c4bca0
7 changed files with 213 additions and 0 deletions

View File

@ -71,6 +71,11 @@ th.sub {
<td><code>true</code> and closes the helper</td>
<td>no</td>
</tr>
<tr>
<td>QStringList FindSettings()</td>
<td>scans system and suggests the recommended configuration which will be used by the library</td>
<td>no</td>
</tr>
<tr>
<td>QString LibraryDocs()</td>
<td>returns path to the library documentation</td>

View File

@ -64,6 +64,31 @@ bool ControlAdaptor::Close()
}
QStringList ControlAdaptor::FindSettings()
{
QMap<QString, QString> configuration;
// apply settings from Netctl class
QMap<QString, QString> librarySettings = netctlCommand->getRecommendedConfiguration();
for (int i=0; i<librarySettings.keys().count(); i++)
configuration[librarySettings.keys()[i]] = librarySettings[librarySettings.keys()[i]];
// apply settings from NetctlProfile class
librarySettings = netctlProfile->getRecommendedConfiguration();
for (int i=0; i<librarySettings.keys().count(); i++)
configuration[librarySettings.keys()[i]] = librarySettings[librarySettings.keys()[i]];
// apply settings from WpaSup class
librarySettings = wpaCommand->getRecommendedConfiguration();
for (int i=0; i<librarySettings.keys().count(); i++)
configuration[librarySettings.keys()[i]] = librarySettings[librarySettings.keys()[i]];
QStringList settingsList;
for (int i=0; i<configuration.keys().count(); i++)
settingsList.append(configuration.keys()[i] + QString("==") +
configuration[configuration.keys()[i]]);
return settingsList;
}
QString ControlAdaptor::LibraryDocs()
{
return (QString(DOCS_PATH) + QString("html/index.html"));

View File

@ -41,6 +41,7 @@ public slots:
bool Active();
QString ApiDocs();
bool Close();
QStringList FindSettings();
QString LibraryDocs();
QString Pony();
QString SecurityDocs();

View File

@ -155,6 +155,11 @@ public:
* @return true if netctl-auto is active
*/
bool isNetctlAutoRunning();
/**
* @brief method which check system configuration and return recommended values to keys
* @return recommended parametrs
*/
static QMap<QString, QString> getRecommendedConfiguration();
/**
* @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

View File

@ -67,6 +67,11 @@ public:
* @return temporary profile name
*/
QString createProfile(const QString profile, const QMap<QString, QString> settings);
/**
* @brief method which check system configuration and return recommended values to keys
* @return recommended parametrs
*/
static QMap<QString, QString> getRecommendedConfiguration();
/**
* @brief method which reads settings from profile
* @param profile profile name

View File

@ -24,6 +24,7 @@
#include <QDebug>
#include <QDirIterator>
#include "netctlgui.h"
#include "pdebug.h"
@ -386,6 +387,120 @@ bool Netctl::isNetctlAutoRunning()
}
/**
* @fn getRecommendedConfiguration
*/
QMap<QString, QString> Netctl::getRecommendedConfiguration()
{
QMap<QString, QString> settings;
QString cmd;
TaskResult process;
QStringList recommended;
// force sudo
// find out helper exe
settings[QString("FORCE_SUDO")] = QString("true");
recommended.clear();
recommended.append(QString("netctlgui-helper"));
recommended.append(QString("netctlgui-helper-suid"));
for (int i=0; i<recommended.count(); i++) {
cmd = QString("which ") + recommended[i];
process = runTask(cmd, false);
if (process.exitCode == 0) {
settings[QString("FORCE_SUDO")] = QString("false");
break;
}
}
// interfaces
// find out dircetory which contains wireless subdirectory
// I don't think that this parametr may change =)
settings[QString("IFACE_DIR")] = QString("/sys/class/net");
settings[QString("PREFERED_IFACE")] = QString("");
QDirIterator sysIterator(QDir("/sys"), QDirIterator::Subdirectories);
while (sysIterator.hasNext()) {
sysIterator.next();
if (!sysIterator.fileInfo().isDir()) continue;
QString name = sysIterator.filePath();
if (name.contains(QString("wireless"))) {
QString interfaceDir = QFileInfo(name).path();
settings[QString("PREFERED_IFACE")] = QFileInfo(interfaceDir).fileName();
break;
}
}
// netctl path
// find out netctl exe
settings[QString("NETCTL_PATH")] = QString("");
recommended.clear();
recommended.append("netctl");
for (int i=0; i<recommended.count(); i++) {
cmd = QString("which ") + recommended[i];
process = runTask(cmd, false);
if (process.exitCode == 0) {
settings[QString("NETCTL_PATH")] = process.output.trimmed();
break;
}
}
// netctl-auto path
// find out netctl-auto exe
settings[QString("NETCTLAUTO_PATH")] = QString("");
recommended.clear();
recommended.append("netctl-auto");
for (int i=0; i<recommended.count(); i++) {
cmd = QString("which ") + recommended[i];
process = runTask(cmd, false);
if (process.exitCode == 0) {
settings[QString("NETCTLAUTO_PATH")] = process.output.trimmed();
break;
}
}
// netctl-auto service
// usually it has the same name as netctl-auto
settings[QString("NETCTLAUTO_SERVICE")] = QFileInfo(settings[QString("NETCTLAUTO_PATH")]).fileName();
// profile path
// find out netctl directory into /etc
settings[QString("PROFILE_DIR")] = QString("");
QDirIterator iterator(QDir("/etc"), QDirIterator::Subdirectories);
while (iterator.hasNext()) {
iterator.next();
if (!iterator.fileInfo().isDir()) continue;
QString name = iterator.filePath();
if (name.contains(QString("netctl"))) {
settings[QString("PROFILE_DIR")] = name;
break;
}
}
// sudo path
// find out sudo, kdesu, gksu exes
settings[QString("SUDO_PATH")] = QString("");
recommended.clear();
recommended.append("sudo");
recommended.append("kdesu");
recommended.append("gksu");
for (int i=0; i<recommended.count(); i++) {
cmd = QString("which ") + recommended[i];
process = runTask(cmd, false);
if (process.exitCode == 0) {
settings[QString("SUDO_PATH")] = process.output.trimmed();
break;
}
}
// systemctl path
// find out systemctl exe
settings[QString("SYSTEMCTL_PATH")] = QString("");
recommended.clear();
recommended.append("systemctl");
for (int i=0; i<recommended.count(); i++) {
cmd = QString("which ") + recommended[i];
process = runTask(cmd, false);
if (process.exitCode == 0) {
settings[QString("SYSTEMCTL_PATH")] = process.output.trimmed();
break;
}
}
return settings;
}
/**
* @fn getWirelessInterfaceList
*/

View File

@ -24,6 +24,7 @@
#include <QDebug>
#include <QDirIterator>
#include <QFile>
#include <QFileInfo>
#include <QTextStream>
@ -132,6 +133,62 @@ QString NetctlProfile::createProfile(const QString profile, const QMap<QString,
}
/**
* @fn getRecommendedConfiguration
*/
QMap<QString, QString> NetctlProfile::getRecommendedConfiguration()
{
QMap<QString, QString> settings;
QString cmd;
TaskResult process;
QStringList recommended;
// force sudo
// find out helper exe
settings[QString("FORCE_SUDO")] = QString("true");
recommended.clear();
recommended.append(QString("netctlgui-helper"));
recommended.append(QString("netctlgui-helper-suid"));
for (int i=0; i<recommended.count(); i++) {
cmd = QString("which ") + recommended[i];
process = runTask(cmd, false);
if (process.exitCode == 0) {
settings[QString("FORCE_SUDO")] = QString("false");
break;
}
}
// profile path
// find out netctl directory into /etc
settings[QString("PROFILE_DIR")] = QString("");
QDirIterator iterator(QDir("/etc"), QDirIterator::Subdirectories);
while (iterator.hasNext()) {
iterator.next();
if (!iterator.fileInfo().isDir()) continue;
QString name = iterator.filePath();
if (name.contains(QString("netctl"))) {
settings[QString("PROFILE_DIR")] = name;
break;
}
}
// sudo path
// find out sudo, kdesu, gksu exes
settings[QString("SUDO_PATH")] = QString("");
recommended.clear();
recommended.append("sudo");
recommended.append("kdesu");
recommended.append("gksu");
for (int i=0; i<recommended.count(); i++) {
cmd = QString("which ") + recommended[i];
process = runTask(cmd, false);
if (process.exitCode == 0) {
settings[QString("SUDO_PATH")] = process.output.trimmed();
break;
}
}
return settings;
}
/**
* @fn getSettingsFromProfile
*/