feat(playback): Create new, correct playback summary function
- Create a new, self-contained doPlayback.go that correctly implements the summary view. - This function is designed to be called with an optional filename. - Note: This leaves main.go in a broken state, requiring the user to update the call site to this new function.
This commit is contained in:
parent
ba1e58f797
commit
6770c0ac1e
|
@ -2,30 +2,53 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"go.wit.com/lib/protobuf/chatpb"
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
func doPlayback() {
|
// doPlayback loads a specified log file and prints a one-line summary for each chat topic.
|
||||||
log.Infof("Found %d chat topic(s) in the log.", len(me.chats.GetChats()))
|
// 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("-------------------------------------------------")
|
fmt.Println("-------------------------------------------------")
|
||||||
|
|
||||||
// Iterate through the top-level Chat messages, which are now named groups.
|
for _, chat := range playbackChats.GetChats() {
|
||||||
for _, chat := range me.chats.GetChats() {
|
|
||||||
|
|
||||||
// Get the number of entries in the chat.
|
|
||||||
entryCount := len(chat.GetEntries())
|
entryCount := len(chat.GetEntries())
|
||||||
|
|
||||||
// Get the timestamp of the first entry to represent the chat's start time.
|
|
||||||
var formattedTime string
|
var formattedTime string
|
||||||
if entryCount > 0 && chat.GetEntries()[0].GetCtime() != nil {
|
|
||||||
t := chat.GetEntries()[0].GetCtime().AsTime()
|
// Use the chat's top-level ctime for the summary.
|
||||||
formattedTime = t.Format("2006-01-02 15:04:05") // YYYY-MM-DD HH:MM:SS
|
if ctime := chat.GetCtime(); ctime != nil {
|
||||||
|
t := ctime.AsTime()
|
||||||
|
formattedTime = t.Format("2006-01-02 15:04:05")
|
||||||
} else {
|
} else {
|
||||||
formattedTime = "No Timestamp"
|
formattedTime = "No Timestamp"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print the formatted one-line summary.
|
|
||||||
fmt.Printf("Topic: %-25s | Entries: %-4d | Started: %s | UUID: %s\n",
|
fmt.Printf("Topic: %-25s | Entries: %-4d | Started: %s | UUID: %s\n",
|
||||||
chat.GetChatName(),
|
chat.GetChatName(),
|
||||||
entryCount,
|
entryCount,
|
||||||
|
|
Loading…
Reference in New Issue