commands.go

 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.TrueColor)
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}