gui: add activeSessionPaused property for reactive paused state
The isSessionPaused() Q_INVOKABLE didn't trigger QML binding re-evaluation on pause/resume. New property with proper signal makes ChatPane bindings reactive. - activeSessionPaused property tracks active session's paused state - Updated on refreshSessions() and switchAgent() - ChatPane.qml uses property instead of function call
This commit is contained in:
parent
4be78447fa
commit
91f295dc2d
|
|
@ -95,7 +95,7 @@ Item {
|
|||
width: 10; height: 10; radius: 5
|
||||
color: {
|
||||
if (!ollie.activeAgentId) return "#9e9e9e" // gray when no agent
|
||||
if (ollie.activeSessionId && ollie.isSessionPaused(ollie.activeSessionId)) return "#9e9e9e" // gray when paused
|
||||
if (ollie.activeSessionPaused) return "#9e9e9e" // gray when paused
|
||||
if (ollie.activeState === "idle") return "#4caf50"
|
||||
if (ollie.activeState.startsWith("calling")) return "#ff9800"
|
||||
return "#2196f3"
|
||||
|
|
@ -105,7 +105,7 @@ Item {
|
|||
Label {
|
||||
text: {
|
||||
if (!ollie.activeAgentId) return ""
|
||||
if (ollie.activeSessionId && ollie.isSessionPaused(ollie.activeSessionId)) return "inactive"
|
||||
if (ollie.activeSessionPaused) return "inactive"
|
||||
return ollie.activeState
|
||||
}
|
||||
opacity: 0.7
|
||||
|
|
@ -405,10 +405,10 @@ Item {
|
|||
if (!ollie.daemonConnected) return "Not connected"
|
||||
if (!ollie.activeSessionId) return "No session"
|
||||
if (!ollie.activeAgentId) return "No agent"
|
||||
if (ollie.isSessionPaused(ollie.activeSessionId)) return "Session paused"
|
||||
if (ollie.activeSessionPaused) return "Session paused"
|
||||
return "B1=sel B2=exec B3=plumb B1+B2=cut B1+B3=paste"
|
||||
}
|
||||
enabled: ollie.daemonConnected && ollie.activeSessionId !== "" && ollie.activeAgentId !== "" && !ollie.isSessionPaused(ollie.activeSessionId)
|
||||
enabled: ollie.daemonConnected && ollie.activeSessionId !== "" && ollie.activeAgentId !== "" && !ollie.activeSessionPaused
|
||||
wrapMode: TextEdit.Wrap
|
||||
selectByMouse: true
|
||||
persistentSelection: true
|
||||
|
|
|
|||
|
|
@ -368,6 +368,13 @@ void Ollie9pClient::refreshSessions()
|
|||
|
||||
emit sessionsChanged();
|
||||
|
||||
// Update active session paused state
|
||||
bool wasPaused = m_activeSessionPaused;
|
||||
m_activeSessionPaused = isSessionPaused(m_activeSessionId);
|
||||
if (m_activeSessionPaused != wasPaused) {
|
||||
emit activeSessionPausedChanged();
|
||||
}
|
||||
|
||||
// Handle active session/agent removal
|
||||
if (!m_activeSessionId.isEmpty()) {
|
||||
if (!activeSessionFound) {
|
||||
|
|
@ -581,9 +588,16 @@ void Ollie9pClient::switchAgent(const QString &sessionId, const QString &agentId
|
|||
// Use cached state from live tracking if available, otherwise default to idle
|
||||
m_activeState = m_agentStateValues.value(agentKey(sessionId, agentId), "idle");
|
||||
|
||||
// Update paused state
|
||||
bool wasPaused = m_activeSessionPaused;
|
||||
m_activeSessionPaused = isSessionPaused(sessionId);
|
||||
|
||||
emit activeSessionIdChanged();
|
||||
emit activeAgentIdChanged();
|
||||
emit activeStateChanged();
|
||||
if (m_activeSessionPaused != wasPaused) {
|
||||
emit activeSessionPausedChanged();
|
||||
}
|
||||
|
||||
startActiveAgentStreams();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ class Ollie9pClient : public QObject
|
|||
Q_PROPERTY(QString activeSessionId READ activeSessionId WRITE setActiveSessionId NOTIFY activeSessionIdChanged)
|
||||
Q_PROPERTY(QString activeAgentId READ activeAgentId NOTIFY activeAgentIdChanged)
|
||||
Q_PROPERTY(QString activeState READ activeState NOTIFY activeStateChanged)
|
||||
Q_PROPERTY(bool activeSessionPaused READ activeSessionPaused NOTIFY activeSessionPausedChanged)
|
||||
Q_PROPERTY(bool rootBackendsLoaded READ rootBackendsLoaded NOTIFY rootBackendsLoadedChanged)
|
||||
Q_PROPERTY(QStringList availableBackends READ availableBackends NOTIFY availableBackendsChanged)
|
||||
Q_PROPERTY(bool rootAgentsLoaded READ rootAgentsLoaded NOTIFY rootAgentsLoadedChanged)
|
||||
|
|
@ -42,6 +43,7 @@ public:
|
|||
Q_INVOKABLE void setActiveSessionId(const QString &id);
|
||||
QString activeAgentId() const { return m_agentId; }
|
||||
QString activeState() const { return m_activeState; }
|
||||
bool activeSessionPaused() const { return m_activeSessionPaused; }
|
||||
|
||||
bool rootBackendsLoaded() const { return m_rootBackendsLoaded; }
|
||||
QStringList availableBackends() const { return m_availableBackends; }
|
||||
|
|
@ -99,6 +101,7 @@ signals:
|
|||
void activeSessionIdChanged();
|
||||
void activeAgentIdChanged();
|
||||
void activeStateChanged();
|
||||
void activeSessionPausedChanged();
|
||||
void agentStateChanged(const QString &sessionId, const QString &agentId, const QString &state);
|
||||
void chatReceived(const QString &text);
|
||||
void bypassRequested(const QString &sessionId, const QString &agentId, const QString &id, const QString &cmd, const QString &cwd);
|
||||
|
|
@ -133,6 +136,7 @@ private:
|
|||
QString m_activeSessionId;
|
||||
QString m_activeState = "idle";
|
||||
QString m_agentId;
|
||||
bool m_activeSessionPaused = false;
|
||||
|
||||
// Root data cache
|
||||
bool m_rootBackendsLoaded = false;
|
||||
|
|
|
|||
Loading…
Reference in New Issue