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:
parent
f0a2185e2f
commit
e3fc0c49dd
|
|
@ -87,25 +87,23 @@ void Ollie9pClient::setActiveSessionId(const QString &id)
|
||||||
void Ollie9pClient::refreshSessions()
|
void Ollie9pClient::refreshSessions()
|
||||||
{
|
{
|
||||||
QByteArray out = run9p({"read", "session/idx"});
|
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);
|
QString raw = QString::fromUtf8(out);
|
||||||
|
|
||||||
m_sessions.clear();
|
m_sessions.clear();
|
||||||
if (!raw.isEmpty()) {
|
if (!raw.isEmpty()) {
|
||||||
for (const QString &line : raw.split('\n', Qt::SkipEmptyParts)) {
|
for (const QString &line : raw.split('\n', Qt::SkipEmptyParts)) {
|
||||||
QString trimmed = line.trimmed();
|
QStringList parts = line.split('\t');
|
||||||
if (trimmed.isEmpty()) continue;
|
// Skip lines where the first field (session name) is empty
|
||||||
QStringList parts = trimmed.split('\t');
|
if (parts.isEmpty() || parts[0].isEmpty()) continue;
|
||||||
if (parts.size() >= 2) {
|
|
||||||
QVariantMap session;
|
QVariantMap session;
|
||||||
session["id"] = parts[0];
|
session["id"] = parts[0];
|
||||||
session["state"] = parts[1];
|
session["state"] = parts.size() > 1 ? parts[1] : "";
|
||||||
session["model"] = parts.size() > 2 ? parts[2] : "";
|
session["model"] = parts.size() > 2 ? parts[2] : "";
|
||||||
session["agent"] = parts.size() > 3 ? parts[3] : "";
|
session["agent"] = parts.size() > 3 ? parts[3] : "";
|
||||||
m_sessions.append(session);
|
m_sessions.append(session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
emit sessionsChanged();
|
emit sessionsChanged();
|
||||||
|
|
||||||
// Auto-select first session if none active
|
// Auto-select first session if none active
|
||||||
|
|
@ -541,25 +539,23 @@ void Ollie9pClient::onEventReadyRead()
|
||||||
{
|
{
|
||||||
// eventwait returned the full session index — use it directly
|
// eventwait returned the full session index — use it directly
|
||||||
QByteArray data = m_eventProc->readAllStandardOutput();
|
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);
|
QString raw = QString::fromUtf8(data);
|
||||||
|
|
||||||
m_sessions.clear();
|
m_sessions.clear();
|
||||||
if (!raw.isEmpty()) {
|
if (!raw.isEmpty()) {
|
||||||
for (const QString &line : raw.split('\n', Qt::SkipEmptyParts)) {
|
for (const QString &line : raw.split('\n', Qt::SkipEmptyParts)) {
|
||||||
QString trimmed = line.trimmed();
|
QStringList parts = line.split('\t');
|
||||||
if (trimmed.isEmpty()) continue;
|
// Skip lines where the first field (session name) is empty
|
||||||
QStringList parts = trimmed.split('\t');
|
if (parts.isEmpty() || parts[0].isEmpty()) continue;
|
||||||
if (parts.size() >= 2) {
|
|
||||||
QVariantMap session;
|
QVariantMap session;
|
||||||
session["id"] = parts[0];
|
session["id"] = parts[0];
|
||||||
session["state"] = parts[1];
|
session["state"] = parts.size() > 1 ? parts[1] : "";
|
||||||
session["model"] = parts.size() > 2 ? parts[2] : "";
|
session["model"] = parts.size() > 2 ? parts[2] : "";
|
||||||
session["agent"] = parts.size() > 3 ? parts[3] : "";
|
session["agent"] = parts.size() > 3 ? parts[3] : "";
|
||||||
m_sessions.append(session);
|
m_sessions.append(session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
emit sessionsChanged();
|
emit sessionsChanged();
|
||||||
|
|
||||||
// Auto-select first session if none active
|
// Auto-select first session if none active
|
||||||
|
|
|
||||||
Reference in New Issue