From 76f97c42ebbba47e96d99554da88d4625db2d378 Mon Sep 17 00:00:00 2001 From: Levi Neely <141506390+lneely@users.noreply.github.com> Date: Sat, 1 Aug 2026 16:14:43 +0200 Subject: [PATCH] session rename: eventwait stream for live refresh, fix infinite loop --- gui/ollie9pclient.cpp | 33 +++++++++++++++++++++++++++++++++ gui/ollie9pclient.h | 4 ++++ 2 files changed, 37 insertions(+) diff --git a/gui/ollie9pclient.cpp b/gui/ollie9pclient.cpp index 3c6b378..86aa215 100644 --- a/gui/ollie9pclient.cpp +++ b/gui/ollie9pclient.cpp @@ -38,6 +38,7 @@ Ollie9pClient::Ollie9pClient(QObject *parent) { refreshSessions(); ensureRootDataLoaded(); + startEventStream(); } Ollie9pClient::~Ollie9pClient() @@ -373,6 +374,13 @@ void Ollie9pClient::stopStreams() m_stateProc->deleteLater(); m_stateProc = nullptr; } + if (m_eventProc) { + m_eventProc->disconnect(); + m_eventProc->kill(); + m_eventProc->waitForFinished(1000); + m_eventProc->deleteLater(); + m_eventProc = nullptr; + } } void Ollie9pClient::onChatReadyRead() @@ -408,6 +416,31 @@ void Ollie9pClient::onStateFinished(int, QProcess::ExitStatus) startStateStream(); } +void Ollie9pClient::startEventStream() +{ + if (m_eventProc) return; + m_eventProc = new QProcess(this); + connect(m_eventProc, &QProcess::readyReadStandardOutput, this, &Ollie9pClient::onEventReadyRead); + connect(m_eventProc, QOverload::of(&QProcess::finished), + this, &Ollie9pClient::onEventFinished); + m_eventProc->start(ninepBin(), {"-a", serverAddr(), "read", "session/eventwait"}); +} + +void Ollie9pClient::onEventReadyRead() +{ + // Consume the data to prevent readyRead from firing again + m_eventProc->readAllStandardOutput(); + // Session index changed (create/delete/rename). Refresh. + refreshSessions(); +} + +void Ollie9pClient::onEventFinished(int, QProcess::ExitStatus) +{ + m_eventProc->deleteLater(); + m_eventProc = nullptr; + startEventStream(); +} + // --- Helpers --- QString Ollie9pClient::agentPath() const diff --git a/gui/ollie9pclient.h b/gui/ollie9pclient.h index c7c2d3e..9c71951 100644 --- a/gui/ollie9pclient.h +++ b/gui/ollie9pclient.h @@ -84,12 +84,15 @@ signals: private slots: void onChatReadyRead(); void onStateReadyRead(); + void onEventReadyRead(); void onChatFinished(int exitCode, QProcess::ExitStatus status); void onStateFinished(int exitCode, QProcess::ExitStatus status); + void onEventFinished(int exitCode, QProcess::ExitStatus status); private: void startChatStream(); void startStateStream(); + void startEventStream(); void stopStreams(); QString agentPath() const; QByteArray run9p(const QStringList &args); @@ -111,6 +114,7 @@ private: QProcess *m_chatProc = nullptr; QProcess *m_stateProc = nullptr; + QProcess *m_eventProc = nullptr; }; #endif // OLLIE9PCLIENT_H