summaryrefslogtreecommitdiffstats
path: root/src/crsm.cpp
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2015-10-08 14:04:04 +0200
committerMarkus Mittendrein <git@maxmitti.tk>2015-10-08 14:04:04 +0200
commitdbd4d15144c727f967911d41d798758bfb9bad03 (patch)
tree7b3245f2ea9265f98dae5a16ff5b6dd268c8e0d8 /src/crsm.cpp
parentc59e14b83f8b88f01ec23dcc4e6265cbfb84f733 (diff)
downloadmanager-dbd4d15144c727f967911d41d798758bfb9bad03.tar.gz
manager-dbd4d15144c727f967911d41d798758bfb9bad03.zip
Add config get and config set commands and a -= config syntax to remove
elements from a list or map (by key)
Diffstat (limited to 'src/crsm.cpp')
-rw-r--r--src/crsm.cpp137
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)
{