diff options
Diffstat (limited to 'src/crsm.cpp')
| -rw-r--r-- | src/crsm.cpp | 137 |
1 files changed, 84 insertions, 53 deletions
diff --git a/src/crsm.cpp b/src/crsm.cpp index fa069e0..34feba2 100644 --- a/src/crsm.cpp +++ b/src/crsm.cpp @@ -688,59 +688,7 @@ void CRSM::readConfig() { Config.clear(); out(Config.read(CONFIG_FILE_NAME)); - args.clear(); - args << "/config:" + Config.Clonk.Server.Config; - args << Config.Clonk.Server.Arguments.split(" "); - Config.Auto.Volatile.Clonk.Directory = QFileInfo(Config.Clonk.Server.Executable).absoluteDir().absolutePath() + QDir::separator(); - - Config.CRSM.ListFolder = QDir(Config.CRSM.ListFolder).absolutePath() + QDir::separator(); - - if(!QDir(Config.CRSM.ListFolder).exists()) - { - if(!QDir().mkpath(Config.CRSM.ListFolder)) - { - out("ERROR: Could not create the CRSM.ListFolder: " + Config.CRSM.ListFolder + "\n"); - ok = false; - exit(); - } - } - - QFile clonkConfig(Config.Clonk.Server.Config); - if(!clonkConfig.exists()) - { - out("WARNING: Clonk's config file is not existing!"); - } - else - { - clonkConfig.open(QFile::ReadOnly); - static QRegExp nickExp(R"_(^\s*Nick="(.*)"\s*$)_"); - static QRegExp pcNameExp(R"_(^\s*LocalName="(.*)"\s*$)_"); - foreach(const QString &line, QString(clonkConfig.readAll().trimmed()).split("\n")) - { - if(!Config.Auto.Volatile.Clonk.ServerNick.isEmpty() && !Config.Auto.Volatile.Clonk.ServerPCName.isEmpty()) break; - if(nickExp.exactMatch(line.trimmed())) - { - Config.Auto.Volatile.Clonk.ServerNick = nickExp.cap(1); - continue; - } - else if(pcNameExp.exactMatch(line.trimmed())) - { - Config.Auto.Volatile.Clonk.ServerPCName = pcNameExp.cap(1); - continue; - } - } - } - if((ushort)Config.CRSM.ManagementPort == 0) - { - Config.CRSM.ManagementPort = 9372; - } - if(!QFile(Config.Clonk.Server.Executable).exists()) - { - out("ERROR: The Clonk.Server.Executable doesn't exist: \"" + Config.Clonk.Server.Executable + "\"\n"); - ok = false; - exit(); - } - setupCmds(); + applyConfig(); return; } @@ -1435,6 +1383,8 @@ void CRSM::setupCmds() addCommandGroup("config", Management, UserType::Max, "Die config-Befehlsgruppe bietet diverse Befehle zum Verwalten der Konfiguration."); addCommand("config reload", &CRSM::reload, Management, UserType::Max, "Liest die Konfigurationsdatei neu ein."); addCommand("config save", &CRSM::saveConfig, Management, UserType::Max, "Speichert die aktuelle Konfiguration in die Konfigurationsdatei."); + addCommand("config get", &CRSM::getConfigValue, Management, UserType::Max, "Gibt den aktuellen Wert <Wertname> von der Konfiguration an.", "<Wertname>"); + addCommand("config set", &CRSM::setConfigValue, Management, UserType::Max, "Setzt einen Konfigurationswert.", "<Konfigurationszeile>", "Setzt einen Konfigurationswert. Der Wert wird wie eine Zeile in der Konfigurationsdatei angegeben."); addCommand("relist", &CRSM::relist, Management, UserType::Max, "Durchsucht veränderte Rundenordner erneut."); } @@ -1640,6 +1590,63 @@ void CRSM::exit() scenarioFinished(); } +void CRSM::applyConfig() +{ + args.clear(); + args << "/config:" + Config.Clonk.Server.Config; + args << Config.Clonk.Server.Arguments.split(" "); + Config.Auto.Volatile.Clonk.Directory = QFileInfo(Config.Clonk.Server.Executable).absoluteDir().absolutePath() + QDir::separator(); + + Config.CRSM.ListFolder = QDir(Config.CRSM.ListFolder).absolutePath() + QDir::separator(); + + if(!QDir(Config.CRSM.ListFolder).exists()) + { + if(!QDir().mkpath(Config.CRSM.ListFolder)) + { + out("ERROR: Could not create the CRSM.ListFolder: " + Config.CRSM.ListFolder + "\n"); + ok = false; + exit(); + } + } + + QFile clonkConfig(Config.Clonk.Server.Config); + if(!clonkConfig.exists()) + { + out("WARNING: Clonk's config file is not existing!"); + } + else + { + clonkConfig.open(QFile::ReadOnly); + static QRegExp nickExp(R"_(^\s*Nick="(.*)"\s*$)_"); + static QRegExp pcNameExp(R"_(^\s*LocalName="(.*)"\s*$)_"); + foreach(const QString &line, QString(clonkConfig.readAll().trimmed()).split("\n")) + { + if(!Config.Auto.Volatile.Clonk.ServerNick.isEmpty() && !Config.Auto.Volatile.Clonk.ServerPCName.isEmpty()) break; + if(nickExp.exactMatch(line.trimmed())) + { + Config.Auto.Volatile.Clonk.ServerNick = nickExp.cap(1); + continue; + } + else if(pcNameExp.exactMatch(line.trimmed())) + { + Config.Auto.Volatile.Clonk.ServerPCName = pcNameExp.cap(1); + continue; + } + } + } + if((ushort)Config.CRSM.ManagementPort == 0) + { + Config.CRSM.ManagementPort = 9372; + } + if(!QFile(Config.Clonk.Server.Executable).exists()) + { + out("ERROR: The Clonk.Server.Executable doesn't exist: \"" + Config.Clonk.Server.Executable + "\"\n"); + ok = false; + exit(); + } + setupCmds(); +} + CMD_FUNCTION_IMPL(help) bool longHelp = (args == "long"); if(args.isEmpty() || longHelp) @@ -2185,6 +2192,30 @@ CMD_FUNCTION_IMPL(relist) readScenarios(); } +CMD_FUNCTION_IMPL(getConfigValue) + try + { + respond(client, Config.getConfigValueLine(args)); + } + catch(CRSMConfigException) + { + respond(client, "Es existiert kein Wert mit dem Namen \"" + args + "\"\n"); + } +} + +CMD_FUNCTION_IMPL(setConfigValue) + try + { + Config.setConfigLine(args); + applyConfig(); + respond(client, "Wert wurde erfolgreich übernommen.\n"); + } + catch(CRSMConfigException e) + { + respond(client, QString("Fehler beim Setzen: ") + e.what() + "\n"); + } +} + IRC_CHECK_CALLBACK_IMPL(ircSetAdmin) if(status <= 0) { |
