commands.go

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