diff --git a/gui/main.qml b/gui/main.qml index 81c5b1a..99184da 100644 --- a/gui/main.qml +++ b/gui/main.qml @@ -155,7 +155,7 @@ ApplicationWindow { function startRename(index) { var item = sessionTreeModel.get(index) - if (item.type === "session") { + if (item.type === "session" || item.type === "agent") { renamingIndex = index renamingText = item.displayName } @@ -165,9 +165,15 @@ ApplicationWindow { if (renamingIndex < 0) return var item = sessionTreeModel.get(renamingIndex) var newName = renamingText.trim() - if (newName !== "" && newName !== item.id) { - if (ollie.renameSession(item.id, newName)) { - sessionTreeModel.set(renamingIndex, { id: newName, displayName: newName }) + if (newName !== "" && newName !== item.displayName) { + if (item.type === "session") { + if (ollie.renameSession(item.id, newName)) { + sessionTreeModel.set(renamingIndex, { id: newName, displayName: newName }) + } + } else if (item.type === "agent") { + if (ollie.renameAgent(item.parentId, item.agentId, newName)) { + sessionTreeModel.set(renamingIndex, { agentId: newName, displayName: newName }) + } } } renamingIndex = -1 @@ -556,7 +562,7 @@ ApplicationWindow { } } onDoubleClicked: { - if (type === "session") { + if (type === "session" || type === "agent") { startRename(parent.modelIndex) } } diff --git a/gui/ollie9pclient.cpp b/gui/ollie9pclient.cpp index b7ce544..70a6492 100644 --- a/gui/ollie9pclient.cpp +++ b/gui/ollie9pclient.cpp @@ -322,6 +322,38 @@ bool Ollie9pClient::renameSession(const QString &sessionId, const QString &newNa return true; } +bool Ollie9pClient::renameAgent(const QString &sessionId, const QString &agentId, const QString &newName) +{ + if (sessionId.isEmpty() || agentId.isEmpty() || newName.isEmpty()) return false; + + QString bin = ollie9pBin(); + if (bin.isEmpty()) { + qDebug() << "renameAgent: ollie-9p not found, cannot rename"; + return false; + } + + QProcess proc; + proc.setProgram(bin); + proc.setArguments({"-a", serverAddr(), "mv", + "session/" + sessionId + "/agent/" + agentId, + "session/" + sessionId + "/agent/" + newName}); + proc.start(); + proc.waitForFinished(5000); + + if (proc.exitCode() != 0) { + qDebug() << "renameAgent failed:" << QString::fromUtf8(proc.readAllStandardError()).trimmed(); + return false; + } + + if (m_activeSessionId == sessionId && m_agentId == agentId) { + m_agentId = newName; + emit activeAgentIdChanged(); + } + + refreshSessions(); + return true; +} + // --- Root data loading (lazy) --- void Ollie9pClient::ensureRootDataLoaded() diff --git a/gui/ollie9pclient.h b/gui/ollie9pclient.h index fb38b10..5145aaa 100644 --- a/gui/ollie9pclient.h +++ b/gui/ollie9pclient.h @@ -67,6 +67,7 @@ public: Q_INVOKABLE QStringList getAvailableModels(const QString &backend) const; Q_INVOKABLE bool createSession(const QString &cwd, const QString &name, const QString &backend, const QString &model, const QString &agent, const QString &remote); Q_INVOKABLE bool renameSession(const QString &sessionId, const QString &newName); + Q_INVOKABLE bool renameAgent(const QString &sessionId, const QString &agentId, const QString &newName); signals: void sessionsChanged();