mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
* WTF-1031 Rename WtfApp.app to WtfApp.tviewApp Signed-off-by: Chris Cummer <chriscummer@me.com> * WTF-1031 Add scaffolding for main to support multiple WtfApp instances Signed-off-by: Chris Cummer <chriscummer@me.com> * WTF-1031 WIP Signed-off-by: Chris Cummer <chriscummer@me.com> * Remove common functionality from KeyboardWidget and into Base Signed-off-by: Chris Cummer <chriscummer@me.com> * Augment with some descriptive comments Signed-off-by: Chris Cummer <chriscummer@me.com> * Add full support for multiple app instances via the AppManager. Still to do: * Config support for multiple apps/multiple config files * The ability to switch between apps Signed-off-by: Chris Cummer <chriscummer@me.com> * Move SetTerminal out of main and into its own file Signed-off-by: Chris Cummer <chriscummer@me.com>
82 lines
1.8 KiB
Go
82 lines
1.8 KiB
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/logrusorgru/aurora"
|
|
"github.com/wtfutil/wtf/cfg"
|
|
"github.com/wtfutil/wtf/wtf"
|
|
)
|
|
|
|
// ModuleValidator is responsible for validating the state of a module's configuration
|
|
type ModuleValidator struct{}
|
|
|
|
type widgetError struct {
|
|
name string
|
|
validationErrors []cfg.Validatable
|
|
}
|
|
|
|
// NewModuleValidator creates and returns an instance of ModuleValidator
|
|
func NewModuleValidator() *ModuleValidator {
|
|
return &ModuleValidator{}
|
|
}
|
|
|
|
// Validate rolls through all the enabled widgets and looks for configuration errors.
|
|
// If it finds any it stringifies them, writes them to the console, and kills the app gracefully
|
|
func (val *ModuleValidator) Validate(widgets []wtf.Wtfable) {
|
|
validationErrors := validate(widgets)
|
|
|
|
if len(validationErrors) > 0 {
|
|
fmt.Println()
|
|
for _, error := range validationErrors {
|
|
for _, message := range error.errorMessages() {
|
|
fmt.Println(message)
|
|
}
|
|
}
|
|
fmt.Println()
|
|
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
func validate(widgets []wtf.Wtfable) (widgetErrors []widgetError) {
|
|
for _, widget := range widgets {
|
|
error := widgetError{name: widget.Name()}
|
|
|
|
for _, val := range widget.CommonSettings().Validations() {
|
|
if val.HasError() {
|
|
error.validationErrors = append(error.validationErrors, val)
|
|
}
|
|
}
|
|
|
|
if len(error.validationErrors) > 0 {
|
|
widgetErrors = append(widgetErrors, error)
|
|
}
|
|
}
|
|
|
|
return widgetErrors
|
|
}
|
|
|
|
func (err widgetError) errorMessages() (messages []string) {
|
|
widgetMessage := fmt.Sprintf(
|
|
"%s in %s configuration",
|
|
aurora.Red("Errors"),
|
|
aurora.Yellow(
|
|
fmt.Sprintf(
|
|
"%s.position",
|
|
err.name,
|
|
),
|
|
),
|
|
)
|
|
messages = append(messages, widgetMessage)
|
|
|
|
for _, e := range err.validationErrors {
|
|
configMessage := fmt.Sprintf(" - %s\t%s %v", e.String(), aurora.Red("Error:"), e.Error())
|
|
|
|
messages = append(messages, configMessage)
|
|
}
|
|
|
|
return messages
|
|
}
|