diff --git a/cmd/cli/cli.go b/cmd/cli/cli.go index e6ca96d..27dc3a4 100644 --- a/cmd/cli/cli.go +++ b/cmd/cli/cli.go @@ -2,13 +2,18 @@ package main import ( "fmt" + "os" "time" + "github.com/charmbracelet/bubbles/key" + "github.com/charmbracelet/bubbles/spinner" + tea "github.com/charmbracelet/bubbletea" + "github.com/charmbracelet/lipgloss" "github.com/taigrr/gico/commits" "github.com/taigrr/gico/graph/term" ) -func main() { +func xmain() { n := time.Now() repoPaths, err := commits.GetMRRepos() if err != nil { @@ -30,3 +35,67 @@ func main() { fmt.Println("year:") fmt.Println(term.GetYearUnicode(freq)) } + +type errMsg error + +type model struct { + spinner spinner.Model + quitting bool + err error +} + +var quitKeys = key.NewBinding( + key.WithKeys("q", "esc", "ctrl+c"), + key.WithHelp("", "press q to quit"), +) + +func initialModel() model { + s := spinner.New() + s.Spinner = spinner.Dot + s.Style = lipgloss.NewStyle().Foreground(lipgloss.Color("205")) + return model{spinner: s} +} + +func (m model) Init() tea.Cmd { + return m.spinner.Tick +} + +func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + switch msg := msg.(type) { + + case tea.KeyMsg: + if key.Matches(msg, quitKeys) { + m.quitting = true + return m, tea.Quit + + } + return m, nil + case errMsg: + m.err = msg + return m, nil + + default: + var cmd tea.Cmd + m.spinner, cmd = m.spinner.Update(msg) + return m, cmd + } +} + +func (m model) View() string { + if m.err != nil { + return m.err.Error() + } + str := fmt.Sprintf("\n\n %s Loading forever... %s\n\n", m.spinner.View(), quitKeys.Help().Desc) + if m.quitting { + return str + "\n" + } + return str +} + +func main() { + p := tea.NewProgram(initialModel()) + if _, err := p.Run(); err != nil { + fmt.Println(err) + os.Exit(1) + } +} diff --git a/cmd/commithook/gico.go b/cmd/commithook/gico.go index a0ed63b..8e06e9c 100644 --- a/cmd/commithook/gico.go +++ b/cmd/commithook/gico.go @@ -6,6 +6,7 @@ import ( "os" "time" + "github.com/taigrr/gico/types" "github.com/taigrr/gico/ui" ) diff --git a/cmd/mgfetch/mgfetch.go b/cmd/mgfetch/mgfetch.go index 9a8a28b..0837b1d 100644 --- a/cmd/mgfetch/mgfetch.go +++ b/cmd/mgfetch/mgfetch.go @@ -14,7 +14,11 @@ type Repo git.Repository func main() { year := time.Now().Year() - 1 authors := []string{"Groot"} - gfreq, err := commits.FrequencyChan(year, authors) + mr, err := commits.GetMRRepos() + if err != nil { + panic(err) + } + gfreq, err := mr.FrequencyChan(year, authors) if err != nil { panic(err) } diff --git a/go.mod b/go.mod index d978a95..2a08592 100644 --- a/go.mod +++ b/go.mod @@ -2,14 +2,15 @@ module github.com/taigrr/gico go 1.19 -replace github.com/charmbracelet/bubbles => github.com/taigrr/bubbles v0.10.5 +//replace github.com/charmbracelet/bubbles => github.com/taigrr/bubbles v0.10.5 -replace github.com/muesli/termenv => github.com/taigrr/termenv v0.11.2 +//replace github.com/muesli/termenv => github.com/taigrr/termenv v0.11.2 -replace github.com/charmbracelet/lipgloss => github.com/taigrr/lipgloss v0.5.1 +//replace github.com/charmbracelet/lipgloss => github.com/taigrr/lipgloss v0.5.1 require ( github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b + github.com/charmbracelet/bubbles v0.15.0 github.com/charmbracelet/bubbletea v0.23.1 github.com/charmbracelet/lipgloss v0.6.0 github.com/go-git/go-git/v5 v5.5.2 @@ -23,9 +24,10 @@ require ( require ( github.com/Microsoft/go-winio v0.6.0 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230124153114-0acdc8ae009b // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230127202215-f7f10de891d5 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/cloudflare/circl v1.3.1 // indirect + github.com/aymanbagabas/go-osc52 v1.0.3 // indirect + github.com/cloudflare/circl v1.3.2 // indirect github.com/containerd/console v1.0.3 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect diff --git a/go.sum b/go.sum index a463f89..1530e8a 100644 --- a/go.sum +++ b/go.sum @@ -3,8 +3,8 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/ProtonMail/go-crypto v0.0.0-20230124153114-0acdc8ae009b h1:1DHH9haxfhaVM8owXQjLdn7UP4AkDfzSdiRoLdcSCqE= -github.com/ProtonMail/go-crypto v0.0.0-20230124153114-0acdc8ae009b/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= +github.com/ProtonMail/go-crypto v0.0.0-20230127202215-f7f10de891d5 h1:Fu4D/i1HBoWql9xVIfW50Kohujz+T3xXPV60JVb3Fao= +github.com/ProtonMail/go-crypto v0.0.0-20230127202215-f7f10de891d5/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= @@ -15,12 +15,20 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFI github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/aymanbagabas/go-osc52 v1.0.3 h1:DTwqENW7X9arYimJrPeGZcV0ln14sGMt3pHZspWD+Mg= +github.com/aymanbagabas/go-osc52 v1.0.3/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/charmbracelet/bubbles v0.15.0 h1:c5vZ3woHV5W2b8YZI1q7v4ZNQaPetfHuoHzx+56Z6TI= +github.com/charmbracelet/bubbles v0.15.0/go.mod h1:Y7gSFbBzlMpUDR/XM9MhZI374Q+1p1kluf1uLl8iK74= github.com/charmbracelet/bubbletea v0.23.1 h1:CYdteX1wCiCzKNUlwm25ZHBIc1GXlYFyUIte8WPvhck= github.com/charmbracelet/bubbletea v0.23.1/go.mod h1:JAfGK/3/pPKHTnAS8JIE2u9f61BjWTQY57RbT25aMXU= +github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao= +github.com/charmbracelet/lipgloss v0.6.0 h1:1StyZB9vBSOyuZxQUcUwGr17JmojPNm87inij9N3wJY= +github.com/charmbracelet/lipgloss v0.6.0/go.mod h1:tHh2wr34xcHjC2HCXIlGSG1jaDF0S0atAUvBMP6Ppuk= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/circl v1.3.1 h1:4OVCZRL62ijwEwxnF6I7hLwxvIYi3VaZt8TflkqtrtA= -github.com/cloudflare/circl v1.3.1/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= +github.com/cloudflare/circl v1.3.2 h1:VWp8dY3yH69fdM7lM6A1+NhhVoDu9vqK0jOgmkQHFWk= +github.com/cloudflare/circl v1.3.2/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -59,6 +67,7 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= @@ -82,6 +91,9 @@ github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIf github.com/muesli/reflow v0.2.1-0.20210115123740-9e1d0d53df68/go.mod h1:Xk+z4oIWdQqJzsxyjgl3P22oYZnHdZ8FFTHAQQt5BMQ= github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= +github.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs= +github.com/muesli/termenv v0.13.0 h1:wK20DRpJdDX8b7Ek2QfhvqhRQFZ237RGRO0RQ/Iqdy0= +github.com/muesli/termenv v0.13.0/go.mod h1:sP1+uffeLaEYpyOTb8pLCUctGcGLnoFjSn4YJK5e2bc= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= @@ -93,6 +105,7 @@ github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= @@ -108,14 +121,10 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/taigrr/lipgloss v0.5.1 h1:lzmrLEzXyR/AOP/zGPPuIlmNuBKX81F3gHqn3/8e+bc= -github.com/taigrr/lipgloss v0.5.1/go.mod h1:EZLha/HbzEt7cYqdFPovlqy5FZPj0xFhg5SaqxScmgs= github.com/taigrr/mg v0.0.1 h1:dNAgYfmme2hTRLZZ9zazzFNXGKTQvXZ4qH+87ti+KYA= github.com/taigrr/mg v0.0.1/go.mod h1:so3JCKn+rMZmRDAIOnYhsHDAQbBNEaxyNZVXZ5VbLeg= github.com/taigrr/simplecolorpalettes v0.9.6 h1:eEFLPdI1o34t+YHs+QlgxcpN4zOg+5S3SlWt2EMS/6o= github.com/taigrr/simplecolorpalettes v0.9.6/go.mod h1:MFLQqI3JOfSc+8GiO3amYfzBiozxITaQi+F1iEV8XpQ= -github.com/taigrr/termenv v0.11.2 h1:oqZR08HjGIzFWml4ROmoFvWi3KRG4UZYTPRrI9/lrPA= -github.com/taigrr/termenv v0.11.2/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/graph/term/term.go b/graph/term/term.go index 87d73ef..31ed667 100644 --- a/graph/term/term.go +++ b/graph/term/term.go @@ -28,7 +28,7 @@ func GetWeekUnicode(frequencies []int) string { func drawWeekUnicode(c []sc.SimpleColor) string { // o := termenv.NewOutput(os.Stdout) s := strings.Builder{} - o := termenv.NewOutputWithProfile(os.Stdout, termenv.TrueColor) + o := termenv.NewOutput(os.Stdout, termenv.WithProfile(termenv.TrueColor)) for w, color := range c { style := o.String(block).Foreground(termenv.TrueColor.Color(color.ToHex())) s.WriteString(style.String()) @@ -54,7 +54,7 @@ func GetYearUnicode(frequencies []int) string { func drawYearUnicode(c []sc.SimpleColor) string { // o := termenv.NewOutput(os.Stdout) var s strings.Builder - o := termenv.NewOutputWithProfile(os.Stdout, termenv.TrueColor) + o := termenv.NewOutput(os.Stdout, termenv.WithProfile(termenv.TrueColor)) weekRows := [7][]sc.SimpleColor{{}} for i := 0; i < 7; i++ { weekRows[i] = []sc.SimpleColor{} diff --git a/ui/bb.go b/ui/bb.go index 71801d7..b1901e1 100644 --- a/ui/bb.go +++ b/ui/bb.go @@ -5,14 +5,13 @@ import ( "os" tea "github.com/charmbracelet/bubbletea" - "github.com/charmbracelet/lipgloss" "github.com/taigrr/gico/ui/graph" ) func InteractiveGraph() { m := graph.New() - df := lipgloss.NewDoeFoot() - m = m.UpdateDoeFoot(df) + // df := lipgloss.NewDoeFoot() + // m = m.UpdateDoeFoot(df) p := tea.NewProgram(m) if err := p.Start(); err != nil { diff --git a/ui/graph/graph.go b/ui/graph/graph.go index ff2e012..b3aca0d 100644 --- a/ui/graph/graph.go +++ b/ui/graph/graph.go @@ -2,13 +2,12 @@ package graph import ( tea "github.com/charmbracelet/bubbletea" - "github.com/charmbracelet/lipgloss" "github.com/taigrr/gico/ui/graph/help" ) type Graph struct { Help help.Help - df lipgloss.DoeFoot + // df lipgloss.DoeFoot } func (g Graph) Update(msg tea.Msg) (tea.Model, tea.Cmd) { @@ -50,8 +49,8 @@ func New() Graph { return g } -func (g Graph) UpdateDoeFoot(df lipgloss.DoeFoot) Graph { - g.df = df - g.Help = g.Help.UpdateDoeFoot(df) - return g -} +//func (g Graph) UpdateDoeFoot(df lipgloss.DoeFoot) Graph { +// g.df = df +// g.Help = g.Help.UpdateDoeFoot(df) +// return g +//} diff --git a/ui/graph/help/help.go b/ui/graph/help/help.go index 1c56322..c76e70b 100644 --- a/ui/graph/help/help.go +++ b/ui/graph/help/help.go @@ -2,16 +2,16 @@ package help import ( tea "github.com/charmbracelet/bubbletea" - "github.com/charmbracelet/lipgloss" ) type Help struct { - df lipgloss.DoeFoot + // df lipgloss.DoeFoot } func (h Help) Update(m tea.Msg) (tea.Model, tea.Cmd) { return h, nil } + func (h Help) Init() tea.Cmd { return nil } @@ -24,7 +24,7 @@ func New() Help { return Help{} } -func (h Help) UpdateDoeFoot(df lipgloss.DoeFoot) Help { - h.df = df - return h -} +//func (h Help) UpdateDoeFoot(df lipgloss.DoeFoot) Help { +// h.df = df +// return h +//}