regex/doPlayback.go

61 lines
1.7 KiB
Go

package main
import (
"fmt"
"os"
"go.wit.com/lib/protobuf/chatpb"
"go.wit.com/log"
)
// doPlayback loads a specified log file and prints a one-line summary for each chat topic.
// If no filename is provided, it summarizes the current in-memory chat session.
func doPlayback(filename string) {
var playbackChats *chatpb.Chats
var err error
// If a filename is provided, load that file. Otherwise, use the existing session.
if filename != "" {
log.Infof("Loading log file for playback: %s", filename)
data, err := os.ReadFile(filename)
if err != nil {
log.Fatalf("Failed to read playback file: %v", err)
}
playbackChats, err = chatpb.UnmarshalChatsTEXT(data)
if err != nil {
log.Fatalf("Failed to parse playback file: %v", err)
}
} else {
log.Info("No log file specified. Displaying summary of current conversation state.")
playbackChats = me.chats
}
// Ensure all chats and entries have UUIDs before printing.
verifyUuids(playbackChats)
fmt.Println("-------------------------------------------------")
log.Infof("Found %d chat topic(s).", len(playbackChats.GetChats()))
fmt.Println("-------------------------------------------------")
for _, chat := range playbackChats.GetChats() {
entryCount := len(chat.GetEntries())
var formattedTime string
// Use the chat's top-level ctime for the summary.
if ctime := chat.GetCtime(); ctime != nil {
t := ctime.AsTime()
formattedTime = t.Format("2006-01-02 15:04:05")
} else {
formattedTime = "No Timestamp"
}
fmt.Printf("Topic: %-25s | Entries: %-4d | Started: %s | UUID: %s\n",
chat.GetChatName(),
entryCount,
formattedTime,
chat.GetUuid(),
)
}
fmt.Println("-------------------------------------------------")
}