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("-------------------------------------------------") }