package main import ( "context" "fmt" "git.aiterp.net/lucifer/new-server/app/client" "git.aiterp.net/lucifer/new-server/app/services/handlerfactory" "log" "os" ) func factoryCmd( ctx context.Context, c client.Client, ) { cmd := parseCommand(os.Args[2:]) switch cmd.Name { case "run": fileName := cmd.Params.Get(0).String() if fileName == nil { log.Fatalln("Missing filename") } scenes, err := c.GetScenes(ctx) if err != nil { log.Fatalln(err.Error()) } handlers, err := c.GetHandlers(ctx) if err != nil { log.Fatalln(err.Error()) } file, err := os.Open(*fileName) if err != nil { log.Fatalln("Failed to open file:", err) } defer file.Close() configs, err := handlerfactory.ParseConfigs(file) if err != nil { log.Fatalln("Failed to parse file:", err) } for _, config := range configs { toAdd, toRemove := handlerfactory.CreateHandlers(config, scenes, handlers) for _, removing := range toRemove { _, err := c.DeleteHandler(ctx, removing.ID) if err != nil { log.Fatalln(err.Error()) } log.Printf("Removed handler %d", removing.ID) } for _, adding := range toAdd { res, err := c.AddHandler(ctx, adding) if err != nil { log.Fatalln(err.Error()) } log.Printf("Added handler %d", res.ID) } } default: if cmd.Name != "help" { log.Println("Unknown command:", cmd.Name) } _, _ = fmt.Fprintln(os.Stderr, helpString[1:]) } }