summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ProcessManager.cpp14
-rw-r--r--src/ProcessManager.hpp4
-rw-r--r--src/crsm.cpp8
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);
}