package main import ( "fmt" "strings" "go.wit.com/lib/protobuf/chatpb" "go.wit.com/log" ) func doPlayback() { if argv.Playback.Uuid != "" { showChat(argv.Playback.Uuid) return } listChats(me.chats) } func showChat(uuid string) { chat := me.chats.FindByUuid(uuid) if chat == nil { log.Info("unknown uuid", uuid) return } listEntries(chat) } func listChats(chats *chatpb.Chats) { log.Infof("Found %d chat topic(s) in the log.", len(chats.GetChats())) fmt.Println("-------------------------------------------------") for _, chat := range chats.GetChats() { entryCount := len(chat.GetEntries()) var formattedTime string 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("-------------------------------------------------") } // print out one line for each chat entry func listEntries(chat *chatpb.Chat) { fmt.Printf("\n--- Entries for Topic: %s ---\n", chat.GetChatName()) for i, entry := range chat.GetEntries() { author := entry.GetFrom().String() var formattedTime string if ctime := entry.GetCtime(); ctime != nil { t := ctime.AsTime() formattedTime = t.Format("15:04:05") // Just the time for entry summary } else { formattedTime = "No Time" } // Create a short preview of the content contentPreview := strings.TrimSpace(entry.GetContent()) if len(contentPreview) > 60 { contentPreview = contentPreview[:57] + "..." } // Replace newlines with spaces for a clean one-line view contentPreview = strings.ReplaceAll(contentPreview, "\n", " ") fmt.Printf(" %2d. [%s] (%s): %s\n", i+1, author, formattedTime, contentPreview, ) } fmt.Println("-------------------------------------------------") }