1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00
wtf/modules/victorops/widget.go
Sean Smith 7f3daaac59 Have keyboard widget manage its own help
Define help with keys
This means that keys and help are automatically in sync
This means that you can't define keys, but forget help
This unfortunately also means that formatting may not be quite as good
2019-05-11 12:15:52 -04:00

85 lines
1.7 KiB
Go

package victorops
import (
"fmt"
"github.com/rivo/tview"
"github.com/wtfutil/wtf/wtf"
)
// Widget contains text info
type Widget struct {
wtf.TextWidget
teams []OnCallTeam
settings *Settings
}
// NewWidget creates a new widget
func NewWidget(app *tview.Application, settings *Settings) *Widget {
widget := Widget{
TextWidget: wtf.NewTextWidget(app, settings.common, true),
}
widget.View.SetScrollable(true)
widget.View.SetRegions(true)
return &widget
}
// Refresh gets latest content for the widget
func (widget *Widget) Refresh() {
if widget.Disabled() {
return
}
teams, err := Fetch(widget.settings.apiID, widget.settings.apiKey)
widget.View.SetTitle(widget.ContextualTitle(widget.CommonSettings.Title))
if err != nil {
widget.Redraw(widget.CommonSettings.Title, err.Error(), true)
} else {
widget.teams = teams
widget.Redraw(widget.CommonSettings.Title, widget.contentFrom(widget.teams), true)
}
}
func (widget *Widget) display() {
if widget.teams == nil {
return
}
widget.View.SetWrap(false)
widget.View.Clear()
widget.View.SetText(widget.contentFrom(widget.teams))
}
func (widget *Widget) contentFrom(teams []OnCallTeam) string {
var str string
if teams == nil || len(teams) == 0 {
return "No teams specified"
}
for _, team := range teams {
if len(widget.settings.team) > 0 && widget.settings.team != team.Slug {
continue
}
str = fmt.Sprintf("%s[green]%s\n", str, team.Name)
if len(team.OnCall) == 0 {
str = fmt.Sprintf("%s[grey]no one\n", str)
}
for _, onCall := range team.OnCall {
str = fmt.Sprintf("%s[white]%s - %s\n", str, onCall.Policy, onCall.Userlist)
}
str = fmt.Sprintf("%s\n", str)
}
if len(str) == 0 {
str = "Could not find any teams to display"
}
return str
}