diff --git a/tui/tui.go b/tui/tui.go index 979ce2e..feea193 100644 --- a/tui/tui.go +++ b/tui/tui.go @@ -2933,7 +2933,7 @@ func (m model) chatDetailLines(item Item, width int) []string { if thread := m.threadLines(item, width); len(thread) > 0 { lines = append(lines, "", dim(tuiRule(width)), bold("Thread")) lines = append(lines, thread...) - } else if message := strings.TrimSpace(firstNonEmpty(item.Text, item.Detail, item.Title)); message != "" { + } else if message := chatBodyText(item); message != "" { lines = append(lines, "", dim(tuiRule(width)), bold("Message")) lines = append(lines, chatBubbleLines(item, message, true, width)...) } @@ -3138,7 +3138,7 @@ func (m model) threadLines(selected Item, width int) []string { if threadKey(item) != key { continue } - text := firstNonEmpty(item.Text, item.Detail, item.Title) + text := chatBodyText(item) lines = append(lines, chatBubbleLines(item, text, item.ID == selected.ID, width)...) } if len(lines) <= 1 { @@ -3165,6 +3165,10 @@ func chatBubbleLines(item Item, text string, selected bool, width int) []string return lines } +func chatBodyText(item Item) string { + return strings.TrimSpace(firstNonEmpty(item.Detail, item.Text, item.Title)) +} + func chatPropertyLines(item Item) []string { return compactNonEmpty([]string{ fieldLine("channel", item.Container), diff --git a/tui/tui_test.go b/tui/tui_test.go index 5371c64..daea92d 100644 --- a/tui/tui_test.go +++ b/tui/tui_test.go @@ -425,6 +425,20 @@ func TestChatDetailDoesNotTreatMetadataAsMessageBody(t *testing.T) { } } +func TestChatDetailPrefersExplicitReadableDetail(t *testing.T) { + m := newModel(Options{ + Title: "slacrawl archive", + Layout: LayoutChat, + Items: []Item{ + Row{Kind: "message", ID: "m1", Container: "general", Author: "alice", Title: "raw", Text: "<@U1> raw body", Detail: "Alice readable body"}.ItemForLayout(LayoutChat), + }, + }) + joined := stripANSI(strings.Join(m.detailLinesForWidth(m.items[0], 60), "\n")) + if !strings.Contains(joined, "Alice readable body") || strings.Contains(joined, "<@U1> raw body") { + t.Fatalf("chat detail should prefer readable explicit detail:\n%s", joined) + } +} + func TestDetailModeToggleUsesCompactReadableDetail(t *testing.T) { m := newModel(Options{ Title: "discrawl archive",