1package tui
2
3import (
4 "smoothie/tui/bubbles/commits"
5 "smoothie/tui/bubbles/repo"
6 "smoothie/tui/bubbles/selection"
7
8 tea "github.com/charmbracelet/bubbletea"
9 "github.com/charmbracelet/lipgloss"
10 "github.com/muesli/termenv"
11)
12
13type windowMsg struct{}
14type errMsg struct{ err error }
15
16func (e errMsg) Error() string {
17 return e.err.Error()
18}
19
20func (b *Bubble) windowChangesCmd() tea.Msg {
21 w := <-b.windowChanges
22 b.width = w.Width
23 b.height = w.Height
24 return windowMsg{}
25}
26
27func (b *Bubble) setupCmd() tea.Msg {
28 lipgloss.SetColorProfile(termenv.ANSI256)
29 b.repos = b.repoSource.AllRepos()
30 mes := make([]MenuEntry, 0)
31 rs := make([]string, 0)
32 for _, me := range b.config.Menu {
33 mes = append(mes, me)
34 }
35 if b.config.ShowAllRepos {
36 OUTER:
37 for _, r := range b.repos {
38 for _, me := range mes {
39 if r.Name == me.Repo {
40 continue OUTER
41 }
42 }
43 mes = append(mes, MenuEntry{Name: r.Name, Repo: r.Name})
44 }
45 }
46 b.repoMenu = mes
47 for _, me := range mes {
48 rs = append(rs, me.Name)
49 }
50 b.repoSelect = selection.NewBubble(rs)
51 b.boxes[0] = b.repoSelect
52 b.commitsLog = commits.NewBubble(
53 b.height-verticalPadding-2,
54 boxRightWidth-horizontalPadding-2,
55 b.repoSource.GetCommits(200),
56 )
57 msg := b.getRepoCmd("config")()
58 b.activeBox = 0
59 b.state = loadedState
60 return msg
61}
62
63func (b *Bubble) getRepoCmd(name string) tea.Cmd {
64 var tmplConfig *Config
65 if name == "config" {
66 tmplConfig = b.config
67 }
68 h := b.height - verticalPadding - viewportHeightConstant
69 w := boxRightWidth - 2
70 rb := repo.NewBubble(b.repoSource, name, w, h, tmplConfig)
71 b.boxes[1] = rb
72 return rb.Init()
73}