diff options
author | Mitchell Skaggs <skaggsm333@gmail.com> | 2022-08-08 23:54:01 -0500 |
---|---|---|
committer | Mitchell Skaggs <skaggsm333@gmail.com> | 2022-08-08 23:54:01 -0500 |
commit | a14476c5fbd87f2a765b3f8807950bd728f282b2 (patch) | |
tree | cd9b6a7c944a65b300d6f561a536ac2b92647154 /launcher | |
parent | 0e473f4570f49ba212459365c7971b5d3988a3ff (diff) | |
download | PrismLauncher-a14476c5fbd87f2a765b3f8807950bd728f282b2.tar.gz PrismLauncher-a14476c5fbd87f2a765b3f8807950bd728f282b2.tar.bz2 PrismLauncher-a14476c5fbd87f2a765b3f8807950bd728f282b2.zip |
Replace local 8-bit decoding with UTF-8 decoding
Handles incomplete byte sequences using `QTextDecoder`
Signed-off-by: Mitchell Skaggs <skaggsm333@gmail.com>
Diffstat (limited to 'launcher')
-rw-r--r-- | launcher/LoggedProcess.cpp | 28 | ||||
-rw-r--r-- | launcher/LoggedProcess.h | 5 |
2 files changed, 10 insertions, 23 deletions
diff --git a/launcher/LoggedProcess.cpp b/launcher/LoggedProcess.cpp index fbdeed8f..5ad310a3 100644 --- a/launcher/LoggedProcess.cpp +++ b/launcher/LoggedProcess.cpp @@ -34,8 +34,9 @@ */ #include "LoggedProcess.h" -#include "MessageLevel.h" #include <QDebug> +#include <QTextDecoder> +#include "MessageLevel.h" LoggedProcess::LoggedProcess(QObject *parent) : QProcess(parent) { @@ -59,25 +60,22 @@ LoggedProcess::~LoggedProcess() } } -QStringList reprocess(const QByteArray & data, QString & leftover) +QStringList reprocess(const QByteArray& data, QTextDecoder& decoder) { - QString str = leftover + QString::fromLocal8Bit(data); - - str.remove('\r'); - QStringList lines = str.split("\n"); - leftover = lines.takeLast(); + auto str = decoder.toUnicode(data); + auto lines = str.remove(QChar::CarriageReturn).split(QChar::LineFeed, Qt::SkipEmptyParts); return lines; } void LoggedProcess::on_stdErr() { - auto lines = reprocess(readAllStandardError(), m_err_leftover); + auto lines = reprocess(readAllStandardError(), m_err_decoder); emit log(lines, MessageLevel::StdErr); } void LoggedProcess::on_stdOut() { - auto lines = reprocess(readAllStandardOutput(), m_out_leftover); + auto lines = reprocess(readAllStandardOutput(), m_out_decoder); emit log(lines, MessageLevel::StdOut); } @@ -86,18 +84,6 @@ void LoggedProcess::on_exit(int exit_code, QProcess::ExitStatus status) // save the exit code m_exit_code = exit_code; - // Flush console window - if (!m_err_leftover.isEmpty()) - { - emit log({m_err_leftover}, MessageLevel::StdErr); - m_err_leftover.clear(); - } - if (!m_out_leftover.isEmpty()) - { - emit log({m_err_leftover}, MessageLevel::StdOut); - m_out_leftover.clear(); - } - // based on state, send signals if (!m_is_aborting) { diff --git a/launcher/LoggedProcess.h b/launcher/LoggedProcess.h index 61e74bd9..91667b91 100644 --- a/launcher/LoggedProcess.h +++ b/launcher/LoggedProcess.h @@ -36,6 +36,7 @@ #pragma once #include <QProcess> +#include <QTextDecoder> #include "MessageLevel.h" /* @@ -88,8 +89,8 @@ private: void changeState(LoggedProcess::State state); private: - QString m_err_leftover; - QString m_out_leftover; + QTextDecoder m_err_decoder = QTextDecoder(QTextCodec::codecForName("UTF-8")); + QTextDecoder m_out_decoder = QTextDecoder(QTextCodec::codecForName("UTF-8")); bool m_killed = false; State m_state = NotRunning; int m_exit_code = 0; |