diff --git a/src/io/datastream.cpp b/src/io/datastream.cpp index c6559215..b30b0ac3 100644 --- a/src/io/datastream.cpp +++ b/src/io/datastream.cpp @@ -98,6 +98,10 @@ void SplitParser::parseBytes(QByteArray& incoming, QByteArray& buffer) { } } +void SplitParser::streamEnded(QByteArray& buffer) { + if (!buffer.isEmpty()) emit this->read(QString(buffer)); +} + QString SplitParser::splitMarker() const { return this->mSplitMarker; } void SplitParser::setSplitMarker(QString marker) { diff --git a/src/io/datastream.hpp b/src/io/datastream.hpp index b30800ac..57ddd658 100644 --- a/src/io/datastream.hpp +++ b/src/io/datastream.hpp @@ -54,6 +54,7 @@ public: // the buffer will be sent in both slots if there is data remaining from a previous parser virtual void parseBytes(QByteArray& incoming, QByteArray& buffer) = 0; + virtual void streamEnded(QByteArray& /*buffer*/) {}; signals: /// Emitted when data is read from the stream. @@ -75,6 +76,7 @@ public: explicit SplitParser(QObject* parent = nullptr): DataStreamParser(parent) {} void parseBytes(QByteArray& incoming, QByteArray& buffer) override; + void streamEnded(QByteArray& buffer) override; [[nodiscard]] QString splitMarker() const; void setSplitMarker(QString marker); diff --git a/src/io/process.cpp b/src/io/process.cpp index 6b1ab5d6..a532ac8f 100644 --- a/src/io/process.cpp +++ b/src/io/process.cpp @@ -254,6 +254,8 @@ void Process::onStarted() { void Process::onFinished(qint32 exitCode, QProcess::ExitStatus exitStatus) { this->process->deleteLater(); this->process = nullptr; + if (this->mStdoutParser) this->mStdoutParser->streamEnded(this->stdoutBuffer); + if (this->mStderrParser) this->mStderrParser->streamEnded(this->stderrBuffer); this->stdoutBuffer.clear(); this->stderrBuffer.clear();