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/LoggedProcess.cpp | |
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/LoggedProcess.cpp')
-rw-r--r-- | launcher/LoggedProcess.cpp | 28 |
1 files changed, 7 insertions, 21 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) { |