diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2016-10-04 22:39:43 +0200 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2016-10-04 22:39:43 +0200 |
| commit | 4d70cb1f3d6b05b8a2fb58137988c2820e9590d2 (patch) | |
| tree | 738074a473bea498d63ee54128430df99f96128e | |
| parent | 6cc8a285eebd0b8e082372fd7e8d127d92b9dedc (diff) | |
| download | manager-4d70cb1f3d6b05b8a2fb58137988c2820e9590d2.tar.gz manager-4d70cb1f3d6b05b8a2fb58137988c2820e9590d2.zip | |
"Fix" encoding of Clonk's arguments in CP1252 (to support Scenario names
with umlauts coming from windows)
| -rw-r--r-- | src/ProcessManager.cpp | 14 | ||||
| -rw-r--r-- | src/ProcessManager.hpp | 4 | ||||
| -rw-r--r-- | src/crsm.cpp | 8 |
3 files changed, 17 insertions, 9 deletions
diff --git a/src/ProcessManager.cpp b/src/ProcessManager.cpp index 5a9e89f..dc2aa10 100644 --- a/src/ProcessManager.cpp +++ b/src/ProcessManager.cpp @@ -4,9 +4,19 @@ #include <QProcess> #include <QThread> #include <QDebug> +#include <QTextCodec> -ProcessManager::ProcessManager(const QString &newPrefix, const QString &newId, bool useStdErr, QObject *parent) : QObject(parent), prefix(newPrefix), id(newId), useStdErr(useStdErr) +ProcessManager::ProcessManager(const QString &newPrefix, const QString &newId, bool useStdErr, QTextCodec* argumentsCodec, QObject *parent) : QObject(parent), prefix(newPrefix), id(newId), useStdErr(useStdErr) { + if(argumentsCodec == nullptr) + { + this->argumentsCodec = QTextCodec::codecForName("UTF-8"); + } + else + { + this->argumentsCodec = argumentsCodec; + } + if(id.isEmpty()) { id = QString::number(qrand()) + "-"; @@ -108,7 +118,7 @@ bool ProcessManager::start(const QString &program, QStringList args) { args[i] = args[i].replace('\\', "\\\\").replace(' ', "\\ "); } - ctrlIn.write("START " + program.toUtf8() + " " + args.join(' ').toUtf8() + "\n"); + ctrlIn.write("START " + program.toUtf8() + " " + argumentsCodec->fromUnicode(args.join(' ')) + "\n"); QRegExp runningExp("^RUNNING: (\\d+)\n$"); if(!runningExp.exactMatch(ctrlOut.readLine())) { diff --git a/src/ProcessManager.hpp b/src/ProcessManager.hpp index 2d64168..7085fcc 100644 --- a/src/ProcessManager.hpp +++ b/src/ProcessManager.hpp @@ -14,7 +14,7 @@ class ProcessManager : public QObject { Q_OBJECT public: - explicit ProcessManager(const QString& prefix, const QString& id = "", bool useStdErr = false, QObject *parent = 0); + explicit ProcessManager(const QString& prefix, const QString& id = "", bool useStdErr = false, QTextCodec* argumentsCodec = nullptr, QObject *parent = 0); ~ProcessManager(); bool isOk(); @@ -70,4 +70,6 @@ private: bool connectToIO(); void processCtrlMessage(const QString& message); + + QTextCodec* argumentsCodec = nullptr; }; diff --git a/src/crsm.cpp b/src/crsm.cpp index fc7d5b4..d6a56cf 100644 --- a/src/crsm.cpp +++ b/src/crsm.cpp @@ -38,11 +38,11 @@ CRSM::CRSM(QObject *parent) : if(!Config.Auto.ProcessManager.ReattachId.isEmpty()) { - processManager = new ProcessManager("CRSM-Clonkserver-", Config.Auto.ProcessManager.ReattachId); + processManager = new ProcessManager("CRSM-Clonkserver-", Config.Auto.ProcessManager.ReattachId, false, codec); } else { - processManager = new ProcessManager("CRSM-Clonkserver-"); + processManager = new ProcessManager("CRSM-Clonkserver-", "", false, codec); } @@ -744,10 +744,6 @@ void CRSM::startScen(const ScenarioSettings &scen, QStringList argList) argList << filename; processManager->setWorkingDirectory(Config.Auto.Volatile.Clonk.Directory); out(Packs.linkScenarioPacks(filename)); - //for(QString& arg : argList) - //{ - //qDebug() << (arg = codec->fromUnicode(arg)); - //} processManager->start(Config.Clonk.Server.Executable, argList); Log.scenLog(scen); } |
