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	b.state = loadedState
54	return b.getRepoCmd("config")()
55}
56
57func (b *Bubble) getRepoCmd(name string) tea.Cmd {
58	return func() tea.Msg {
59		r, err := b.repoSource.GetRepo(name)
60		if err != nil {
61			return errMsg{err}
62		}
63		b.readmeViewport.Viewport.GotoTop()
64		b.readmeViewport.Viewport.Height = b.height - verticalPadding - viewportHeightConstant
65		b.readmeViewport.Viewport.Width = boxLeftWidth - 2
66		b.readmeViewport.Viewport.SetContent(r.Readme)
67		b.boxes[1] = b.readmeViewport
68		b.activeBox = 1
69		return nil
70	}
71}