diff options
author | Sefa Eyeoglu <contact@scrumplex.net> | 2022-08-18 10:44:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-18 10:44:01 +0200 |
commit | ab766a05989adbe3fcb61e8ca865e2dab5b2cc74 (patch) | |
tree | 014529e0a217d3129b8341b244ddf6ee0b2e05a8 /launcher | |
parent | c375e7b4dfbdf7c201c42a70c96a1b2afdc34552 (diff) | |
parent | 3c4b45c9e76db3373baccefda59bae01c460df28 (diff) | |
download | PrismLauncher-ab766a05989adbe3fcb61e8ca865e2dab5b2cc74.tar.gz PrismLauncher-ab766a05989adbe3fcb61e8ca865e2dab5b2cc74.tar.bz2 PrismLauncher-ab766a05989adbe3fcb61e8ca865e2dab5b2cc74.zip |
Merge pull request #968 from magneticflux-/utf8-logging
Decode process lines as UTF-8
Diffstat (limited to 'launcher')
-rw-r--r-- | launcher/LoggedProcess.cpp | 32 | ||||
-rw-r--r-- | launcher/LoggedProcess.h | 5 |
2 files changed, 14 insertions, 23 deletions
diff --git a/launcher/LoggedProcess.cpp b/launcher/LoggedProcess.cpp index fbdeed8f..6447f5c6 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,26 @@ 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); +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) + auto lines = str.remove(QChar::CarriageReturn).split(QChar::LineFeed, QString::SkipEmptyParts); +#else + auto lines = str.remove(QChar::CarriageReturn).split(QChar::LineFeed, Qt::SkipEmptyParts); +#endif 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 +88,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..2360d1ea 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::codecForLocale()); + QTextDecoder m_out_decoder = QTextDecoder(QTextCodec::codecForLocale()); bool m_killed = false; State m_state = NotRunning; int m_exit_code = 0; |