From a837ea28e986c8e2f49c470d647cd63f89cf8254 Mon Sep 17 00:00:00 2001 From: "A. Wilcox" Date: Sat, 13 Jun 2020 00:45:49 -0500 Subject: Qt UI: Execute: Use message buffer; flush log file --- ui/qt5/runner/executepage.cc | 17 ++++++++++++++++- ui/qt5/runner/executepage.hh | 3 +++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ui/qt5/runner/executepage.cc b/ui/qt5/runner/executepage.cc index d5788df..7567597 100644 --- a/ui/qt5/runner/executepage.cc +++ b/ui/qt5/runner/executepage.cc @@ -94,7 +94,21 @@ void ExecutePage::executorReady() { QByteArray msgs = executor->readAllStandardError(); log.write(msgs); - QStringList msgList = QString::fromUtf8(msgs).split("\n"); + msgBuffer.append(msgs); + processMessages(); +} + +void ExecutePage::processMessages() { + QByteArray ready; + + /* No message is ready yet. */ + if(!msgBuffer.contains('\n')) return; + + int len = msgBuffer.lastIndexOf('\n'); + ready = msgBuffer.left(len); + msgBuffer.remove(0, len + 1); + + QStringList msgList = QString::fromUtf8(ready).split("\n"); for(auto &msg : msgList) { QString msgType = msg.section('\t', 1, 1); if(msgType == "step-start") { @@ -125,6 +139,7 @@ void ExecutePage::executorFinished(int code, QProcess::ExitStatus status) { markFailed(this->current); } + log.flush(); wizard()->button(QWizard::CancelButton)->setEnabled(false); finishTimer->start(); } diff --git a/ui/qt5/runner/executepage.hh b/ui/qt5/runner/executepage.hh index 32987e7..77b3219 100644 --- a/ui/qt5/runner/executepage.hh +++ b/ui/qt5/runner/executepage.hh @@ -42,6 +42,7 @@ private: QProcess *executor; QTimer *finishTimer; QFile log; + QByteArray msgBuffer; Phase current; bool failed; @@ -51,6 +52,8 @@ private: void markFinished(Phase phase); void markFailed(Phase phase); + void processMessages(); + void executorReady(); void executorOutReady(); void executorErrored(QProcess::ProcessError what); -- cgit v1.2.3-60-g2f50