summaryrefslogtreecommitdiff
path: root/helpers.go
diff options
context:
space:
mode:
Diffstat (limited to 'helpers.go')
-rw-r--r--helpers.go84
1 files changed, 6 insertions, 78 deletions
diff --git a/helpers.go b/helpers.go
index d7819e5..e24aee3 100644
--- a/helpers.go
+++ b/helpers.go
@@ -68,88 +68,16 @@ func (all *Chats) AddFile(filename string) error {
return err
}
- // New logic to handle both flat and nested formats
- for _, chatOrGroup := range logData.GetChats() {
- if len(chatOrGroup.GetEntries()) > 0 {
- // This is a new-style Chat group with entries
- for _, entry := range chatOrGroup.GetEntries() {
- // Convert the ChatEntry into a new Chat object for the flat list.
- newChat := convertEntryToChat(entry, filename)
- if newChat != nil {
- newChat.VerifyUuid()
- all.AppendByUuid(newChat)
- }
- }
- } else {
- // This is an old-style flat Chat entry.
- // We still process it to handle its external content file correctly.
- newChat := convertChatToChat(chatOrGroup, filename)
- if newChat != nil {
- newChat.VerifyUuid()
- all.AppendByUuid(newChat)
- }
- }
+ // New, simplified logic assumes all files use the new nested format.
+ for _, chatGroup := range logData.GetChats() {
+ // It's now a direct append since the structure is the same.
+ // We still clone to ensure the appended data is a safe copy.
+ newChatGroup := proto.Clone(chatGroup).(*Chat)
+ all.AppendByUuid(newChatGroup)
}
return nil
}
-// convertChatToChat handles an old-style Chat message. It creates a clean
-// copy and resolves its external content file.
-func convertChatToChat(chat *Chat, filename string) *Chat {
- if chat == nil {
- return nil
- }
-
- // Manually create a ChatEntry from the Chat fields to reuse the logic.
- entry := &ChatEntry{
- From: chat.GetFrom(),
- Ctime: chat.GetCtime(),
- Content: chat.GetContent(),
- Table: chat.GetTable(),
- ToolCalls: chat.GetToolCalls(),
- ContentFile: chat.GetContentFile(),
- Uuid: chat.GetUuid(),
- Snippets: chat.GetSnippets(),
- }
- return convertEntryToChat(entry, filename)
-}
-
-// convertEntryToChat creates a new Chat object from a ChatEntry's data
-// and resolves its external content file.
-func convertEntryToChat(entry *ChatEntry, filename string) *Chat {
- if entry == nil {
- return nil
- }
-
- // Create a new Chat object and copy the fields.
- newChat := &Chat{
- From: entry.GetFrom(),
- Ctime: entry.GetCtime(),
- Table: entry.GetTable(),
- ToolCalls: entry.GetToolCalls(),
- Snippets: entry.GetSnippets(),
- Uuid: entry.GetUuid(),
- }
-
- // Handle content: prefer content_file, fallback to content.
- var content string
- if contentFile := entry.GetContentFile(); contentFile != "" {
- logDir := filepath.Dir(filename)
- contentPath := filepath.Join(logDir, contentFile)
- contentBytes, err := os.ReadFile(contentPath)
- if err != nil {
- content = fmt.Sprintf("--- ERROR: Could not read content file %s: %v ---", contentPath, err)
- } else {
- content = string(contentBytes)
- }
- } else {
- content = entry.GetContent()
- }
- newChat.Content = content
-
- return newChat
-}
-
func (chats *Chats) VerifyUuids() bool {
var changed bool