package main import ( "context" "fmt" "git.aiterp.net/lucifer/new-server/app/client" "git.aiterp.net/lucifer/new-server/models" "log" "os" ) func handlerCmd( ctx context.Context, c client.Client, ) { cmd := parseCommand(os.Args[2:]) switch cmd.Name { case "list": handlers, err := c.GetHandlers(ctx) if err != nil { log.Fatalln(err) } WriteHandlerInfoTable(os.Stdout, handlers) case "add": model := models.EventHandler{} // Event name model.EventName = cmd.Params.Get(0).StringOr("") if len(model.EventName) == 0 { log.Fatalln("Event name needed!") } // Search fetchStr := cmd.Params.Get(1).String() if fetchStr == nil { log.Fatalln("Search filter needed!") } model.TargetKind, model.TargetValue = models.ParseFetchString(*fetchStr) // From / To model.From = cmd.Params.Get("from").TimeOfDayOr(models.Never) model.To = cmd.Params.Get("to").TimeOfDayOr(models.Never) if model.From.IsNever() != model.To.IsNever() { log.Fatalln("from and to must be specified together!") } // One shot model.OneShot = cmd.Params.Get("one-shot").StringOr("false") == "true" // Priority model.Priority = cmd.Params.Get("priority").IntOr(100) // Conditions model.Conditions = cmd.Params.Subset("conditions").EventConditions() // Power, Color, Intensity, Temperature nds := cmd.Params.DeviceState("set-") model.Actions.SetPower = nds.Power model.Actions.SetColor = nds.Color model.Actions.SetIntensity = nds.Intensity // Add intensity model.Actions.AddIntensity = cmd.Params.Get("add-intensity").Float() // Fire fireParams := cmd.Params.Subset("fire") fireName := fireParams.Get("name").String() if fireName != nil { firePayloadParams := fireParams.Subset("payload") model.Actions.FireEvent = &models.Event{ Name: *fireName, Payload: make(map[string]string, len(firePayloadParams)), } for key, value := range firePayloadParams.StringMap() { model.Actions.FireEvent.Payload[key] = value } } newHandler, err := c.AddHandler(ctx, model) if err != nil { log.Fatalln(err) } WriteHandlerInfoTable(os.Stdout, []models.EventHandler{*newHandler}) case "delete": id := cmd.Params.Get(0).Int() if id == nil { log.Fatalln("ID missing") } handler, err := c.DeleteHandler(ctx, *id) if err != nil { log.Fatalln(err) } WriteHandlerInfoTable(os.Stdout, []models.EventHandler{*handler}) default: if cmd.Name != "help" { log.Println("Unknown command:", cmd.Name) } _, _ = fmt.Fprintln(os.Stderr, helpString[1:]) } }