forked from quickshell/quickshell
io/process: emit read for data remaining in buffer on exit
This commit is contained in:
parent
89e796cb21
commit
c4a7d16478
3 changed files with 8 additions and 0 deletions
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue