From 6e94157c151a245ceb3635a4bb34580b688ee110 Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Sat, 24 Jan 2026 00:52:53 +0000 Subject: [PATCH] move obs connection logic into run() so we can exit early when running completion --- main.go | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/main.go b/main.go index 126a3a3..47cf333 100644 --- a/main.go +++ b/main.go @@ -123,12 +123,7 @@ func main() { }(), }) - client, err := connectObs(cli.ObsConfig) - ctx.FatalIfErrorf(err) - - ctx.Bind(newContext(client, os.Stdout, cli.StyleConfig)) - - ctx.FatalIfErrorf(run(ctx, client)) + ctx.FatalIfErrorf(run(ctx, cli.ObsConfig, cli.StyleConfig)) } // connectObs creates a new OBS client and connects to the OBS WebSocket server. @@ -145,8 +140,18 @@ func connectObs(cfg ObsConfig) (*goobs.Client, error) { } // run executes the command line interface. -// It disconnects the OBS client after the command is executed. -func run(ctx *kong.Context, client *goobs.Client) error { +// It connects to the OBS WebSocket server and binds the context to the selected command. +// It also handles the "completion" command separately to avoid unnecessary connections. +func run(ctx *kong.Context, obsCfg ObsConfig, styleCfg StyleConfig) error { + if ctx.Selected().Name == "completion" { + return ctx.Run() + } + + client, err := connectObs(obsCfg) + if err != nil { + return err + } + defer func() error { if err := client.Disconnect(); err != nil { return fmt.Errorf("failed to disconnect from OBS: %w", err) @@ -154,5 +159,7 @@ func run(ctx *kong.Context, client *goobs.Client) error { return nil }() + ctx.Bind(newContext(client, os.Stdout, styleCfg)) + return ctx.Run() }