add persistent flag --kind

use it to configure the client
This commit is contained in:
onyx-and-iris 2026-01-31 01:29:14 +00:00
parent ddbf52430a
commit d5c88f31e0
6 changed files with 52 additions and 22 deletions

View File

@ -11,12 +11,12 @@ import (
type clientKey string type clientKey string
func WithContext(ctx context.Context, client *xair.XAirClient) context.Context { func WithContext(ctx context.Context, client *xair.Client) context.Context {
return context.WithValue(ctx, clientKey("oscClient"), client) return context.WithValue(ctx, clientKey("oscClient"), client)
} }
func ClientFromContext(ctx context.Context) *xair.XAirClient { func ClientFromContext(ctx context.Context) *xair.Client {
if client, ok := ctx.Value(clientKey("oscClient")).(*xair.XAirClient); ok { if client, ok := ctx.Value(clientKey("oscClient")).(*xair.Client); ok {
return client return client
} }
return nil return nil

View File

@ -28,7 +28,14 @@ various commands to manage mixer settings directly from the terminal.`,
} }
log.SetLevel(level) log.SetLevel(level)
client, err := xair.NewClient(viper.GetString("host"), viper.GetInt("port")) kind := xair.NewMixerKind(viper.GetString("kind"))
log.Debugf("Initializing client for mixer kind: %s", kind)
client, err := xair.NewClient(
viper.GetString("host"),
viper.GetInt("port"),
xair.WithKind(string(kind)),
)
if err != nil { if err != nil {
return err return err
} }
@ -68,6 +75,7 @@ func init() {
rootCmd.PersistentFlags().IntP("port", "p", 10024, "Port number of the X Air mixer") rootCmd.PersistentFlags().IntP("port", "p", 10024, "Port number of the X Air mixer")
rootCmd.PersistentFlags(). rootCmd.PersistentFlags().
StringP("loglevel", "l", "warn", "Log level (debug, info, warn, error, fatal, panic)") StringP("loglevel", "l", "warn", "Log level (debug, info, warn, error, fatal, panic)")
rootCmd.PersistentFlags().StringP("kind", "k", "xair", "Kind of mixer (xair, x32)")
viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_")) viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
viper.SetEnvPrefix("XAIR_CLI") viper.SetEnvPrefix("XAIR_CLI")
@ -75,4 +83,5 @@ func init() {
viper.BindPFlag("host", rootCmd.PersistentFlags().Lookup("host")) viper.BindPFlag("host", rootCmd.PersistentFlags().Lookup("host"))
viper.BindPFlag("port", rootCmd.PersistentFlags().Lookup("port")) viper.BindPFlag("port", rootCmd.PersistentFlags().Lookup("port"))
viper.BindPFlag("loglevel", rootCmd.PersistentFlags().Lookup("loglevel")) viper.BindPFlag("loglevel", rootCmd.PersistentFlags().Lookup("loglevel"))
viper.BindPFlag("kind", rootCmd.PersistentFlags().Lookup("kind"))
} }

View File

@ -7,3 +7,12 @@ var xairAddressMap = map[string]string{
var x32AddressMap = map[string]string{ var x32AddressMap = map[string]string{
"bus": "/bus/%02d", "bus": "/bus/%02d",
} }
func addressMapForMixerKind(kind MixerKind) map[string]string {
switch kind {
case KindX32:
return x32AddressMap
default:
return xairAddressMap
}
}

View File

@ -18,7 +18,7 @@ type parser interface {
} }
type engine struct { type engine struct {
Kind string Kind MixerKind
conn *net.UDPConn conn *net.UDPConn
mixerAddr *net.UDPAddr mixerAddr *net.UDPAddr
@ -54,10 +54,11 @@ func NewClient(mixerIP string, mixerPort int, opts ...Option) (*Client, error) {
log.Debugf("Local UDP connection: %s ", conn.LocalAddr().String()) log.Debugf("Local UDP connection: %s ", conn.LocalAddr().String())
e := &engine{ e := &engine{
Kind: "xair", Kind: KindXAir,
conn: conn, conn: conn,
mixerAddr: mixerAddr, mixerAddr: mixerAddr,
parser: newParser(), parser: newParser(),
addressMap: addressMapForMixerKind(KindXAir),
done: make(chan bool), done: make(chan bool),
respChan: make(chan *osc.Message, 100), respChan: make(chan *osc.Message, 100),
} }

19
internal/xair/kinds.go Normal file
View File

@ -0,0 +1,19 @@
package xair
type MixerKind string
const (
KindXAir MixerKind = "xair"
KindX32 MixerKind = "x32"
)
func NewMixerKind(kind string) MixerKind {
switch kind {
case "xair":
return KindXAir
case "x32":
return KindX32
default:
return KindXAir
}
}

View File

@ -1,18 +1,10 @@
package xair package xair
import "strings"
type Option func(*engine) type Option func(*engine)
func WithKind(kind string) Option { func WithKind(kind string) Option {
if strings.EqualFold(kind, "x32") { return func(e *engine) {
return func(c *engine) { e.Kind = MixerKind(kind)
c.Kind = kind e.addressMap = addressMapForMixerKind(e.Kind)
c.addressMap = x32AddressMap
}
}
return func(c *engine) {
c.Kind = "xair"
c.addressMap = xairAddressMap
} }
} }