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}