package widgets import ( "ArinDash/apis/nina" "ArinDash/util" "context" "fmt" "regexp" "time" "github.com/mum4k/termdash/cell" "github.com/mum4k/termdash/terminal/terminalapi" "github.com/mum4k/termdash/widgetapi" "github.com/mum4k/termdash/widgets/text" ) type NinaWarningsOptions struct { } func NinaWarnings() NinaWarningsOptions { widgetOptions["NinaWarningsOptions"] = createNinaWarnings return NinaWarningsOptions{} } func createNinaWarnings(ctx context.Context, _ terminalapi.Terminal, _ interface{}) widgetapi.Widget { widget := util.PanicOnErrorWithResult(text.New(text.WrapAtWords())) go util.Periodic(ctx, 1*time.Minute, func() error { warnings := nina.FetchWarnings() widget.Reset() for _, warning := range warnings { for _, info := range warning.Info { var options []cell.Option if info.Severity == "Moderate" { options = append(options, cell.FgColor(cell.ColorRed)) } else if info.Severity == "Minor" { options = append(options, cell.FgColor(cell.ColorYellow)) } else if info.Severity == "Fine" { options = append(options, cell.FgColor(cell.ColorGray)) } else if info.Severity == "Cancel" { options = append(options, cell.FgColor(cell.ColorGreen)) } else { options = append(options, cell.FgColor(cell.ColorRed)) options = append(options, cell.Blink()) } if err := widget.Write(fmt.Sprintf("%s\n\n", info.Headline), text.WriteCellOpts(append(options, cell.Bold())...)); err != nil { return err } if err := widget.Write(fmt.Sprintf("%s\n\n\n", removeElements(info.Description)), text.WriteCellOpts(options...)); err != nil { return err } } } return nil }) return widget } func removeElements(input string) string { // Pattern to match content or re := regexp.MustCompile(`.*|
| `) return re.ReplaceAllString(input, "") }