waka_footer.go (905B)
1 package tui 2 3 import ( 4 "git.prime8.dev/moncheeta/prime8dev/internal/external" 5 tea "github.com/charmbracelet/bubbletea" 6 ) 7 8 type wakaFooterMsg struct { 9 hours string 10 weekly *external.WeeklyStats 11 ok bool 12 } 13 14 type wakaFooterInitMsg struct{} 15 16 func initWakaFooterCmd() tea.Cmd { 17 return func() tea.Msg { 18 return wakaFooterInitMsg{} 19 } 20 } 21 22 func (m *portfolioModel) maybeLoadWakaFooterCmd() tea.Cmd { 23 if m.wakaLoaded || m.wakaLoading || m.wakaTime == nil { 24 return nil 25 } 26 27 m.wakaLoading = true 28 return fetchWakaFooterCmd(m.wakaTime) 29 } 30 31 func fetchWakaFooterCmd(service *external.WakaTime) tea.Cmd { 32 return func() tea.Msg { 33 stats, err := service.FetchStats() 34 if err != nil || stats == nil { 35 return wakaFooterMsg{ok: false} 36 } 37 38 hasData := stats.AllTime.TotalText != "" || len(stats.Weekly.Days) > 0 39 return wakaFooterMsg{hours: stats.AllTime.TotalText, weekly: &stats.Weekly, ok: hasData} 40 } 41 }