// Command devserver runs the editor server alone, against a throwaway preset // file, so the web UI can be opened during development on a non-Windows box. // // It is a development aid, not part of the shipped product: the real server is // started on demand by the tray. package main import ( "flag" "fmt" "log" "os" "path/filepath" "gitea.apointless.space/bsncubed/ipswap/internal/config" "gitea.apointless.space/bsncubed/ipswap/internal/netcfg" "gitea.apointless.space/bsncubed/ipswap/internal/preset" "gitea.apointless.space/bsncubed/ipswap/internal/server" "gitea.apointless.space/bsncubed/ipswap/internal/switcher" ) func main() { dir := flag.String("dir", "", "data directory (default: a temp dir seeded with examples/preset-pack.json)") flag.Parse() d := *dir if d == "" { var err error d, err = os.MkdirTemp("", "ipswap-dev-") if err != nil { log.Fatal(err) } seed, err := os.ReadFile(filepath.Join("examples", "preset-pack.json")) if err == nil { _ = os.WriteFile(filepath.Join(d, "presets.json"), seed, 0o644) } } paths := config.Paths{ Dir: d, Presets: filepath.Join(d, "presets.json"), Config: filepath.Join(d, "config.json"), Log: filepath.Join(d, "ipswap.log"), } store, err := preset.NewStore(paths.Presets) if err != nil { log.Fatal(err) } mgr := netcfg.New() srv := server.New(store, switcher.New(store, mgr), mgr, paths, config.Default()) url, err := srv.Start() if err != nil { log.Fatal(err) } fmt.Println(url) select {} // serve until killed }