fix(gui): stop trimming lines before splitting by tab

The previous fix stopped trimming the whole output but still called
.trimmed() on each individual line, which stripped trailing tabs from
empty-session lines like "testsession2\t\t\t\t\t". Now we split
by tab directly without any trimming — empty fields stay as empty
strings and the parts count stays at 6.
This commit is contained in:
Levi Neely 2026-08-01 20:20:01 +02:00
parent f0a2185e2f
commit e3fc0c49dd
1 changed files with 20 additions and 24 deletions

View File

@ -87,23 +87,21 @@ void Ollie9pClient::setActiveSessionId(const QString &id)
void Ollie9pClient::refreshSessions()
{
QByteArray out = run9p({"read", "session/idx"});
// Don't trim the whole output — trailing tabs are significant fields
// Don't trim — trailing tabs are significant fields
QString raw = QString::fromUtf8(out);
m_sessions.clear();
if (!raw.isEmpty()) {
for (const QString &line : raw.split('\n', Qt::SkipEmptyParts)) {
QString trimmed = line.trimmed();
if (trimmed.isEmpty()) continue;
QStringList parts = trimmed.split('\t');
if (parts.size() >= 2) {
QVariantMap session;
session["id"] = parts[0];
session["state"] = parts[1];
session["model"] = parts.size() > 2 ? parts[2] : "";
session["agent"] = parts.size() > 3 ? parts[3] : "";
m_sessions.append(session);
}
QStringList parts = line.split('\t');
// Skip lines where the first field (session name) is empty
if (parts.isEmpty() || parts[0].isEmpty()) continue;
QVariantMap session;
session["id"] = parts[0];
session["state"] = parts.size() > 1 ? parts[1] : "";
session["model"] = parts.size() > 2 ? parts[2] : "";
session["agent"] = parts.size() > 3 ? parts[3] : "";
m_sessions.append(session);
}
}
emit sessionsChanged();
@ -541,23 +539,21 @@ void Ollie9pClient::onEventReadyRead()
{
// eventwait returned the full session index — use it directly
QByteArray data = m_eventProc->readAllStandardOutput();
// Don't trim the whole output — trailing tabs are significant fields
// Don't trim — trailing tabs are significant fields
QString raw = QString::fromUtf8(data);
m_sessions.clear();
if (!raw.isEmpty()) {
for (const QString &line : raw.split('\n', Qt::SkipEmptyParts)) {
QString trimmed = line.trimmed();
if (trimmed.isEmpty()) continue;
QStringList parts = trimmed.split('\t');
if (parts.size() >= 2) {
QVariantMap session;
session["id"] = parts[0];
session["state"] = parts[1];
session["model"] = parts.size() > 2 ? parts[2] : "";
session["agent"] = parts.size() > 3 ? parts[3] : "";
m_sessions.append(session);
}
QStringList parts = line.split('\t');
// Skip lines where the first field (session name) is empty
if (parts.isEmpty() || parts[0].isEmpty()) continue;
QVariantMap session;
session["id"] = parts[0];
session["state"] = parts.size() > 1 ? parts[1] : "";
session["model"] = parts.size() > 2 ? parts[2] : "";
session["agent"] = parts.size() > 3 ? parts[3] : "";
m_sessions.append(session);
}
}
emit sessionsChanged();