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 if m.listsCursor > 0 {
34 m.listsCursor--
35 }
36 case "down", "j":
37 if m.listsCursor < len(m.cfg.MailingLists) {
38 m.listsCursor++
39 }
40 case "d":
41 if m.listsCursor < len(m.cfg.MailingLists) && len(m.cfg.MailingLists) > 0 {
42 m.confirmingDelete = true
43 }
44 case "e":
45 if m.listsCursor < len(m.cfg.MailingLists) {
46 list := m.cfg.MailingLists[m.listsCursor]
47 idx := m.listsCursor
48 return m, func() tea.Msg {
49 return GoToEditMailingListMsg{
50 Index: idx,
51 Name: list.Name,
52 Addresses: strings.Join(list.Addresses, ", "),
53 }
54 }
55 }
56 case "enter":
57 if m.listsCursor == len(m.cfg.MailingLists) {
58 return m, func() tea.Msg { return GoToAddMailingListMsg{} }
59 }
60 }
61 return m, nil
62}
63
64func (m *Settings) viewMailingLists() string {
65 var b strings.Builder
66
67 b.WriteString(titleStyle.Render(t("settings_mailing_lists.title")) + "\n\n")
68
69 if len(m.cfg.MailingLists) == 0 {
70 b.WriteString(accountEmailStyle.Render(" " + t("settings_mailing_lists.no_lists") + "\n\n"))
71 }
72
73 for i, list := range m.cfg.MailingLists {
74 addrCount := tn("settings_mailing_lists.address_count", len(list.Addresses), map[string]interface{}{
75 "count": len(list.Addresses),
76 })
77 line := fmt.Sprintf("%s - %s", list.Name, accountEmailStyle.Render(addrCount))
78
79 cursor := " "
80 style := accountItemStyle
81 if m.listsCursor == i {
82 cursor = "> "
83 style = selectedAccountItemStyle
84 }
85 b.WriteString(style.Render(cursor+line) + "\n")
86 }
87
88 cursor := " "
89 style := accountItemStyle
90 if m.listsCursor == len(m.cfg.MailingLists) {
91 cursor = "> "
92 style = selectedAccountItemStyle
93 }
94 b.WriteString(style.Render(cursor+t("settings_mailing_lists.add_list")) + "\n\n")
95
96 b.WriteString(helpStyle.Render(t("settings_mailing_lists.help")))
97
98 if m.confirmingDelete {
99 listName := m.cfg.MailingLists[m.listsCursor].Name
100 dialog := DialogBoxStyle.Render(
101 lipgloss.JoinVertical(lipgloss.Center,
102 dangerStyle.Render(t("settings_mailing_lists.delete_confirm")),
103 accountEmailStyle.Render(listName),
104 HelpStyle.Render("\n(y/n)"),
105 ),
106 )
107 b.WriteString("\n\n" + dialog)
108 }
109
110 return b.String()
111}