From 1aa1455f33a58ab9870ec91a057cc22702ce193b Mon Sep 17 00:00:00 2001 From: Levi Neely <141506390+lneely@users.noreply.github.com> Date: Sat, 1 Aug 2026 11:16:19 +0200 Subject: [PATCH] state indicator: simple forever-loop via statewait subprocess --- gui/ollie9pclient.cpp | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/gui/ollie9pclient.cpp b/gui/ollie9pclient.cpp index 90c9585..0f68513 100644 --- a/gui/ollie9pclient.cpp +++ b/gui/ollie9pclient.cpp @@ -61,6 +61,12 @@ void Ollie9pClient::setActiveSessionId(const QString &id) m_agentId = "0"; } + // Read initial state immediately (state, not statewait) + QByteArray stateOut = run9p({"read", agentPath() + "/state"}); + QString stateStr = QString::fromUtf8(stateOut).trimmed(); + if (!stateStr.isEmpty()) + m_activeState = stateStr; + emit activeSessionIdChanged(); emit activeStateChanged(); @@ -195,25 +201,17 @@ void Ollie9pClient::onChatReadyRead() void Ollie9pClient::onStateReadyRead() { + // statewait returns the state string on stdout. Parse it and update. QByteArray data = m_stateProc->readAllStandardOutput(); QString state = QString::fromUtf8(data).trimmed(); if (!state.isEmpty()) { - // statewait returns one line per state change; take the last one - QStringList lines = state.split('\n', Qt::SkipEmptyParts); - if (!lines.isEmpty()) { - m_activeState = lines.last().trimmed(); - emit activeStateChanged(); - } + m_activeState = state; + emit activeStateChanged(); } - // statewait exits after one read — restart it for continuous monitoring - m_stateProc->deleteLater(); - m_stateProc = nullptr; - startStateStream(); } void Ollie9pClient::onChatFinished(int, QProcess::ExitStatus) { - // Chat stream ended — session was killed or connection lost m_chatProc->deleteLater(); m_chatProc = nullptr; emit streamingDone(); @@ -221,11 +219,9 @@ void Ollie9pClient::onChatFinished(int, QProcess::ExitStatus) void Ollie9pClient::onStateFinished(int, QProcess::ExitStatus) { - // State process exited unexpectedly (not via onStateReadyRead restart) - if (m_stateProc) { - m_stateProc->deleteLater(); - m_stateProc = nullptr; - } + m_stateProc->deleteLater(); + m_stateProc = nullptr; + startStateStream(); } // --- Helpers ---