1package tui
2
3import (
4 "fmt"
5 "strings"
6
7 tea "charm.land/bubbletea/v2"
8 "charm.land/lipgloss/v2"
9 "github.com/floatpane/matcha/config"
10)
11
12func (m *Settings) updateMailingLists(msg tea.KeyPressMsg) (tea.Model, tea.Cmd) {
13 if m.confirmingDelete {
14 switch msg.String() {
15 case "y", "Y":
16 if m.listsCursor < len(m.cfg.MailingLists) {
17 m.cfg.MailingLists = append(m.cfg.MailingLists[:m.listsCursor], m.cfg.MailingLists[m.listsCursor+1:]...)
18 _ = config.SaveConfig(m.cfg)
19 if m.listsCursor >= len(m.cfg.MailingLists) && m.listsCursor > 0 {
20 m.listsCursor--
21 }
22 m.confirmingDelete = false
23 }
24 case "n", "N", "esc":
25 m.confirmingDelete = false
26 return m, nil
27 }
28 return m, nil
29 }
30
31 switch msg.String() {
32 case "up", "k":
33 itemCount := len(m.cfg.MailingLists) + 1
34 m.listsCursor = (m.listsCursor - 1 + itemCount) % itemCount
35 case keyDown, "j":
36 itemCount := len(m.cfg.MailingLists) + 1
37 m.listsCursor = (m.listsCursor + 1) % itemCount
38 case "d":
39 if m.listsCursor < len(m.cfg.MailingLists) && len(m.cfg.MailingLists) > 0 {
40 m.confirmingDelete = true
41 }
42 case "e":
43 if m.listsCursor < len(m.cfg.MailingLists) {
44 list := m.cfg.MailingLists[m.listsCursor]
45 idx := m.listsCursor
46 return m, func() tea.Msg {
47 return GoToEditMailingListMsg{
48 Index: idx,
49 Name: list.Name,
50 Addresses: strings.Join(list.Addresses, ", "),
51 }
52 }
53 }
54 case keyEnter:
55 if m.listsCursor == len(m.cfg.MailingLists) {
56 return m, func() tea.Msg { return GoToAddMailingListMsg{} }
57 }
58 }
59 return m, nil
60}
61
62func (m *Settings) viewMailingLists() string {
63 var b strings.Builder
64
65 b.WriteString(titleStyle.Render(t("settings_mailing_lists.title")) + "\n\n")
66
67 if len(m.cfg.MailingLists) == 0 {
68 b.WriteString(accountEmailStyle.Render(" " + t("settings_mailing_lists.no_lists") + "\n\n"))
69 }
70
71 for i, list := range m.cfg.MailingLists {
72 addrCount := tn("settings_mailing_lists.address_count", len(list.Addresses), map[string]interface{}{
73 keyCount: len(list.Addresses),
74 })
75 line := fmt.Sprintf("%s - %s", list.Name, accountEmailStyle.Render(addrCount))
76
77 selected := m.listsCursor == i
78 cursor := m.contentCursor(selected)
79 style := m.contentItemStyle(selected)
80 b.WriteString(style.Render(cursor+line) + "\n")
81 }
82
83 selected := m.listsCursor == len(m.cfg.MailingLists)
84 cursor := m.contentCursor(selected)
85 style := m.contentItemStyle(selected)
86 b.WriteString(style.Render(cursor+t("settings_mailing_lists.add_list")) + "\n\n")
87
88 b.WriteString(helpStyle.Render(t("settings_mailing_lists.help")))
89
90 if m.confirmingDelete {
91 listName := m.cfg.MailingLists[m.listsCursor].Name
92 dialog := DialogBoxStyle.Render(
93 lipgloss.JoinVertical(lipgloss.Center,
94 dangerStyle.Render(t("settings_mailing_lists.delete_confirm")),
95 accountEmailStyle.Render(listName),
96 HelpStyle.Render("\n(y/n)"),
97 ),
98 )
99 b.WriteString("\n\n" + dialog)
100 }
101
102 return b.String()
103}