package example import ( "context" "fmt" "slices" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/yaml" "edge-infra.dev/pkg/sds/display/displaymanager/applier" examplereader "edge-infra.dev/pkg/sds/display/displaymanager/reader/example" v2 "edge-infra.dev/pkg/sds/display/k8s/apis/v2" ) // Returns a new DisplayApplier which simply logs the display configuration to be applied. func NewExampleDisplayApplier(withLogging bool) applier.DisplayApplier { return &exampleApplier{ withLogging: withLogging, } } type exampleApplier struct { withLogging bool } func (a *exampleApplier) Apply(ctx context.Context, displayConfig *v2.DisplayConfig) (*v2.DisplayConfig, error) { log := ctrl.LoggerFrom(ctx) filterInputDeviceMappings(displayConfig, examplereader.HostInputDevices) bytes, err := yaml.Marshal(displayConfig) if err != nil { return nil, err } if a.withLogging { log.Info("applying display configuration", "DisplayConfig", displayConfig) fmt.Printf("\nApplying display configuration:\n\n%s\n", string(bytes)) } return displayConfig, nil } // Removes mappings from the display config where a matching input device does not exist, // or it was already mapped to another display. func filterInputDeviceMappings(displayConfig *v2.DisplayConfig, inputDevices []v2.InputDeviceName) { for _, display := range displayConfig.Displays { displayInputDevices := []v2.InputDeviceName{} for _, inputDevice := range display.InputDeviceMappings { if slices.Contains(inputDevices, inputDevice) { displayInputDevices = append(displayInputDevices, inputDevice) } } display.InputDeviceMappings = displayInputDevices displayConfig.Displays.UpdateDisplay(display) } }