session rename: eventwait stream for live refresh, fix infinite loop

This commit is contained in:
Levi Neely 2026-08-01 16:14:43 +02:00
parent cd0f92e16d
commit 76f97c42eb
2 changed files with 37 additions and 0 deletions

View File

@ -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<int, QProcess::ExitStatus>::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

View File

@ -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