wip: refactoring tui

This commit is contained in:
adamdottv
2025-05-28 10:12:08 -05:00
parent 641e9ff664
commit 5e738ce7d3
12 changed files with 938 additions and 467 deletions

View File

@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"math"
"strings"
"time"
"github.com/charmbracelet/bubbles/key"
@@ -155,6 +156,55 @@ func (m *messagesCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
}
}
case app.StorageWriteMsg:
// Handle storage write events from the TypeScript backend
keyParts := strings.Split(msg.Key, "/")
if len(keyParts) >= 4 && keyParts[0] == "session" && keyParts[1] == "message" {
sessionID := keyParts[2]
if sessionID == m.app.CurrentSession.ID {
// Convert storage message to internal format
convertedMsg, err := app.ConvertStorageMessage(msg.Content, sessionID)
if err != nil {
status.Error("Failed to convert message: " + err.Error())
return m, nil
}
// Check if message exists
messageExists := false
messageIndex := -1
for i, v := range m.messages {
if v.ID == convertedMsg.ID {
messageExists = true
messageIndex = i
break
}
}
needsRerender := false
if messageExists {
// Update existing message
m.messages[messageIndex] = *convertedMsg
delete(m.cachedContent, convertedMsg.ID)
needsRerender = true
} else {
// Add new message
if len(m.messages) > 0 {
lastMsgID := m.messages[len(m.messages)-1].ID
delete(m.cachedContent, lastMsgID)
}
m.messages = append(m.messages, *convertedMsg)
delete(m.cachedContent, m.currentMsgID)
m.currentMsgID = convertedMsg.ID
needsRerender = true
}
if needsRerender {
m.renderView()
m.viewport.GotoBottom()
}
}
}
}
spinner, cmd := m.spinner.Update(msg)