summaryrefslogtreecommitdiff
path: root/noncore/settings/networksettings/interfaces.cpp
Side-by-side diff
Diffstat (limited to 'noncore/settings/networksettings/interfaces.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings/interfaces.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/noncore/settings/networksettings/interfaces.cpp b/noncore/settings/networksettings/interfaces.cpp
index 1287d90..eef42df 100644
--- a/noncore/settings/networksettings/interfaces.cpp
+++ b/noncore/settings/networksettings/interfaces.cpp
@@ -324,51 +324,51 @@ bool Interfaces::setInterfaceOption(QString option, QString value){
* Removes all of the options from the currently selected interface.
* @return bool error if if successfull
*/
bool Interfaces::removeAllInterfaceOptions(){
return removeAllOptions(currentIface);
}
/**
* Set the current map to interface's map. This needs to be done before you
* can call addMapping(), set/getMap(), and get/setScript().
* @param interface the name of the interface to set. All whitespace is
* removed from the interface name.
* @return bool true if it is successfull.
*/
bool Interfaces::setMapping(QString interface){
interface = interface.simplifyWhiteSpace();
interface = interface.replace(QRegExp(" "), "");
return setStanza(MAPPING, interface, currentMapping);
}
/**
* Adds a new Mapping to the interfaces file with interfaces.
* @param interface the name(s) of the interfaces to set to this mapping
*/
-void Interfaces::addMapping(QString interfaces){
+void Interfaces::addMapping(QString option){
interfaces.append("");
- interfaces.append(QString(MAPPING " %1").arg(interfaces));
+ interfaces.append(QString(MAPPING " %1").arg(option));
}
/**
* Set a map option within a mapping.
* @param map map to use
* @param value value to go with map
* @return bool true if it is successfull.
*/
bool Interfaces::setMap(QString map, QString value){
return setOption(currentMapping, map, value);
}
/**
* Get a map value within a mapping.
* @param map map to get value of
* @param bool true if it is successfull.
* @return value that goes to the map
*/
QString Interfaces::getMap(QString map, bool &error){
return getOption(currentMapping, map, error);
}
/**
* Sets a script value of the current mapping to argument.
@@ -383,86 +383,93 @@ bool Interfaces::setScript(QString argument){
* @param error true if could not retrieve the current script argument.
* @return QString the argument of the script for the current mapping.
*/
QString Interfaces::getScript(bool &error){
return getOption(currentMapping, "script", error);
}
/**
* Helper function used to parse through the QStringList and put pointers in
* the correct place.
* @param stanza The stanza (auto, iface, mapping) to look for.
* @param option string that must be in the stanza's main line.
* @param interator interator to place at location of stanza if successfull.
* @return bool true if the stanza is found.
*/
bool Interfaces::setStanza(QString stanza, QString option, QStringList::Iterator &iterator){
bool found = false;
iterator = interfaces.end();
for ( QStringList::Iterator it = interfaces.begin(); it != interfaces.end(); ++it ) {
QString line = (*it).simplifyWhiteSpace();
if(line.contains(stanza) && line.contains(option)){
if(found == true){
qDebug(QString("Interfaces: Found multiple stanza's for search: %1 %2").arg(stanza).arg(option).latin1());
}
+ qDebug("Found");
found = true;
iterator = it;
}
}
- return !found;
+ return found;
}
/**
* Sets a value of an option in a stanza
* @param start the start of the stanza
* @param option the option to use when setting value.
* @return bool true if successfull, false otherwise.
*/
bool Interfaces::setOption(QStringList::Iterator start, QString option, QString value){
if(start == interfaces.end())
return false;
bool found = false;
for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) {
if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){
if(!found && value != ""){
// Got to the end of the stanza without finding it, so append it.
interfaces.insert(--it, QString("\t%1 %2").arg(option).arg(value));
}
+ found = true;
break;
}
- if((*it).contains(option)){
+ if((*it).contains(option) && it != start){
// Found it in stanza so replace it.
if(found)
qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1());
found = true;
if(value == "")
(*it) = "";
else
(*it) = QString("\t%1 %2").arg(option).arg(value);
}
}
- return true;
+ if(!found){
+ QStringList::Iterator p = start;
+ interfaces.insert(++p, QString("\t%1 %2").arg(option).arg(value));
+ found = true;
+ }
+ return found;
}
/**
* Removes all options in a stanza
* @param start the start of the stanza
* @return bool true if successfull, false otherwise.
*/
bool Interfaces::removeAllOptions(QStringList::Iterator start){
if(start == interfaces.end())
return false;
QStringList::Iterator it = start;
it = ++it;
for (it; it != interfaces.end(); ++it ) {
if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){
break;
}
it = interfaces.remove(it);
it = --it;
}
// Leave a space between this interface and the next.
interfaces.insert(it, QString(""));
return true;
}